Thin Plate Spline Warping

1 개요

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

2 알고리즘 상세 설명

Thin Plate Spline Warping 알고리즘은 주어진 제어 점들의 Mapping 함수를 통해 유연한 곡선의 비선형 변환을 생성합니다.

Minimize :

Etps,smooth(f)=i=1Kyif(xi)2+λ[fx1x12+2fx1x2+fx2x22]dx1dx2\large \textbf{E}_{tps, smooth}(f) = \sum_{i=1}^{K}\left\| y_{i} -f(x_{i}) \right\|^{2}+\lambda \iint \left [ {f_{x_{1}x_{1}}}^{2} + 2{f_{x_{1}x_{2}}} + {f_{x_{2}x_{2}}}^{2}\right ] dx_{1}dx_{2}

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

3 예제 코드

CThinPlateSplineWarping thinPlateSplineWarping;

CFLImage fliSourceImage;
CFLImage fliDestinationImage;

thinPlateSplineWarping.SetSourceImage(fliSourceImage);
thinPlateSplineWarping.SetDestinationImage(fliDestinationImage);

// 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));
thinPlateSplineWarping.SetCalibrationPointArray(flpaSource, flpaDestination);

thinPlateSplineWarping.Calibrate();

// Execute
thinPlateSplineWarping.SetInterpolationMethod(EInterpolationMethod_Bicubic);

thinPlateSplineWarping.Execute();
CThinPlateSplineWarping thinPlateSplineWarping = new CThinPlateSplineWarping();

CFLImage fliSourceImage = new CFLImage();
CFLImage fliDestinationImage = new CFLImage();

thinPlateSplineWarping.SetSourceImage(ref fliSourceImage);
thinPlateSplineWarping.SetDestinationImage(ref fliDestinationImage);

// Calibrate
CFLPointArray flpaSource = new CFLPointArray();

flpaSource.PushBack(new CFLPoint<double>(0,0));
	//		. . .
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));
thinPlateSplineWarping.SetCalibrationPointArray(flpaSource, flpaDestination);

thinPlateSplineWarping.Calibrate();

// Execute
thinPlateSplineWarping.SetInterpolationMethod(EInterpolationMethod.Bicubic);

thinPlateSplineWarping.Execute();
thinPlateSplineWarping = CThinPlateSplineWarping()

fliSourceImage = CFLImage()
fliDestinationImage = CFLImage()

thinPlateSplineWarping.SetSourceImage(fliSourceImage)
thinPlateSplineWarping.SetDestinationImage(fliDestinationImage)

# Calibrate
flpaSource = CFLPointArray()

flpaSource.PushBack(CFLPoint[Double](0,0))
	#		. . .
flpaSource.PushBack(CFLPoint[Double](100.0, 100.0))


flpaDestination = CFLPointArray()

flpaDestination.PushBack(CFLPoint[Double](10.0,10.0))
	#		. . .
flpaDestination.PushBack(CFLPoint[Double](90.0, 90.0))
thinPlateSplineWarping.SetCalibrationPointArray(flpaSource, flpaDestination)

thinPlateSplineWarping.Calibrate()

# Execute
thinPlateSplineWarping.SetInterpolationMethod(EInterpolationMethod.Bicubic)

thinPlateSplineWarping.Execute()

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

thinPlateSplineWarping.SetInterpolationMethod(eMethod);
thinPlateSplineWarping.SetInterpolationMethod(eMethod);
thinPlateSplineWarping.SetInterpolationMethod(eMethod)
thinPlateSplineWarping.SetCalibrationPointArray(flpaSource, flpaDestination);
thinPlateSplineWarping.SetCalibrationPointArray(flpaSource, flpaDestination);
thinPlateSplineWarping.SetCalibrationPointArray(flpaSource, flpaDestination)
thinPlateSplineWarping.EnableMemorySavingMode(bEnable);
thinPlateSplineWarping.EnableMemorySavingMode(bEnable);
thinPlateSplineWarping.EnableMemorySavingMode(bEnable)
thinPlateSplineWarping.Calibrate();
thinPlateSplineWarping.Calibrate();
thinPlateSplineWarping.Calibrate()
thinPlateSplineWarping.Save(wstrPath);
thinPlateSplineWarping.Save(wstrPath);
thinPlateSplineWarping.Save(wstrPath)
thinPlateSplineWarping.Load(wstrPath);
thinPlateSplineWarping.Load(wstrPath);
thinPlateSplineWarping.Load(wstrPath)