Main Content

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

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

Pass an input image and a geometric transformation object to imwarp, which returns a transformed image.

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

기하 변환 객체 만들기

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

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

기하 변환을 만드는 방법

transltform2d

transltform3d

rigidtform2d

rigidtform3d

simtform2d

simtform3d

affinetform2d

affinetform3d

projective2d

geometricTransform2d

geometricTransform3d

기타 기하 변환
평행 이동, 회전 또는 스케일 파라미터 지정하기XX    
변환 행렬 지정하기XXXX  
사용자 지정 점별 매핑 함수 지정하기    X 
제어점 쌍으로부터 변환 추정하기 X(2차원)X(2차원)X(2차원) X
유사도 최적화를 사용하여 변환 추정하기X(2차원)X(2차원)X(2차원)   
위상 상관을 사용하여 변환 추정하기X(2차원)X(2차원)    
무작위 아핀 변환 생성하기  X   

평행 이동, 회전 또는 스케일 파라미터 지정하기

평행 이동의 양, 회전 각도, 스케일링 인자를 알고 있는 경우 이러한 파라미터를 지정하여 변환을 만들 수 있습니다.

  • 평행 이동 변환을 나타내는 transltform2dtransltform3d 객체를 만들려면 평행 이동을 지정합니다.

  • 강체 변환을 나타내는 rigidtform2drigidtform3d 객체를 만들려면 평행 이동, 회전 각도 또는 둘 모두를 지정합니다.

  • 비반사적 유사 변환을 나타내는 simtform2dsimtform3d 객체를 만들려면 평행 이동, 회전 및 등방성 스케일링 인자의 조합을 지정합니다.

다음 예제에서는 평행 이동과 회전 각도를 정의한 다음 지정된 파라미터에서 rigidtform2d 기하 변환 객체를 만듭니다.

theta = 30;
translation = [10 20.5];
tform = rigidtform2d(theta,translation)
tform = 

  rigidtform2d with properties:

    Dimensionality: 2
     RotationAngle: 30
       Translation: [10 20.5000]
                 R: [2×2 double]

                 A: [0.8660   -0.5000   10.0000
                     0.5000    0.8660   20.5000
                          0         0    1.0000]

변환 행렬 지정하기

더 복잡한 선형 기하 변환의 경우 변환을 행렬로 나타낼 수 있습니다. 예를 들어, 사영 변환이나, 반사, 비등방성 스케일링, 전단 또는 선형 변환의 구성과 관련된 아핀 변환에 행렬 표현을 사용하십시오. 변환 행렬을 사용하여 affinetform2d, affinetform3d 또는 projtform2d 객체를 만듭니다. 변환 행렬 만들기에 대한 자세한 내용은 기하 변환의 행렬 표현 항목을 참조하십시오.

다음 예제에서는 비등방성 스케일링과 y축을 기준으로 한 반사에 대한 변환 행렬을 정의한 다음, 변환 행렬에서 affinetform2d 기하 변환 객체를 만듭니다.

scaleX = 0.8;
scaleY = 1.5;
A = [scaleX 0 0; 0 -scaleY 0; 0 0 1];
tform = affinetform2d(A)
tform = 

  affinetform2d with properties:

    Dimensionality: 2

                 A: [0.8000         0         0
                          0   -1.5000         0
                          0         0    1.0000]

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

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

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

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

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

이 예제에서는 2개의 제어점 쌍을 정의한 다음 fitgeotform2d를 사용하여 affinetform2d 기하 변환 객체를 만듭니다.

movingPoints = [11 11;21 11; 21 21];
fixedPoints = [51 51;61 51;61 61];
tform = fitgeotform2d(movingPoints,fixedPoints,"affine")
tform = 

  affinetform2d with properties:

    Dimensionality: 2

                 A: [1.0000         0   40.0000
                          0    1.0000   40.0000
                          0         0    1.0000]

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

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

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

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

무작위 아핀 변환 생성하기

randomAffine2d 함수와 randomAffine3d 함수를 사용하여 무작위 변환 파라미터로 아핀 기하 변환을 만들 수 있습니다. 이러한 함수는 각 축을 기준으로 한 반사, 회전, 전단, 비등방성 스케일링 인자를 포함한 모든 아핀 파라미터를 지원합니다. 무작위 아핀 변환은 일반적으로 딥러닝을 위한 데이터 증강 기술로 사용됩니다.

참고 항목

관련 예제

세부 정보