Lanczos Warping
1 개요
Lanczos Warping은 설정된 제어점들을 이용하여 Lanczos interpolation 방식을 통해 이미지를 변환하는 알고리즘입니다. 아래 식은 사용된 Lanczos 식입니다.
2 알고리즘 상세 설명
Source | Source points | Dest points | Result |
---|---|---|---|
![]() |
![]() |
![]() |
![]() |
Fig. 알고리즘 수행 결과
3 파라미터 설정 및 사용 방법
Lanczos Warping의 경우 먼저 어떤 방식으로 Warping을 할 것인지 Calibrate
를 통해 학습한 후 Execute
해야 합니다.
Lanczos Warping 연산 시 컨트롤 포인트의 패딩값을 설정합니다.
SetExtension(int32_t i32Extension = 1)
*Lanczos Warping 연산 시 입력한 값만큼 추가로 Calibrate Points가 입력됩니다.
Lanczos Warping 연산 시 보간 방법을 아래와 같이 설정합니다.
SetInterpolationMethod(EInterpolationMethod eMethod = EInterpolationMethod_Bilinear)
EInterpolationMethod_Bilinear
: Bilinear 식을 사용하여 보간 연산을 수행합니다.EInterpolationMethod_Bicubic
: Bicubic 식을 사용하여 보간 연산을 수행합니다.EInterpolationMethod_Lanczos
: Lanczos 식을 사용하여 보간 연산을 수행합니다.EInterpolationMethod_NearestNeighbor
: 가장 가까운 곳의 픽셀로 보간 연산을 수행합니다.
Source및 Destination의 캘리브레이션 포인트를 아래와 같이 설정 합니다.
-
SetCalibrationPointArray(CFLPointArray flpaSource,CFLPointArray flpaDestination)
flpaSource
: 변형하고자 하는 원본 원소들을 입력합니다.flpaDestination
: 변형하고 싶은 위치에 Destination입니다.
-
Calibrate()
- 설정된 Source Points Array와 Destination Points Array로 Calibrate를 수행합니다.
-
Load()
- 저장된 캘리브레이션 파일을 로드합니다.
- 이전 저장해 놓은 Calibrate 연산을 불러옵니다.
-
Save()
- 연산된 Calibrate 를 파일로 저장합니다.
3-1. GUI를 통한 Gride Points 간편 설정
Calibration Points 를 설정하기 위해 다음과 같이 GUI를 통해 설정할 수 있습니다.
Source View에 다음과 같은 방식으로 진행하게 된다면 Grid Points가 생성됩니다.
- Property 창에 MakeGridPoints 버튼 클릭

Fig. Property 창에 MakeGridPoints 버튼
- 원하는 개수의 Grid Points 입력

Fig. MakeGridPoints Dialog 창
- Source View 위에 Grid Points 가 생성되어 있습니다.

Fig. MakeGridPoints Dialog 창
- 원하는 Calibration Points에 생성된 Grid Point를 입력하면 됩니다.

Fig. Property 창
4 예제 코드
CFLImage fliSourceImage;
CFLImage fliDestinationImage;
fliSourceImage.Load(L"ExampleImages/LanczosWarping/chess.flif");
CLanczosWarping lanczosWarping;
// Calibrate
CFLPointArray flpaSource;
flpaSource.PushBack(CFLPoint<double>(0,0));
// . . .
flpaSource.PushBack(CFLPoint<double>(100.0, 100.0));
CFLPointArray flpaDestination;
flpaDestination.PushBack(CFLPoint<double>(10.0,10.0));
// . . .
flpaDestination.PushBack(CFLPoint<double>(90.0, 90.0));
lanczosWarping.SetCalibrationPointArray(flpaSource, flpaDestination);
lanczosWarping.SetExtension(2);
lanczosWarping.Calibrate();
// Execute
topHat.SetSourceImage(fliSourceImage);
topHat.SetDestinationImage(fliDestinationImage);
lanczosWarping.SetInterpolationMethod(EInterpolationMethod_NearestNeighbor);
lanczosWarping.Execute();