이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
2차원과 3차원 기하 변환 과정 개요
2차원 또는 3차원 기하 변환을 수행하려면 먼저 변환에 대한 정보를 저장하는 기하 변환 객체를 만드십시오. 그런 다음, 변환할 영상과 기하 변환 객체를 imwarp
함수에 전달합니다. 선택적으로, 입력 영상에 대한 공간 참조 정보를 imwarp
에 전달할 수도 있습니다.
기하 변환 객체 만들기
기하 변환 객체의 유형마다 변환에 대한 각기 다른 정보를 저장합니다.
rigid2d
,affine2d
,projective2d
,rigid3d
,affine3d
객체는 변환 행렬을 저장합니다.geometricTransform2d
및geometricTransform3d
객체는 역방향 점별 매핑 함수를 저장하고, 선택적으로 순방향 점별 매핑 함수를 저장합니다.LocalWeightedMeanTransformation2D
,PiecewiseLinearTransformation2D
,PolynomialTransformation2D
객체를 포함한 다른 변환 유형은 제어점 쌍 간의 매핑을 저장합니다.
기하 변환 객체를 만드는 방법에는 여러 가지가 있습니다.
변환 객체 생성 방식 | affine2d | affine3d |
| projective2d |
| 기타 변환 객체 |
---|---|---|---|---|---|---|
변환 행렬 정의하기 | X | X | X | X | ||
사용자 지정 점별 매핑 함수 정의하기 | X | |||||
제어점 쌍으로부터 변환 추정하기 | X | X | X | |||
유사도 최적화를 사용하여 변환 추정하기 | X | X | ||||
위상 상관을 사용하여 변환 추정하기 | X |
변환 행렬 정의하기
수행할 기하 변환에 대한 변환 행렬을 알고 있다면 rigid2d
, affine2d
, projective2d
, rigid3d
또는 affine3d
기하 변환 객체를 직접 만들 수 있습니다. 변환 행렬 만들기에 대한 자세한 내용은 기하 변환의 행렬 표현 항목을 참조하십시오.
다음 예제에서는 2차원 평행 이동에 대한 변환 행렬을 정의하고 affine2d
기하 변환 객체를 만듭니다.
xform = [ 1 0 0 0 1 0 40 40 1 ]; tform_translate = affine2d(xform)
tform_translate = affine2d with properties: T: [3x3 double] Dimensionality: 2
사용자 지정 점별 매핑 함수 정의하기
역방향 점별 매핑 함수가 있는 경우 geometricTransform2d
객체와 geometricTransform3d
객체를 각각 사용하여 사용자 지정 2차원 및 3차원 기하 변환을 정의할 수 있습니다.
다음 예제에서는 2차원 점을 받아 팩 형식의 (x,y)로 반환하는 역방향 매핑 함수를 지정합니다. 그런 다음 geometricTransform2d
사용자 지정 기하 변환 객체를 만듭니다.
inversefn = @(c) [c(:,1)+c(:,2),c(:,1).^2]
inversefn = function_handle with value: @(c)[c(:,1)+c(:,2),c(:,1).^2]
tform = geometricTransform2d(inversefn)
tform = geometricTransform2d with properties: InverseFcn: [function_handle] ForwardFcn: [] Dimensionality: 2
마찬가지로, 다음 예제에서는 역방향 매핑 함수를 사용하여 geometricTransform3d
사용자 지정 기하 변환 객체를 만듭니다. 여기서는 3차원 점을 받아 팩 형식의 (x,y,z)로 반환하는 역방향 매핑 함수를 지정합니다.
inversefn = @(c)[c(:,1)+c(:,2),c(:,1)-c(:,2),c(:,3).^2]
inversefn = function_handle with value: @(c)[c(:,1)+c(:,2),c(:,1)-c(:,2),c(:,3).^2]
tform = geometricTransform3d(inversefn)
tform = geometricTransform3d with properties: InverseFcn: [function_handle] ForwardFcn: [] Dimensionality: 3
제어점 쌍으로부터 변환 추정하기
2개의 제어점 쌍 집합을 fitgeotrans
함수에 전달하여 기하 변환 객체를 만들 수 있습니다. fitgeotrans
함수는 이러한 점으로부터 변환을 자동으로 추정한 다음 기하 변환 객체 중 하나를 반환합니다.
변환에 따라 필요한 점 개수가 다릅니다. 예를 들어 아핀 변환에는 각 영상에 동일직선상에 있지 않은 3개의 점(삼각형)이 필요하고, 사영 변환에는 4개의 점(사변형)이 필요합니다.
이 예제에서는 2개의 제어점 집합을 affine2d
기하 변환 객체를 반환하는 fitgeotrans
에 전달합니다.
movingPoints = [11 11;21 11; 21 21];
fixedPoints = [51 51;61 51;61 61];
tform_cpp = fitgeotrans(movingPoints,fixedPoints,'affine')
tform_cpp = affine2d with properties: T: [3x3 double] Dimensionality: 2
유사도 최적화를 사용하여 변환 추정하기
고정 영상과 이동 영상에서 정렬이 약간 맞지 않은 경우 imregtform
함수를 사용하여, 영상을 정렬하는 아핀 기하 변환을 추정할 수 있습니다. imregtform
은 규칙적 스텝 경사하강법 또는 원 플러스 원(one-plus-one) 진화 최적화 방식을 사용하여 두 영상의 평균 제곱 또는 Mattes 상호 정보량 유사도 메트릭을 최적화합니다. 자세한 내용은 Create an Optimizer and Metric for Intensity-Based Image Registration 항목을 참조하십시오.
위상 상관을 사용하여 변환 추정하기
고정 영상과 이동 영상에서 정렬이 심하게 맞지 않은 경우 imregcorr
함수를 사용하여, 영상 정렬을 개선하는 아핀 기하 변환을 추정할 수 있습니다. 유사도 최적화를 사용하여 결과 변환을 미세 조정할 수 있습니다.
기하 변환 수행하기
기하 변환 객체에서 변환을 정의했으면 imwarp
함수를 사용하여 변환을 수행합니다. 이 함수를 호출할 때는 변환할 영상과 기하 변환 객체를 지정합니다.
imwarp
는 기하 변환을 사용해 출력 영상의 좌표를 입력 영상의 대응하는 좌표에 매핑합니다(역방향 매핑). 그런 다음 imwarp
는 좌표 매핑을 사용하여 입력 영상 내에 있는 픽셀 값을 보간하고 출력 픽셀 값을 계산합니다.
참고 항목
imwarp
| fitgeotrans
| affine2d
| affine3d
| rigid2d
| rigid3d
| projective2d
| geometricTransform2d
| geometricTransform3d