Bicubic Spline Warping
1 개요
Bicubic Spline Warping은 설정된 제어 점들을 이용하여 Bicubic spline interpolation 방식을 통해 이미지를 변환하는 알고리즘입니다.
2 알고리즘 상세 설명
Source | Source points | Dest points | Result |
---|---|---|---|
![]() |
![]() |
![]() |
![]() |
Fig. 알고리즘 수행 결과
3 파라미터 설정 및 사용 방법
-
API
SetInterpolationMethod(EInterpolationMethod eMethod = EInterpolationMethod_Bilinear)
- Bicubic Spline Warping 연산 시 보간 방법을 설정합니다.
eMethod
- Default Value : EInterpolationMethod_Bilinear
SetExtension(int32_t i32Extension)
- Bicubic Spline Warping 연산 시 컨트롤 포인트의 연장 길이 값을 설정 합니다.
i32Extension
- Default Value : 1
SetCalibrationPointArray(Foundation::CFLPointArray& flpaSource,Foundation::CFLPointArray& flpaDestination)
- Source및 Destination의 캘리브레이션 포인트를 설정 합니다.
Calibrate()
- 설정된 Source Points Array와 Destination Points Array로 Calibrate를 수행합니다.
Load(Base::CFLString<wchar_t> wstrPath)
- 저장된 캘리브레이션 파일을 로드합니다.
Save(Base::CFLString<wchar_t> wstrPath)
- 캘리브레이션 파일을 저장합니다.
- Bicubic Spline Warping 연산 시 보간 방법을 설정합니다.
-
예제 코드
CBicubicSplineWarping bicubicSplineWarping; // LearnImage 설정 CFLImage fliLearnImage; if(fliLearnImage.Load(L"../../ExampleImages/BicubicSplineWarping/chess.flif").IsFail()) break; bicubicSplineWarping.SetSourceImage(fliLearnImage); // Source Calibration Points 생성 2 x2 CFLPointArray flpaSource; flpaSource.PushBack(CFLPoint<double>()); flpaSource.PushBack(CFLPoint<double>(300.000000, 0.000000)); flpaSource.PushBack(CFLPoint<double>(0.000000, 420.000000)); flpaSource.PushBack(CFLPoint<double>(300.000000, 420.000000)); // Destination Calibration Points 생성 2 x2 CFLPointArray flpaDestination; flpaDestination.PushBack(CFLPoint<double>(43.003413, 34.402730)); flpaDestination.PushBack(CFLPoint<double>(277.064846, 28.668942)); flpaDestination.PushBack(CFLPoint<double>(24.368601, 398.498294)); flpaDestination.PushBack(CFLPoint<double>(232.627986, 362.662116)); /// Source & Destination Calibration Point Array 설정 bicubicSplineWarping.SetCalibrationPointArray(flpaSource, flpaDestination); // Calibration Points 연장 길이 값 설정 bicubicSplineWarping.SetExtension(1); // Calibrate 수행 if(bicubicSplineWarping.Calibrate().IsFail()) break; // Calibration 정보 저장 if(bicubicSplineWarping.Save(L"../../ExampleImages/BicubicSplineWarping/learnCalibration").IsFail()) break; // Calibration 정보 불러오기 if(bicubicSplineWarping.Load(L"../../ExampleImages/BicubicSplineWarping/learnCalibration").IsFail()) break; // 소스 이미지 불러오기 CFLImage fliSourceImage; if(fliSourceImage.Load(L"../../ExampleImages/BicubicSplineWarping/chess.flif").IsFail()) break; bicubicSplineWarping.SetSourceImage(fliSourceImage); // 결과 이미지 설정 CFLImage fliDestinationImage; bicubicSplineWarping.SetDestinationImage(fliDestinationImage); // 알고리즘 수행 if(bicubicSplineWarping.Execute().IsFail()) break; // 결과 이미지 저장 if(fliDestinationImage.Save(L"../../ExampleImages/BicubicSplineWarping/Result.flif").IsFail()) break;