Main Content

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

imwarp

영상에 기하 변환 적용

설명

예제

B = imwarp(A,tform)은 기하 변환 tform에 따라 숫자형, 논리형 또는 범주 영상 A를 변환합니다. 이 함수는 변환된 영상을 B에 반환합니다.

B = imwarp(A,D)는 변위 필드 D에 따라 영상 A를 변환합니다.

[B,RB] = imwarp(A,RA,tform)은 영상 데이터 A로 지정된 공간 참조 영상과 이 영상에 연결된 공간 참조 객체 RA를 변환합니다. 출력값은 영상 데이터 B로 지정된 공간 참조 영상과 이 영상에 연결된 공간 참조 객체 RB입니다.

[___] = imwarp(___,interp)는 사용할 보간의 유형을 지정합니다.

예제

[___] = imwarp(___,Name,Value)는 이름-값 쌍 인수를 지정하여 기하 변환의 다양한 특성을 제어합니다.

입력 변환 tform이 순방향 변환을 정의하지 않을 경우 OutputView 이름-값 쌍 인수를 사용하여 변환을 가속화하십시오.

예제

모두 축소

회색조 영상을 작업 공간으로 읽어 들인 후 이를 표시합니다.

I = imread('cameraman.tif');
imshow(I)

2차원 기하 변환 객체를 만듭니다.

tform = affine2d([1 0 0; .5 1 0; 0 0 1])
tform = 
  affine2d with properties:

    Dimensionality: 2
                 T: [3x3 double]

변환을 영상에 적용합니다.

J = imwarp(I,tform);
figure
imshow(J)

3차원 MRI 데이터를 작업 공간으로 읽어 들인 후 시각화합니다.

s = load('mri');
mriVolume = squeeze(s.D);
sizeIn = size(mriVolume);
hFigOriginal = figure;
hAxOriginal  = axes;
slice(double(mriVolume),sizeIn(2)/2,sizeIn(1)/2,sizeIn(3)/2);
grid on, shading interp, colormap gray

3차원 기하 변환 객체를 만듭니다. 먼저, y축을 중심으로 영상을 회전시키는 변환 행렬을 만듭니다. 그런 다음 변환 행렬로부터 affine3d 객체를 만듭니다.

theta = pi/8;
t = [cos(theta)  0      -sin(theta)   0
     0             1              0     0
     sin(theta)    0       cos(theta)   0
     0             0              0     1];
tform = affine3d(t)
tform = 
  affine3d with properties:

    Dimensionality: 3
                 T: [4x4 double]

변환을 영상에 적용합니다.

mriVolumeRotated = imwarp(mriVolume,tform);

변환된 볼륨의 가운데를 자르는 세 개의 단층 평면을 시각화합니다.

sizeOut = size(mriVolumeRotated);
hFigRotated = figure;
hAxRotated  = axes;
slice(double(mriVolumeRotated),sizeOut(2)/2,sizeOut(1)/2,sizeOut(3)/2)
grid on, shading interp, colormap gray

두 좌표축의 뷰를 서로 연결합니다.

linkprop([hAxOriginal,hAxRotated],'View');

회전의 효과를 확인하도록 뷰를 설정합니다.

set(hAxRotated,'View',[-3.5 20.0])

영상을 읽어 들여 표시합니다. 영상의 공간 범위를 보려면 좌표축을 표시하십시오.

A = imread('kobi.png');
iptsetpref('ImshowAxesVisible','on')
imshow(A)

2차원 아핀 변환을 만듭니다. 이 예제에서는 범위 [1.2, 2.4] 내의 인자로 스케일링하고, 범위 [-45, 45]도 내의 각도로 회전하며, 범위 [100, 200]픽셀 내의 거리로 가로 평행 이동하는 무작위 변환을 만듭니다.

tform = randomAffine2d('Scale',[1.2,2.4],'XTranslation',[100 200],'Rotation',[-45,45]);

영상과 변환에 사용할 3가지 출력 보기를 만듭니다.

centerOutput = affineOutputView(size(A),tform,'BoundsStyle','CenterOutput');
followOutput = affineOutputView(size(A),tform,'BoundsStyle','FollowOutput');
sameAsInput = affineOutputView(size(A),tform,'BoundsStyle','SameAsInput');

각각의 서로 다른 출력 보기 스타일을 사용하여 입력 영상에 변환을 적용합니다.

BCenterOutput = imwarp(A,tform,'OutputView',centerOutput);
BFollowOutput = imwarp(A,tform,'OutputView',followOutput);
BSameAsInput = imwarp(A,tform,'OutputView',sameAsInput);

결과 영상을 표시합니다.

imshow(BCenterOutput)
title('CenterOutput Bounds Style');

imshow(BFollowOutput)
title('FollowOutput Bounds Style');

imshow(BSameAsInput)
title('SameAsInput Bounds Style');

iptsetpref('ImshowAxesVisible','off')

입력 인수

모두 축소

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

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

적용할 기하 변환으로, affine2d, projective2d 또는 affine3d 객체로 지정됩니다.

  • tform이 2차원이고 A이 3차원 이상이면(예: RGB 영상) imwarp는 동일한 2차원 변환을 더 높은 차원을 따라 모든 2차원 평면에 적용합니다.

  • tform이 3차원이면 A는 3차원 영상 볼륨이어야 합니다.

변위 필드로, 숫자형 배열로 지정됩니다. 변위 필드는 출력 영상의 그리드 크기와 위치를 정의합니다. 변위 값은 픽셀 단위입니다. imwarpD가 디폴트 기본 좌표 시스템에서 참조되는 것으로 가정합니다. 변위 필드를 추정하려면 imregdemons를 사용하십시오.

  • A가 2차원 영상이면 D는 mxnx2 배열입니다. 변위 필드의 첫 번째 평면 D(:,:,1)은 가산 변위 값의 x 성분을 지정합니다. imwarp는 이 가산 변위 값을 D의 열 및 행 위치에 더하여 A의 다시 매핑된 위치를 생성합니다. 변위 필드의 두 번째 평면 D(:,:,2)는 가산 변위 값의 y 성분을 지정합니다. 여러 개의 색 채널을 갖는 2차원 컬러 영상 또는 다중분광 영상의 경우, imwarp는 각 채널에 동일한 mxnx2 변위 필드를 적용합니다.

  • A가 3차원 영상이면 D는 mxnxpx3 배열입니다. 변위 필드의 첫 번째 평면 D(:,:,1)은 가산 변위 값의 x 성분을 지정합니다. imwarp는 이 가산 변위 값을 D의 열 및 행 위치에 더하여 A의 다시 매핑된 위치를 생성합니다. 마찬가지로, 변위 필드의 두 번째 평면과 세 번째 평면은 각각 가산 변위 값의 y 성분과 z 성분을 지정합니다.

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

변환할 영상의 공간 참조 정보로, 2차원 변환에 대해서는 imref2d 객체로 지정되고 3차원 변환에 대해서는 imref3d 객체로 지정됩니다.

사용된 보간 유형으로, 다음 값 중 하나로 지정됩니다.

보간 방법설명
'nearest'

최근접이웃 보간입니다. 해당 점이 속한 픽셀 값이 출력 픽셀에 할당됩니다. 다른 픽셀은 고려되지 않습니다.

최근접이웃 보간은 범주 영상에서 유일하게 지원되는 방법이며, 이 영상 유형의 디폴트 방법입니다.

'linear'선형 보간입니다. 이는 숫자형 및 논리형 영상의 디폴트 보간 방법입니다.
'cubic'3차 보간

데이터형: char | string

이름-값 쌍의 인수

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

예: J = imwarp(I,tform,'FillValues',255)는 흰색 픽셀을 채우기 값(Fill Value)으로 사용합니다.

출력 영상의 크기와 세계 좌표 시스템상에서의 위치로, 'OutputView'와 함께 imref2d 또는imref3d 공간 참조 객체가 쉼표로 구분되어 지정됩니다. 객체는 출력 영상의 크기와 세계 좌표 시스템상에서의 출력 영상의 위치를 정의하는 속성을 갖습니다.

affineOutputView 함수를 사용하여 출력 보기를 만들 수 있습니다. imwarp에 의해 계산되는 디폴트 출력 보기를 재현하려면 affineOutputView의 디폴트 범위 스타일('CenterOutput')을 사용하십시오.

입력 변위 필드 D를 지정한 경우 OutputView를 지정할 수 없습니다.

입력 영상의 바깥쪽에 있는 출력 픽셀에 사용되는 채우기 값으로, 'FillValues'와 함께 다음 값 중 하나가 쉼표로 구분되어 지정됩니다. imwarp는 입력 영상의 역변환된 해당 위치가 완전히 입력 영상 경계선 바깥쪽에 있는 경우 출력 픽셀에 채우기 값을 사용합니다.

숫자형 및 논리형 영상의 디폴트 채우기 값은 0입니다. 범주 영상의 디폴트 채우기 값은 missing으로, 이는 <undefined> 범주에 해당합니다.

영상 유형

변환 차원

채우기 값의 형식

2차원 회색조 또는 논리형 영상2차원
  • 숫자형 스칼라

2차원 컬러 영상 또는 2차원 다중분광 영상2차원
  • 숫자형 스칼라

  • c개 채널 각각에 대해 채우기 값을 지정하는, 요소를 c개 가진 숫자형 벡터. 채널 개수 c는 컬러 영상의 경우 3입니다.

p개의 2차원 영상 시리즈2차원

  • 숫자형 스칼라

  • cxp 숫자형 행렬. 채널 개수 c는 회색조 영상의 경우 1이고 컬러 영상의 경우 3입니다.

N차원 영상2차원
  • 숫자형 스칼라

  • 크기가 입력 영상 A의 3~N 차원과 일치하는 숫자형 배열. 예를 들어, A가 200X200X10X3이면 FillValues는 10X3 배열일 수 있습니다.

3차원 회색조 또는 논리형 영상3차원
  • 숫자형 스칼라

범주 영상2차원 또는 3차원
  • 영상의 유효한 범주로, string형 스칼라 또는 문자형 벡터로 지정됩니다.

  • missing으로, <undefined> 범주에 해당합니다. 자세한 내용은 missing을 참조하십시오.

예: 255uint8형 영상을 흰색 픽셀로 채웁니다.

예: 1double형 영상을 흰색 픽셀로 채웁니다.

예: [0 1 0]double형 컬러 영상을 녹색 픽셀로 채웁니다.

예: 두 개의 double형 컬러 영상 시리즈에 대해 [0 1 0; 0 1 1]'은 첫 번째 영상을 녹색 픽셀로 채우고 두 번째 영상을 녹청색 픽셀로 채웁니다.

예: "vehicle"은 범주 영상을 "vehicle" 범주로 채웁니다.

부드러운 경계를 만들기 위한 영상 채우기로, true 또는 false로 지정됩니다. true로 설정된 경우, imwarpFillValues로 지정된 값으로 입력 영상을 채워 출력 영상에서 경계를 더 부드럽게 만듭니다. false로 설정된 경우, imwarp는 영상을 채우지 않습니다. false를 선택하면(채우기 없음) 입력 영상의 경계가 출력 영상에서 더 예리하게 표시될 수 있습니다. 경계가 더 예리해지면 두 영상을 나란히 정합할 때 경계선 왜곡을 최소화하는 데 도움이 됩니다.

출력 인수

모두 축소

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

변환된 영상의 공간 참조 정보로, imref2d 또는 imref3d 공간 참조 객체로 반환됩니다.

알고리즘

imwarp는 출력 영상의 위치를 입력 영상의 대응하는 위치로 매핑(역방향 사상)하여 픽셀 값을 구합니다. imwarp는 입력 영상 내에서 보간하여 출력 픽셀 값을 계산합니다.

다음 그림은 평행 이동 변환을 보여줍니다. 일반적으로 입력 공간의 좌표축에는 레이블 uv가 지정되고, 출력 공간의 좌표축에는 레이블 xy가 지정됩니다. 이 그림에서. imwarp가 입력 영상에서 픽셀의 위치를 정의하는 공간 좌표를 어떻게 수정하는지 알 수 있습니다. (1,1) 위치에 있는 픽셀은 이제 (41,41)에 위치합니다. 체커보드 영상에서 검은색 정사각형, 흰색 정사각형, 회색 정사각형은 각각 높이가 10픽셀이고, 너비가 10픽셀입니다. 공간 좌표와 픽셀 좌표 간 차이점에 대한 자세한 내용은 영상 좌표 시스템 항목을 참조하십시오.

평행 이동한 입력 영상

확장 기능

R2013a에 개발됨