Main Content

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

affine2d

2차원 아핀 기하 변환

설명

affine2d 객체는 2차원 아핀 기하 변환에 대한 정보를 저장하며, 순방향 및 역방향 변환을 적용합니다.

생성

다음 방법을 사용하여 affine2d 객체를 만들 수 있습니다.

  • imregtform — 유사도 최적화를 사용하여 이동 영상을 고정 영상에 매핑하는 기하 변환을 추정합니다.

  • imregcorr — 위상 상관을 사용하여 이동 영상을 고정 영상에 매핑하는 기하 변환을 추정합니다.

  • fitgeotrans — 두 영상 간에 제어점 쌍을 매핑하는 기하 변환을 추정합니다.

  • randomAffine2d — 무작위 방식의 2차원 아핀 변환을 만듭니다.

  • 여기에서 다루는 affine2d 함수.

설명

tform = affine2d는 항등 변환에 해당하는 디폴트 속성 설정을 사용하여 affine2d 객체를 만듭니다.

예제

tform = affine2d(T)는 속성 T를 지정된 유효한 아핀 변환 행렬로 설정합니다.

속성

모두 확장

순방향 2차원 아핀 변환으로, 3x3 숫자형 정칙 행렬로 지정됩니다.

행렬 T는 다음과 같은 규칙을 사용합니다.

[x y 1] = [u v 1] * T

T는 다음과 같은 형태를 갖습니다.

 [a b 0;
  c d 0;
  e f 1];

T의 디폴트 값은 항등 변환입니다.

데이터형: double | single

입력 점과 출력 점에 대한 기하 변환의 차원 수로, 값 2로 지정됩니다.

객체 함수

invertInvert geometric transformation
isRigidDetermine if transformation is rigid transformation
isSimilarityDetermine if transformation is similarity transformation
isTranslationDetermine if transformation is pure translation
outputLimitsFind output spatial limits given input spatial limits
transformPointsForwardApply forward geometric transformation
transformPointsInverseApply inverse geometric transformation

예제

모두 축소

원점을 중심으로 시계 반대 방향으로의 30도 회전을 정의하는 affine2d 객체를 만듭니다.

theta = 30;
tform = affine2d([ ...
    cosd(theta) sind(theta) 0;...
    -sind(theta) cosd(theta) 0; ...
    0 0 1])
tform = 
  affine2d with properties:

    Dimensionality: 2
                 T: [3x3 double]

점 (10,0)에 순방향 기하 변환을 적용합니다.

[x,y] = transformPointsForward(tform,10,0)
x = 8.6603
y = 5

원래 점은 파란색으로, 변환된 점은 빨간색으로 플로팅하여 변환된 결과를 확인합니다.

plot(10,0,'bo',x,y,'ro')
axis([0 12 0 12])
axis square

영상을 읽어 들여 표시합니다.

I = imread('kobi.png');
imshow(I)

영상을 회전하는 affine2d 변환 객체를 만듭니다. randomAffine2d 함수는 구간 [35, 55]도 내의 연속 균등분포에서 무작위로 회전 각도를 선택합니다.

tform1 = randomAffine2d('Rotation',[35 55]);

영상을 회전하고 결과를 표시합니다.

J = imwarp(I,tform1);
imshow(J)

변환 객체 tform1은 모든 영상을 동일한 크기의 각도만큼 회전합니다. 무작위 선택된 다른 크기의 각도로 영상을 회전하려면 새 affine2d 변환 객체를 만드십시오.

tform2 = randomAffine2d('Rotation',[-10 10]);
J2 = imwarp(I,tform2);
imshow(J2)

이 예제에서는 두 영상을 정렬하는 데 쓰일 수 있는 기하 변환을 만드는 방법을 보여줍니다.

체커보드 영상을 만들고 회전하여 정렬이 맞지 않는 영상을 만듭니다.

I = checkerboard(40);
J = imrotate(I,30);
imshowpair(I,J,'montage')

고정 영상(체커보드) 및 이동 영상(회전된 체커보드)에서 몇 개의 일치하는 제어점을 정의합니다. 제어점 선택 툴을 사용하여 대화형 방식으로 점을 정의할 수 있습니다.

fixedPoints = [41 41; 281 161];
movingPoints = [56 175; 324 160];

두 영상을 정렬하는 데 쓰일 수 있는 기하 변환을 만듭니다. affine2d기하 변환 객체로 반환됩니다.

tform = fitgeotrans(movingPoints,fixedPoints,'NonreflectiveSimilarity')
tform = 
  affine2d with properties:

    Dimensionality: 2
                 T: [3x3 double]

tform 추정값을 사용하여 회전된 영상을 리샘플링하고 고정 영상과 정합을 수행합니다. 오버레이 영상에서 녹색과 자홍색의 가색상으로 표시되는 영역은 정합 오류를 나타냅니다. 이 오류는 제어점에 정확한 대응 관계가 없기 때문에 발생합니다.

Jregistered = imwarp(J,tform,'OutputView',imref2d(size(I)));
figure
imshowpair(I,Jregistered)

x축과 평행한 단위 벡터가 얼마나 회전하고 늘어났는지 확인하여 변환의 각도와 스케일을 복원합니다.

u = [0 1]; 
v = [0 0]; 
[x, y] = transformPointsForward(tform, u, v); 
dx = x(2) - x(1); 
dy = y(2) - y(1); 
angle = (180/pi) * atan2(dy, dx) 
angle = 29.7686
scale = 1 / sqrt(dx^2 + dy^2)
scale = 1.0003

확장 기능

R2013a에 개발됨