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)

Figure contains an axes object. The axes object contains an object of type image.

2차원 아핀 변환을 만듭니다.

A = [1 0.5 0; 0 1 0; 0 0 1];
tform = affinetform2d(A);

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

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

Figure contains an axes object. The axes object contains an object of type image.

3차원 MRI 볼륨 영상을 불러와서 표시합니다.

load("mri");
mriVolume = squeeze(D);
volshow(mriVolume);

y축을 중심으로 영상을 회전시키는 3차원 강체 변환 객체를 만듭니다.

theta = [0 22.5 0];
transl = [0 0 0];
tform = rigidtform3d(theta,transl);

변환을 영상에 적용하고 결과를 표시합니다.

mriVolumeRotated = imwarp(mriVolume,tform);
volshow(mriVolumeRotated);

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

A = imread("kobi.png");
A = imresize(A,0.25);
iptsetpref("ImshowAxesVisible","on")
imshow(A)

Figure contains an axes object. The axes object contains an object of type image.

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");

Figure contains an axes object. The axes object with title CenterOutput Bounds Style contains an object of type image.

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

Figure contains an axes object. The axes object with title FollowOutput Bounds Style contains an object of type image.

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

Figure contains an axes object. The axes object with title SameAsInput Bounds Style contains an object of type image.

iptsetpref("ImshowAxesVisible","off")

입력 인수

모두 축소

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

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

기하 변환으로, 표에 나열된 기하 변환 객체로 지정됩니다.

기하 변환 객체설명
2차원 선형 기하 변환
transltform2d평행 이동 변환
rigidtform2d강체 변환: 평행 이동 및 회전
simtform2d유사 변환: 평행 이동, 회전, 등방성 스케일링
affinetform2d아핀 변환: 평행 이동, 회전, 비등방성 스케일링, 반사, 전단
projtform2d사영 변환
3차원 선형 기하 변환
transltform3d평행 이동 변환
rigidtform3d강체 변환: 평행 이동 및 회전
simtform3d유사 변환: 평행 이동, 회전, 등방성 스케일링
affinetform3d아핀 변환: 평행 이동, 회전, 비등방성 스케일링, 반사, 전단
비선형 기하 변환
geometricTransform2d2차원 기하 변환
geometricTransform3d3차원 기하 변환
PolynomialTransformation2D다항식 변환
PiecewiseLinearTransformation2D조각별 선형 변환
LocalWeightedMeanTransformation2D국소 가중 평균 변환
  • tform이 2차원이고 A가 3차원 이상이면(예: RGB 영상) imwarp는 동일한 2차원 변환을 더 높은 차원을 따라 모든 2차원 평면에 적용합니다.

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

참고

tform을 유형 rigid2d, rigid3d, affine2d, affine3d 또는 projective2d의 객체로 지정할 수도 있습니다. 그러나 이러한 객체는 권장되지 않습니다. 자세한 내용은 호환성 관련 고려 사항 항목을 참조하십시오.

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

  • A가 m×n 크기의 2차원 회색조 영상인 경우, 변위 필드를 m×n×2 배열로 지정합니다. D(:,:,1)은 x축을 따라 변위를 포함합니다. imwarp는 이 값을 D의 열 및 행 위치에 더하여 A의 다시 매핑된 위치를 생성합니다. 이와 유사하게 D(:,:,2)는 y축을 따라 변위를 포함합니다.

  • A가 m×n×c 크기의 2차원 RGB 또는 다중분광 영상인 경우, D를 m×n×2 배열로 지정하면 imwarp는 각 2차원 색 채널에서 독립적으로 동작합니다. D(:,:,1)은 모든 색 채널의 x축을 따라 변위를 포함합니다. 이와 유사하게 D(:,:,2)는 y축을 따라 변위를 포함합니다.

  • A가 m×n×p 크기의 3차원 회색조 영상인 경우, 변위 필드 배열을 m×n×p×3 배열로 지정합니다. D(:,:,:,1)은 x축을 따라 변위를 포함합니다. imwarp는 이 값을 D의 열, 행 및 깊이 위치에 더하여 A의 다시 매핑된 위치를 생성합니다. 이와 유사하게 D(:,:,:,2)D(:,:,:,3)은 y축과 z축을 따라 변위를 포함합니다.

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

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

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

보간 방법설명
"nearest"

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

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

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

데이터형: char | string

이름-값 인수

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

예: B = imwarp(A,tform,FillValues=255)는 채우기 값 255를 사용합니다.

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

예: B = imwarp(A,tform,"FillValues",255)는 채우기 값 255를 사용합니다.

출력 영상의 크기와 세계 좌표계상에서의 위치로, imref2d 또는imref3d 공간 참조 객체로 지정됩니다. 객체는 출력 영상의 크기와 세계 좌표계상에서의 출력 영상의 위치를 정의하는 속성을 갖습니다.

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

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

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

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

영상 유형

변환 차원

채우기 값의 형식

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

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

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

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

  • 숫자형 스칼라

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

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

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

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는 입력 영상 내에서 보간하여 출력 픽셀 값을 계산합니다.

다음 그림은 각 정사각형이 10×10 픽셀인 체커보드 영상의 평행 이동 변환을 보여줍니다. 일반적으로 입력 공간의 좌표축에는 레이블 uv가 지정되고, 출력 공간의 좌표축에는 레이블 xy가 지정됩니다. 역변환을 사용하면 출력 좌표 공간의 (x,y) 좌표가 (25,35)인 픽셀이 입력 좌표 공간의 (u,v) 좌표 (5,5)에 매핑됩니다.

Checkerboard image in input coordinate space and translated checkerboard image in output coordinate space

imwarp는 세계 좌표를 사용하여 매핑을 수행합니다. 자세한 내용은 영상 좌표계 항목을 참조하십시오.

확장 기능

버전 내역

R2013a에 개발됨

모두 확장