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

imtransform

영상에 2차원 공간 변환 적용

imtransform은 권장되지 않습니다. imwarp를 대신 사용하십시오.

설명

예제

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

A가 컬러 영상이면 imtransform은 각 색 채널에 동일한 2차원 변환을 적용합니다. 마찬가지로, A가 볼륨 영상이거나 3차원 이상의 영상 시퀀스이면 imtransform은 동일한 2차원 변환을 더 높은 차원에서 모든 2차원 평면에 적용합니다. 임의 차원의 배열 변환의 경우 tformarray를 사용하십시오.

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)

사영 변환

사영 변환을 사용하여 정사각형을 사변형에 매핑합니다. 입력 영상이 꼭짓점이 (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)

영상 정합

항공 사진을 MATLAB® 작업 공간으로 읽어 들인 후 이를 표시합니다.

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

정사 사진을 MATLAB 작업 공간으로 읽어 들인 후 이를 표시합니다.

figure
imshow('westconcordorthophoto.png')

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

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)

입력 인수

모두 축소

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

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

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

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

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

데이터형: char

이름-값 쌍의 인수

선택적으로 Name,Value 인수가 쉼표로 구분되어 지정됩니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. Name은 따옴표 안에 표시해야 합니다. Name1,Value1,...,NameN,ValueN과 같이 여러 개의 이름-값 쌍의 인수를 어떤 순서로든 지정할 수 있습니다.

예: B = imtransform(A,T,'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에서 도출합니다.

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

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

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

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

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

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

출력 인수

모두 축소

변환된 영상으로, 입력 영상 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를 사용할 수 있습니다. fitgeotrans에 의해 계산되는 다항식 변환과 같이 순방향 매핑이 없는 변환의 경우, findbounds가 실행되는 시간이 훨씬 더 오래 걸릴 수 있습니다. 이러한 변환에 대해 XDataYData를 직접 지정하면 imtransform을 실행하는 시간이 눈에 띄게 줄어들 수 있습니다.

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

  • 임의 차원의 변환. imtransform을 사용할 때는 tform에 대해 2차원 변환을 사용하십시오. 임의 차원의 배열 변환의 경우 tformarray를 참조하십시오.

R2006a 이전에 개발됨