Main Content

2차원과 3차원 기하 변환 과정 개요

2차원 또는 3차원 기하 변환을 수행하려면 먼저 변환에 대한 정보를 저장하는 기하 변환 객체를 만드십시오. 그런 다음, 변환할 영상과 기하 변환 객체를 imwarp 함수에 전달합니다. 선택적으로, 입력 영상에 대한 공간 참조 정보를 imwarp에 전달할 수도 있습니다.

기하 변환 객체 만들기

기하 변환 객체의 유형마다 변환에 대한 각기 다른 정보를 저장합니다.

기하 변환 객체를 만드는 방법에는 여러 가지가 있습니다.

변환 객체 생성 방식affine2daffine3d

rigid2d

rigid3d

projective2d

geometricTransform2d

geometricTransform3d

기타 변환 객체
변환 행렬 정의하기XXXX  
사용자 지정 점별 매핑 함수 정의하기    X 
제어점 쌍으로부터 변환 추정하기X  X X
유사도 최적화를 사용하여 변환 추정하기XX    
위상 상관을 사용하여 변환 추정하기X     

변환 행렬 정의하기

수행할 기하 변환에 대한 변환 행렬을 알고 있다면 rigid2d, affine2d, projective2d, rigid3d 또는 affine3d 기하 변환 객체를 직접 만들 수 있습니다. 변환 행렬 만들기에 대한 자세한 내용은 기하 변환의 행렬 표현 항목을 참조하십시오.

다음 예제에서는 2차원 평행 이동에 대한 변환 행렬을 정의하고 affine2d 기하 변환 객체를 만듭니다.

xform = [ 1 0 0
          0 1 0
         40 40 1 ];

tform_translate = affine2d(xform)
tform_translate = 

  affine2d with properties:

                 T: [3x3 double]
    Dimensionality: 2

사용자 지정 점별 매핑 함수 정의하기

역방향 점별 매핑 함수가 있는 경우 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

제어점 쌍으로부터 변환 추정하기

2개의 제어점 쌍 집합을 fitgeotrans 함수에 전달하여 기하 변환 객체를 만들 수 있습니다. fitgeotrans 함수는 이러한 점으로부터 변환을 자동으로 추정한 다음 기하 변환 객체 중 하나를 반환합니다.

변환에 따라 필요한 점 개수가 다릅니다. 예를 들어 아핀 변환에는 각 영상에 동일직선상에 있지 않은 3개의 점(삼각형)이 필요하고, 사영 변환에는 4개의 점(사변형)이 필요합니다.

이 예제에서는 2개의 제어점 집합을 affine2d 기하 변환 객체를 반환하는 fitgeotrans에 전달합니다.

movingPoints = [11 11;21 11; 21 21];
fixedPoints = [51 51;61 51;61 61];

tform_cpp = fitgeotrans(movingPoints,fixedPoints,'affine')
tform_cpp = 

  affine2d with properties:

                 T: [3x3 double]
    Dimensionality: 2

유사도 최적화를 사용하여 변환 추정하기

고정 영상과 이동 영상에서 정렬이 약간 맞지 않은 경우 imregtform 함수를 사용하여, 영상을 정렬하는 아핀 기하 변환을 추정할 수 있습니다. imregtform은 규칙적 스텝 경사하강법 또는 원 플러스 원(one-plus-one) 진화 최적화 방식을 사용하여 두 영상의 평균 제곱 또는 Mattes 상호 정보량 유사도 메트릭을 최적화합니다. 자세한 내용은 Create an Optimizer and Metric for Intensity-Based Image Registration 항목을 참조하십시오.

위상 상관을 사용하여 변환 추정하기

고정 영상과 이동 영상에서 정렬이 심하게 맞지 않은 경우 imregcorr 함수를 사용하여, 영상 정렬을 개선하는 아핀 기하 변환을 추정할 수 있습니다. 유사도 최적화를 사용하여 결과 변환을 미세 조정할 수 있습니다.

기하 변환 수행하기

기하 변환 객체에서 변환을 정의했으면 imwarp 함수를 사용하여 변환을 수행합니다. 이 함수를 호출할 때는 변환할 영상과 기하 변환 객체를 지정합니다.

imwarp는 기하 변환을 사용해 출력 영상의 좌표를 입력 영상의 대응하는 좌표에 매핑합니다(역방향 매핑). 그런 다음 imwarp는 좌표 매핑을 사용하여 입력 영상 내에 있는 픽셀 값을 보간하고 출력 픽셀 값을 계산합니다.

참고 항목

| | | | | | | |

관련 예제

세부 정보