2차원과 3차원 기하 변환 과정 개요
2차원 또는 3차원 기하 변환을 수행하려면 먼저 변환에 대한 정보를 저장하는 기하 변환 객체를 만드십시오. 그런 다음, 변환할 영상과 기하 변환 객체를 imwarp
함수에 전달합니다. 선택적으로, 입력 영상에 대한 공간 참조 정보를 imwarp
에 전달할 수도 있습니다.
imwarp
는 기하 변환을 사용해 출력 영상의 좌표를 입력 영상의 대응하는 좌표에 매핑합니다(역방향 매핑). 그런 다음 imwarp
는 좌표 매핑을 사용하여 입력 영상 내에 있는 픽셀 값을 보간하고 출력 픽셀 값을 계산합니다.
기하 변환 객체 만들기
기하 변환 객체의 유형마다 변환에 대한 각기 다른 정보를 저장합니다.
여러 객체들이 특정 유형의 선형 기하 변환을 나타내는 변환 행렬을 저장합니다. 이러한 객체에는
affinetform2d
,affinetform3d
,rigidtform2d
,rigidtform3d
,simtform2d
,simtform3d
,transltform2d
,transltform3d
,projtform2d
가 포함됩니다.geometricTransform2d
및geometricTransform3d
객체는 역방향 점별 매핑 함수를 저장하고, 선택적으로 순방향 점별 매핑 함수를 저장합니다.PolynomialTransformation2D
객체는 역방향 점별 매핑을 2차원 다항식의 형식으로 저장합니다.LocalWeightedMeanTransformation2D
및PiecewiseLinearTransformation2D
객체는 국소적으로 변화하는 점별 매핑 함수의 다른 형식을 나타냅니다.
기하 변환 객체를 만드는 방법에는 여러 가지가 있습니다.
기하 변환을 만드는 방법 |
|
|
| projective2d |
| 기타 기하 변환 |
---|---|---|---|---|---|---|
평행 이동, 회전 또는 스케일 파라미터 지정하기 | X | X | ||||
변환 행렬 지정하기 | X | X | X | X | ||
사용자 지정 점별 매핑 함수 지정하기 | X | |||||
제어점 쌍으로부터 변환 추정하기 | X(2차원) | X(2차원) | X(2차원) | X | ||
유사도 최적화를 사용하여 변환 추정하기 | X(2차원) | X(2차원) | X(2차원) | |||
위상 상관을 사용하여 변환 추정하기 | X(2차원) | X(2차원) | ||||
무작위 아핀 변환 생성하기 | X |
평행 이동, 회전 또는 스케일 파라미터 지정하기
평행 이동의 양, 회전 각도, 스케일링 인자를 알고 있는 경우 이러한 파라미터를 지정하여 변환을 만들 수 있습니다.
평행 이동 변환을 나타내는
transltform2d
및transltform3d
객체를 만들려면 평행 이동을 지정합니다.강체 변환을 나타내는
rigidtform2d
및rigidtform3d
객체를 만들려면 평행 이동, 회전 각도 또는 둘 모두를 지정합니다.비반사적 유사 변환을 나타내는
simtform2d
및simtform3d
객체를 만들려면 평행 이동, 회전 및 등방성 스케일링 인자의 조합을 지정합니다.
다음 예제에서는 평행 이동과 회전 각도를 정의한 다음 지정된 파라미터에서 rigidtform2d
기하 변환 객체를 만듭니다.
theta = 30; translation = [10 20.5]; tform = rigidtform2d(theta,translation)
tform = rigidtform2d with properties: Dimensionality: 2 RotationAngle: 30 Translation: [10 20.5000] R: [2×2 double] A: [0.8660 -0.5000 10.0000 0.5000 0.8660 20.5000 0 0 1.0000]
변환 행렬 지정하기
더 복잡한 선형 기하 변환의 경우 변환을 행렬로 나타낼 수 있습니다. 예를 들어, 사영 변환이나, 반사, 비등방성 스케일링, 전단 또는 선형 변환의 구성과 관련된 아핀 변환에 행렬 표현을 사용하십시오. 변환 행렬을 사용하여 affinetform2d
, affinetform3d
또는 projtform2d
객체를 만듭니다. 변환 행렬 만들기에 대한 자세한 내용은 기하 변환의 행렬 표현 항목을 참조하십시오.
다음 예제에서는 비등방성 스케일링과 y축을 기준으로 한 반사에 대한 변환 행렬을 정의한 다음, 변환 행렬에서 affinetform2d
기하 변환 객체를 만듭니다.
scaleX = 0.8; scaleY = 1.5; A = [scaleX 0 0; 0 -scaleY 0; 0 0 1]; tform = affinetform2d(A)
tform = affinetform2d with properties: Dimensionality: 2 A: [0.8000 0 0 0 -1.5000 0 0 0 1.0000]
사용자 지정 점별 매핑 함수 지정하기
역방향 점별 매핑 함수가 있는 경우 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
제어점 쌍으로부터 변환 추정하기
제어점 쌍을 fitgeotform2d
함수에 전달하여 기하 변환 객체를 만들 수 있습니다. fitgeotform2d
함수는 이러한 점으로부터 변환을 자동으로 추정한 다음 기하 변환 객체 중 하나를 반환합니다.
변환에 따라 필요한 점 개수가 다릅니다. 예를 들어 아핀 변환에는 각 영상에 동일직선상에 있지 않은 3개의 점(삼각형)이 필요하고, 사영 변환에는 4개의 점(사변형)이 필요합니다.
이 예제에서는 2개의 제어점 쌍을 정의한 다음 fitgeotform2d
를 사용하여 affinetform2d
기하 변환 객체를 만듭니다.
movingPoints = [11 11;21 11; 21 21];
fixedPoints = [51 51;61 51;61 61];
tform = fitgeotform2d(movingPoints,fixedPoints,"affine")
tform = affinetform2d with properties: Dimensionality: 2 A: [1.0000 0 40.0000 0 1.0000 40.0000 0 0 1.0000]
유사도 최적화를 사용하여 변환 추정하기
고정 영상과 이동 영상에서 정렬이 약간 맞지 않은 경우 imregtform
함수를 사용하여, 영상을 정렬하는 아핀 기하 변환을 추정할 수 있습니다. imregtform
은 규칙적 스텝 경사하강법 또는 원 플러스 원(one-plus-one) 진화 최적화 방식을 사용하여 두 영상의 평균제곱 또는 Mattes 상호 정보량 유사도 메트릭을 최적화합니다. 자세한 내용은 Create an Optimizer and Metric for Intensity-Based Image Registration 항목을 참조하십시오.
위상 상관을 사용하여 변환 추정하기
고정 영상과 이동 영상에서 정렬이 심하게 맞지 않은 경우 imregcorr
함수를 사용하여, 영상 정렬을 개선하는 아핀 기하 변환을 추정할 수 있습니다. 유사도 최적화를 사용하여 결과 변환을 미세 조정할 수 있습니다.
무작위 아핀 변환 생성하기
randomAffine2d
함수와 randomAffine3d
함수를 사용하여 무작위 변환 파라미터로 아핀 기하 변환을 만들 수 있습니다. 이러한 함수는 각 축을 기준으로 한 반사, 회전, 전단, 비등방성 스케일링 인자를 포함한 모든 아핀 파라미터를 지원합니다. 무작위 아핀 변환은 일반적으로 딥러닝을 위한 데이터 증강 기술로 사용됩니다.