이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
기하 변환의 행렬 표현
기하 변환 행렬을 사용하여 영상의 전역 변환을 수행할 수 있습니다. 먼저 변환 행렬을 정의하고 이 행렬을 사용하여 기하 변환 객체를 만듭니다. 그런 다음 기하 변환 객체와 함께 imwarp
를 호출함으로써 영상에 전역 변환을 적용합니다. 예제는 Perform Simple 2-D Translation Transformation 항목을 참조하십시오.
2차원 아핀 변환
다음 표에는 2차원 아핀 변환과 이를 정의하는 데 사용되는 변환 행렬이 나열되어 있습니다. 2차원 아핀 변환의 경우 마지막 열은 [0 0 1] 동차 좌표를 포함해야 합니다.
2차원 변환 행렬을 임의로 조합하여 affine2d
기하 변환 객체를 만듭니다. 2차원 평행 이동 행렬과 회전 행렬을 조합하여 rigid2d
기하 변환 객체를 만듭니다.
2차원 아핀 변환 | 예(원본 영상과 변환된 영상) | 변환 행렬 | |
---|---|---|---|
평행 이동 |
픽셀 좌표에 대한 자세한 내용은 영상 좌표계 항목을 참조하십시오. | ||
스케일링 | |
| |
전단 | |
| |
회전 | |
|
2차원 사영 변환
사영 변환을 수행하면 영상의 평면을 기울일 수 있습니다(틸트 효과). 평행선들이 소실점 방향으로 수렴할 수 있기 때문에 깊이가 있는 것처럼 보이게 됩니다.
이 변환은 3×3 행렬입니다. 아핀 변환과 달리 변환 행렬의 마지막 열에 대한 제약이 없습니다.
2차원 사영 변환 | 예 | 변환 행렬 | |
---|---|---|---|
틸트 |
|
|
사영 변환은 정렬되지 않은 영상을 정합할 때 자주 사용됩니다. 정렬하려는 두 영상이 있는 경우 먼저 cpselect
를 사용하여 제어점 쌍들을 선택합니다. 그런 다음 fitgeotrans
를 사용하고 transformationType
을 'projective'
로 설정하여 제어점 쌍들을 제어하도록 사영 변환 행렬을 피팅합니다. 이렇게 하면 자동으로 projective2d
기하 변환 객체가 만들어집니다. 변환 행렬은 projective2d
객체에 속성으로 저장됩니다. 이후 imwarp
를 사용하여 다른 영상에 변환을 적용할 수 있습니다.
합성 2차원 아핀 변환 만들기
행렬 곱셈을 사용하여 여러 변환을 하나의 행렬로 결합할 수 있습니다. 이때 행렬 곱셈의 순서가 중요합니다.
이 예제에서는 2차원 평행 이동 변환과 회전 변환의 합성을 만드는 방법을 보여줍니다.
변환을 적용할 체커보드 영상을 만듭니다. 이 영상에 대한 공간 참조 객체도 만듭니다.
cb = checkerboard(4,2); cb_ref = imref2d(size(cb));
영상의 공간 위치를 보여주려면 단순한 배경 영상을 만드십시오. 배경 위에 체커보드를 겹쳐 놓고 체커보드의 위치를 녹색으로 강조 표시합니다.
background = zeros(150); imshowpair(cb,cb_ref,background,imref2d(size(background)))
평행 이동 행렬을 만들고 이 행렬을 affine2d
기하 변환 객체로 저장합니다. 이 변환은 영상을 100픽셀만큼 가로로 이동합니다.
T = [1 0 0;0 1 0;100 0 1]; tform_t = affine2d(T);
회전 행렬을 만들고 이 행렬을 affine2d
기하 변환 객체로 저장합니다. 이 변환은 영상을 원점을 중심으로 시계 방향으로 30도 회전합니다.
R = [cosd(30) sind(30) 0;-sind(30) cosd(30) 0;0 0 1]; tform_r = affine2d(R);
회전 후 평행 이동
먼저 평행 이동을 수행하고 그다음으로 회전을 수행합니다. 변환 행렬의 곱셈에서 평행 이동 행렬 T
를 왼쪽에 두고 회전 행렬 R
을 오른쪽에 둡니다.
TR = T*R; tform_tr = affine2d(TR); [out,out_ref] = imwarp(cb,cb_ref,tform_tr); imshowpair(out,out_ref,background,imref2d(size(background)))
평행 이동 후 회전
변환의 순서를 바꿉니다. 즉, 먼저 회전을 수행하고 그다음으로 평행 이동을 수행합니다. 변환 행렬의 곱셈에서 회전 행렬 R
을 왼쪽에 두고 평행 이동 행렬 T
를 오른쪽에 둡니다.
RT = R*T; tform_rt = affine2d(RT); [out,out_ref] = imwarp(cb,cb_ref,tform_rt); imshowpair(out,out_ref,background,imref2d(size(background)))
회전 후에 평행 이동을 수행했을 때와 비교해 보면 변환된 영상의 공간 위치가 어떻게 달라졌는지 알 수 있습니다.
3차원 아핀 변환
다음 표에는 3차원 아핀 변환과 이를 정의하는 데 사용되는 변환 행렬이 나열되어 있습니다. 3차원의 경우에는 영상을 회전 또는 전단하려는 방식에 따라 행렬이 달라진다는 사실에 유의하십시오. 마지막 열은 [0 0 0 1]을 포함해야 합니다.
3차원 변환 행렬을 임의로 조합하여 affine3d
기하 변환 객체를 만듭니다. 3차원 평행 이동 행렬과 회전 행렬을 조합하여 rigid3d
기하 변환 객체를 만듭니다.
3차원 아핀 변환 | 변환 행렬 | ||
---|---|---|---|
평행 이동 |
| ||
스케일링 |
| ||
전단 | x,y 전단:
| x,z 전단:
| y, z 전단:
|
회전 | x축을 중심으로:
| y축을 중심으로:
| z축을 중심으로:
|
N차원 아핀 변환의 경우 마지막 열은 [zeros(N,1); 1]
을 포함해야 합니다. imwarp
는 4차원 이상의 변환을 지원하지 않습니다.
참고 항목
imwarp
| fitgeotrans
| affine2d
| affine3d
| rigid2d
| rigid3d
| projective2d