Main Content

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

fitgeotrans

제어점 쌍에 기하 변환 피팅

설명

예제

tform = fitgeotrans(movingPoints,fixedPoints,transformationType)은 제어점 쌍 movingPointsfixedPoints를 받아서 이들 점을 사용하여 transformationType으로 지정된 기하 변환을 추정합니다.

tform = fitgeotrans(movingPoints,fixedPoints,'polynomial',degree)PolynomialTransformation2D 객체를 제어점 쌍 movingPointsfixedPoints에 피팅합니다. 다항식 변환 degree의 차수를 2, 3 또는 4로 지정합니다.

tform = fitgeotrans(movingPoints,fixedPoints,'pwl')PiecewiseLinearTransformation2D 객체를 제어점 쌍 movingPointsfixedPoints에 피팅합니다. 이 변환은 평면을 국소 조각별 선형 영역으로 나누는 방법으로 제어점을 매핑합니다. 다른 아핀 변환이 각 국소 영역의 제어점을 매핑합니다.

tform = fitgeotrans(movingPoints,fixedPoints,'lwm',n)LocalWeightedMeanTransformation2D 객체를 제어점 쌍 movingPointsfixedPoints에 피팅합니다. 국소 가중 평균 변환은 각 제어점에서 인접 제어점을 사용하여 다항식을 추론하는 방법으로 매핑을 생성합니다. 어느 임의 위치에서의 매핑은 이 다항식의 가중 평균에 따라 달라집니다. n개의 최근접 점을 사용하여 각 제어점 쌍에 대한 2차 다항식 변환을 추론합니다.

예제

모두 축소

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

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

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

입력 인수

모두 축소

변환할 영상에 있는 제어점의 x 및 y 좌표로, mx2 double형 행렬로 지정됩니다.

예: movingPoints = [11 11; 41 71];

데이터형: double | single

고정 영상에 있는 제어점의 x 및 y 좌표로, mx2 double형 행렬로 지정됩니다.

예: fixedPoints = [14 44; 70 81];

데이터형: double | single

변환의 유형으로, 'nonreflectivesimilarity', 'similarity', 'affine', 'projective' 중 하나로 지정됩니다. 자세한 내용은 변환 유형 항목을 참조하십시오.

데이터형: char | string

다항식 차수로, 정수 2, 3 또는 4로 지정됩니다.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

국소 가중 평균 계산에 쓰일 점의 개수로, 숫자형 값으로 지정됩니다. n의 최솟값은 6이지만, n의 값이 작으면 나쁜 조건의 다항식이 생성될 위험이 있습니다.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

출력 인수

모두 축소

변환으로, 변환 객체로 반환됩니다. 객체 유형은 변환 유형에 따라 달라집니다. 예를 들어, 변환 유형 'affine'을 지정할 경우 tformaffine2d 객체입니다. 'pwl'을 지정할 경우 tformimage.geotrans.PiecewiseLinearTransformation2d 객체입니다.

세부 정보

모두 축소

변환 유형

다음 표에는 fitgeotrans가 지원하는 모든 변환 유형이 복잡도 순으로 나열되어 있습니다.

변환 유형

설명제어점 쌍의 최소 개수예제
'nonreflective similarity'이동 영상의 형태는 그대로 유지하지만 평행 이동, 회전, 스케일링을 조합하여 영상을 왜곡할 때 이 변환을 사용합니다. 직선은 직선 상태를, 평행선은 평행선 상태를 유지합니다. 2

'similarity'선택적으로 반사를 추가하는 것만 제외하고 'nonreflective similarity'와 동일합니다.3

'affine'이동 영상의 형태를 전단할 때 이 변환을 사용합니다. 직선은 직선 상태를, 평행선은 평행선 상태를 유지하지만 사각형은 평행사변형이 됩니다.3

'projective'기울어진 장면을 나타낼 때 이 변환을 사용합니다. 직선은 직선 상태를 유지하지만 평행선은 소실점을 향해 수렴합니다.4

'polynomial'영상 속 객체가 곡선 모양으로 휘어질 때 이 변환을 사용합니다. 다항식 차수가 높을수록 피팅이 좋지만, 그 결과물에 포함된 곡선이 고정 영상보다 많아질 수 있습니다.

6(차수 2)

10(차수 3)

15(차수 4)

'pwl'영상의 일부분을 다르게 왜곡할 때 이 변환(조각별 선형)을 사용합니다.4

'lwm'왜곡을 국소적으로 다르게 적용하고 조각별 선형이 충분하지 않을 때 이 변환(국소 가중 평균)을 사용합니다. 6(12 권장됨)

참고 문헌

[1] Goshtasby, Ardeshir, "Piecewise linear mapping functions for image registration," Pattern Recognition, Vol. 19, 1986, pp. 459-466.

[2] Goshtasby, Ardeshir, "Image registration by local approximation methods," Image and Vision Computing, Vol. 6, 1988, pp. 255-261.

확장 기능

R2013b에 개발됨