Main Content

imtransform

(권장되지 않음) 영상에 2차원 공간 변환 적용

imtransform은 권장되지 않습니다. 2차원 및 3차원 변환 대신 imwarp를 사용하십시오. 더 높은 차원을 변환하는 경우 tformarray 함수를 사용하십시오.

설명

예제

B = imtransform(A,tform)tform으로 정의된 2차원 변환에 따라 영상 A를 변환하고 변환된 영상 B를 반환합니다.

A가 컬러 영상이면 imtransform은 각 색 채널에 동일한 2차원 변환을 적용합니다. 마찬가지로, A가 볼륨 영상이거나 3차원 이상의 영상 시퀀스이면 imtransform은 동일한 2차원 변환을 더 높은 차원을 따라 모든 2차원 평면에 적용합니다.

B = imtransform(A,tform,interp)는 사용할 보간 형식을 지정합니다.

B = imtransform(___,Name,Value)는 이름-값 인수를 사용하여 공간 변환의 다양한 특성을 제어합니다.

예제

[B,xdata,ydata] = imtransform(___)은 출력 영상 B의 범위도 출력 X-Y 공간에 반환합니다. 기본적으로, imtransformB가 변환된 영상 A 전체를 포함하도록 자동으로 xdataydata를 계산합니다. 그러나 사용자는 XDataYData 이름-값 쌍의 입력 인수에 대해 값을 지정하여 이 자동 계산을 재정의할 수 있습니다.

예제

모두 축소

회색조 영상에 가로 전단을 적용합니다.

I = imread("cameraman.tif");
tform = maketform("affine",[1 0 0; .5 1 0; 0 0 1]);
J = imtransform(I,tform);
imshow(J)

Grayscale image with horizontal shear.

사영 변환을 사용하여 정사각형을 사변형에 매핑합니다.

영상을 읽어 들입니다. 입력 영상이 꼭짓점이 (0, 0), (1, 0), (1, 1), (0, 1)인 단위 정사각형을 채우도록 입력 좌표계를 설정합니다.

I = imread("cameraman.tif");
udata = [0 1];  
vdata = [0 1];

꼭짓점이 (-4, 2), (-8, 3), (-3, -5), (6, 3)인 사변형으로 변환합니다.

tform = maketform("projective",[ 0 0;  1  0;  1  1; 0 1],...
                               [-4 2; -8 -3; -3 -5; 6 3]);

회색으로 채우고 쌍삼차 보간을 사용합니다. 출력 크기를 입력 크기와 같게 만듭니다.

[B,xdata,ydata] = imtransform(I,tform,"bicubic", ...
                              "udata",udata,...
                              "vdata",vdata,...
                              "size",size(I),...
                              "fill",128);
subplot(1,2,1); imshow(I,"XData",udata,"YData",vdata)
subplot(1,2,2); imshow(B,"XData",xdata,"YData",ydata)

Original square image on the left, and transformed image on the right. The transformed image is rotated and appears to tilt out of the plane, and background pixels are gray.

항공 사진을 읽어 들여 표시합니다.

unregistered = imread("westconcordaerial.png");
figure
imshow(unregistered)

Color photo of some roads and buildings as seen from the sky.

정사 사진을 읽어 들여 표시합니다.

figure
imshow("westconcordorthophoto.png")

Grayscale photo of the same roads and buildings as seen from a different point in the sky. The scene is rotated, translated, and tilted with respect to the aerial photo.

미리 선택해 둔 제어점을 불러옵니다.

load westconcordpoints

점을 사용하여 사영 변환을 위한 변환 구조체를 만듭니다.

t_concord = cp2tform(movingPoints,fixedPoints,"projective");

정사 사진의 너비와 높이를 가져오고, 변환을 수행한 다음, 결과를 확인합니다.

info = imfinfo("westconcordorthophoto.png");

registered = imtransform(unregistered,t_concord,...
    "XData",[1 info.Width],"YData",[1 info.Height]);
figure
imshow(registered)

The transformed color photo appears to be captured from the same point in the sky as the grayscale orthophoto.

입력 인수

모두 축소

변환할 영상으로, 임의 차원의 숫자형 배열 또는 논리형 배열로 지정됩니다.

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

변환 구조체로, maketform이 반환하는 것과 같은 TFORM 구조체로 지정됩니다. 변환의 첫 번째 차원은 가로(x) 좌표이고, 두 번째 차원은 세로(y) 좌표입니다. 이 규칙은 MATLAB®의 배열 첨자 규칙과는 반대입니다.

보간 방법으로, 다음 값 중 하나로 지정됩니다.

보간 방법설명
"bilinear"선형 보간
"nearest"최근접이웃 보간 — 해당 점이 속한 픽셀 값이 출력 픽셀에 할당됩니다. 다른 픽셀은 고려되지 않습니다.
"bicubic"3차 보간
resampler 구조체makeresampler에서 반환되는 resampler 구조체. 이 옵션을 사용하면 imtransform이 리샘플링을 수행하는 방식을 더 세부적으로 제어할 수 있습니다.

데이터형: char

이름-값 인수

선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN으로 지정합니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.

R2021a 이전 릴리스에서는 쉼표를 사용하여 각 이름과 값을 구분하고 Name을 따옴표로 묶으십시오.

예: "FillValues",128

U-V 입력 공간상의 입력 영상 A의 공간 범위로, 요소를 2개 가진 숫자형 벡터로 지정됩니다. UDataVData의 값은 세계 좌표계상의 좌표를 나타냅니다. UData의 두 요소는 각각 A의 첫 번째 열과 마지막 열의 u 좌표(가로)입니다. VData의 두 요소는 A의 첫 번째 행과 마지막 행의 v 좌표(세로)입니다.

기본적으로, U-V 공간상의 A의 공간 범위는 내재적 좌표상의 영상 범위와 동일합니다. 즉, UData의 디폴트 값은 [1 size(A,2)]이고 VData의 디폴트 값은 [1 size(A,1)]입니다.

X-Y 입력 공간상의 변환된 영상 B의 공간 범위로, 요소를 2개 가진 숫자형 벡터로 지정됩니다. XDataYData의 값은 세계 좌표계상의 좌표를 나타냅니다. XData의 두 요소는 각각 B의 첫 번째 열과 마지막 열의 x 좌표(가로)입니다. YData의 두 요소는 B의 첫 번째 행과 마지막 행의 y 좌표(세로)입니다.

XDataYData를 지정하지 않으면 imtransform은 변환된 출력 영상 전체를 포함하는 값을 추정합니다. imtransformfindbounds 함수를 사용하여 이 값을 결정합니다.

X-Y 출력 공간상의 픽셀 크기로, 숫자형 스칼라 또는 요소를 2개 가진 숫자형 벡터로 지정됩니다. XYScale이 스칼라이면 출력 픽셀은 정사각형이고 XYScale은 변의 길이를 지정합니다. 그렇지 않을 경우 XYScale의 두 요소는 각각 X-Y 공간의 각 출력 픽셀의 너비와 높이를 지정합니다.

XYScale의 디폴트 값은 Size가 지정되었는지 여부에 따라 달라집니다.

  • Size를 지정할 경우 imtransformSize, XData, YData에서 XYScale을 계산합니다.

  • Size를 지정하지 않을 경우 imtransform은 지나치게 큰 출력 영상이 결과로 생성될 경우를 제외하고 XYScale에 대한 입력 픽셀의 크기를 사용합니다.

참고

입력 영상의 크기를 그대로 유지하면 지나치게 큰 출력 영상이 결과로 생성될 경우, imtransform 함수는 자동으로 XYScale의 값을 늘립니다. 출력 픽셀의 크기가 입력 픽셀의 크기와 일치하도록 하려면 XYScale 파라미터를 지정하십시오. 예를 들어, 다음 구문과 같이 imtransform을 호출하십시오.

B = imtransform(A,T,"XYScale",1)

변환된 영상 B의 크기로, 양의 정수로 구성된 요소를 2개 가진 벡터로 지정됩니다. Size의 두 요소는 각각 출력 영상 B의 행 개수와 열 개수를 지정합니다. 더 높은 차원의 경우, imtransform은 입력 영상 A의 크기에서 직접 B의 크기를 취합니다. 따라서, k > 2인 경우 size(B,k)size(A,k)가 됩니다.

Size를 지정하지 않을 경우 imtransform은 이 값을 XData, YData, XYScale에서 도출합니다.

입력 영상 경계선 바깥에 있는 출력 픽셀에 사용되는 채우기 값으로, 숫자형 스칼라 또는 숫자형 배열로 지정됩니다. 입력 영상의 역변환된 해당 위치가 완전히 입력 영상 경계선 바깥쪽에 있는 경우 출력 픽셀에 채우기 값이 사용됩니다.

  • 입력 영상 A가 2차원인 경우 FillValues는 스칼라여야 합니다.

  • A가 3차원이거나 N차원인 경우 FillValues는 크기가 다음 제약 조건, 즉 size(FillValues,k)size(A,k+2) 또는 1과 같아야 한다는 제약 조건을 충족하는 배열일 수 있습니다.

    예를 들어, A가 200×200×3 uint8형 RGB 영상이면 FillValues는 다음과 같은 값을 가질 수 있습니다.

    채우기
    0검은색으로 채우기
    [0;0;0]검은색으로 채우기
    255흰색으로 채우기
    [255;255;255]흰색으로 채우기
    [0;0;255]파란색으로 채우기
    [255;255;0]노란색으로 채우기

    두 번째 예로, A가 200×200×3×10 크기의 4차원 영상인 경우 FillValues를 스칼라, 1×10 벡터, 3×1 벡터 또는 3×10 행렬로 지정할 수 있습니다.

출력 인수

모두 축소

변환된 영상으로, 입력 영상 A와 차원이 같은 숫자형 배열 또는 논리형 배열로 반환됩니다.

X-Y 출력 공간상의 변환된 영상 B의 가로 범위로, 요소를 2개 가진 숫자형 벡터로 반환됩니다. xdata의 두 요소는 각각 B의 첫 번째 열과 마지막 열의 세계 좌표계상의 x 좌표(가로)입니다.

참고

xdata의 첫 번째 요소는 XData 인수가 지정된 경우 항상 이 인수의 첫 번째 요소와 동일합니다. 그러나 xdata의 두 번째 요소가 XData의 두 번째 요소와 정확하게 일치하지 않는 경우가 있습니다. 두 값이 다른 이유는 행 개수와 열 개수가 정수가 되어야 하기 때문이거나 XData, YData, XYScaleSize에 일관되지 않은 값을 지정했기 때문입니다.

X-Y 출력 공간상의 변환된 영상 B의 세로 범위로, 요소를 2개 가진 숫자형 벡터로 반환됩니다. ydata의 두 요소는 각각 B의 첫 번째 행과 마지막 행의 세계 좌표계상의 y 좌표(세로)입니다.

참고

ydata의 첫 번째 요소는 YData 인수가 지정된 경우 항상 이 인수의 첫 번째 요소와 동일합니다. 그러나 ydata의 두 번째 요소가 YData의 두 번째 요소와 정확하게 일치하지 않는 경우가 있습니다. 두 값이 다른 이유는 행 개수와 열 개수가 정수가 되어야 하기 때문이거나 XData, YData, XYScaleSize에 일관되지 않은 값을 지정했기 때문입니다.

  • 영상 정합 imtransform 함수는 변환된 영상이 가능한 한 많이 보일 수 있도록 출력 영상의 원점을 자동으로 이동합니다. imtransform을 사용하여 영상 정합을 수행할 경우 구문 B = imtransform(A,tform)이 예기치 않은 결과를 낳을 수 있습니다. 출력 영상의 공간 위치를 제어하려면 XDataYData를 명시적으로 설정하십시오.

  • 순수 평행 이동. imtransform 호출에서 XDataYData를 지정하지 않은 경우, 순수 평행 이동 변환을 사용하여 imtransform 함수를 호출하면 입력 영상과 완전히 동일한 출력 영상이 생성됩니다. 예를 들어, 출력 크기를 입력 크기와 같게 하여 입력 영상을 기준으로 한 평행 이동을 나타내려면 다음 구문과 같이 imtransform을 호출하십시오.

    B = imtransform(A,T,"XData",[1 size(A,2)],...
       "YData",[1 size(A,1)])

    이 항목에 대한 자세한 내용은 Perform Simple 2-D Translation Transformation 항목을 참조하십시오.

  • 변환 속도. XDataYData를 사용하여 B에 대한 출력 공간 위치를 지정하지 않을 경우 imtransform은 함수 findbounds를 사용하여 해당 위치를 자동으로 추정합니다. 아핀 변환, 사영 변환과 같이 일반적으로 사용되는 일부 변환에 대해, 빠른 순방향 매핑 옵션으로 findbounds를 사용할 수 있습니다. fitgeotform2d에 의해 계산되는 다항식 변환과 같이 순방향 매핑이 없는 변환의 경우, findbounds가 실행되는 시간이 훨씬 더 오래 걸릴 수 있습니다. 이러한 변환에 대해 XDataYData를 직접 지정할 수 있으면 imtransform의 실행 속도를 상당히 높일 수 있습니다.

  • 자르기. findbounds를 사용한 XDataYData의 자동 추정에서 출력 영상이 잘리는 경우가 있습니다. 잘림을 방지하려면 XDataYData를 직접 설정하십시오.

버전 내역

R2006a 이전에 개발됨