이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

기하 변환의 행렬 표현

기하 변환 행렬을 사용하여 영상의 전역 변환을 수행할 수 있습니다. 먼저 변환 행렬을 정의하고 이 행렬을 사용하여 기하 변환 객체를 만듭니다. 그런 다음 기하 변환 객체와 함께 imwarp를 호출함으로써 영상에 전역 변환을 적용합니다. 예제는 Perform Simple 2-D Translation Transformation 항목을 참조하십시오.

2차원 아핀 변환

다음 표에는 2차원 아핀 변환과 이를 정의하는 데 사용되는 변환 행렬이 나열되어 있습니다. 2차원 아핀 변환의 경우 마지막 열은 [0 0 1] 동차 좌표를 포함해야 합니다.

변환 행렬을 사용하여 affine2d 기하 변환 객체를 만듭니다.

2차원 아핀 변환예(원본 영상과 변환된 영상)변환 행렬
평행 이동

txx축을 따라 변위를 지정합니다.

tyy축을 따라 변위를 지정합니다.

픽셀 좌표에 대한 자세한 내용은 영상 좌표 시스템 항목을 참조하십시오.

스케일링

sxx축을 따라 스케일링 인자를 지정합니다.

syy축을 따라 스케일링 인자를 지정합니다.

전단

shxx축을 따라 전단 인자를 지정합니다.

shyy축을 따라 전단 인자를 지정합니다.

회전

q는 원점을 중심으로 한 회전 각도를 지정합니다.

2차원 사영 변환

사영 변환을 수행하면 영상의 평면을 기울일 수 있습니다(틸트 효과). 평행선들이 소실점 방향으로 수렴할 수 있기 때문에 깊이가 있는 것처럼 보이게 됩니다.

이 변환은 3x3 행렬입니다. 아핀 변환과 달리 변환 행렬의 마지막 열에 대한 제약이 없습니다.

2차원 사영 변환 예제변환 행렬
틸트

[10E01F001]

EF는 소실점에 영향을 줍니다.

EF가 크면 소실점이 원점에 더 가까워져서 평행선들이 더 빨리 수렴하는 것처럼 보입니다.

EF가 0이면 이 변환은 아핀 변환이 됩니다.

사영 변환은 정렬되지 않은 영상을 정합할 때 자주 사용됩니다. 정렬하려는 두 영상이 있는 경우 먼저 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]을 포함해야 합니다.

변환 행렬을 사용하여 affine3d 기하 변환 객체를 만듭니다.

3차원 아핀 변환변환 행렬  
평행 이동

[100001000010txtytz1]

  
스케일링

[sx0000sy0000sz00001]

  
전단x,y 전단:

x'=x+azy'=y+bzz'=z

[10000100ab100001]

x,z 전단:

x'=x+ayy'=yz'=z+cy

[1000a1c000100001]

y, z 전단:

x'=xy'=y+bxz'=z+cx

[1bc0010000100001]

회전x축을 중심으로:

[10000cos(a)sin(a)00sin(a)cos(a)00001]

y축을 중심으로:

[cos(a)0sin(a)00100sin(a)0cos(a)00001]

z축을 중심으로:

[cos(a)sin(a)00sin(a)cos(a)0000100001]

N차원 아핀 변환의 경우 마지막 열은 [zeros(N,1); 1]을 포함해야 합니다. imwarp는 4차원 이상의 변환을 지원하지 않습니다.

참고 항목

|

관련 예제

세부 정보