Lanczos Warping

1 개요

Lanczos Warping은 설정된 제어점들을 이용하여 Lanczos interpolation 방식을 통해 이미지를 변환하는 알고리즘입니다. 아래 식은 사용된 Lanczos 식입니다.

2 알고리즘 상세 설명

Source Source points Dest points Result
Source Result Result Result
Fig. 알고리즘 수행 결과

3 파라미터 설정 및 사용 방법

Lanczos Warping의 경우 먼저 어떤 방식으로 Warping을 할 것인지 Calibrate를 통해 학습한 후 Execute 해야 합니다.

Lanczos Warping 연산 시 컨트롤 포인트의 패딩값을 설정합니다.

Lanczos Warping 연산 시 보간 방법을 아래와 같이 설정합니다.

Source및 Destination의 캘리브레이션 포인트를 아래와 같이 설정 합니다.

3-1. GUI를 통한 Gride Points 간편 설정

Calibration Points 를 설정하기 위해 다음과 같이 GUI를 통해 설정할 수 있습니다.

Source View에 다음과 같은 방식으로 진행하게 된다면 Grid Points가 생성됩니다.

  1. Property 창에 MakeGridPoints 버튼 클릭
ROI Result

Fig. Property 창에 MakeGridPoints 버튼

  1. 원하는 개수의 Grid Points 입력
ROI Result

Fig. MakeGridPoints Dialog 창

  1. Source View 위에 Grid Points 가 생성되어 있습니다.
ROI Result

Fig. MakeGridPoints Dialog 창

  1. 원하는 Calibration Points에 생성된 Grid Point를 입력하면 됩니다.
ROI Result

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();
CFLImage fliSourceImage = new CFLImage();
CFLImage fliDestinationImage = new CFLImage();

fliSourceImage.Load(L"ExampleImages/LanczosWarping/chess.flif");

CLanczosWarping lanczosWarping = new CLanczosWarping();

// Calibrate
CFLPointArray flpaSource = new CFLPointArray();

flpaSource.PushBack(new CFLPoint<double>());
	//		. . .
flpaSource.PushBack(new CFLPoint<double>(100.0, 100.0));


CFLPointArray flpaDestination= new CFLPointArray();

flpaDestination.PushBack(new CFLPoint<double>(10.0,10.0));
	//		. . .
flpaDestination.PushBack(new CFLPoint<double>(90.0, 90.0));
lanczosWarping.SetCalibrationPointArray(flpaSource, flpaDestination);

lanczosWarping.SetExtension(2);

lanczosWarping.Calibrate();

// Execute
topHat.SetSourceImage(ref fliSourceImage);
topHat.SetDestinationImage(ref fliDestinationImage);

lanczosWarping.SetInterpolationMethod(EInterpolationMethod.NearestNeighbor);

lanczosWarping.Execute();