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

imwarp

영상에 기하 변환 적용

설명

예제

B = imwarp(A,tform)은 기하 변환 tform에 따라 영상 A를 변환합니다. 입력 영상 A는 숫자형, 논리형 또는 categorical형 배열일 수 있습니다. tform은 기하 변환 객체입니다. 이 함수는 B에 변환된 영상을 반환합니다. 이 영상은 입력 영상과 같은 클래스를 가집니다.

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

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

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

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

예제

모두 축소

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

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])

입력 인수

모두 축소

변환할 영상으로, 임의 차원의 숫자형, 논리형 또는 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가 mxn 크기의 2차원 회색조 영상이면 D는 mxnx2입니다. 변위 필드의 첫 번째 평면 D(:,:,1)은 가산 변위 값의 x 성분을 지정합니다. imwarp는 이 가산 변위 값을 D의 열 및 행 위치에 더하여 A의 다시 매핑된 위치를 생성합니다. 마찬가지로, 변위 필드의 두 번째 평면 D(:,:,2)는 가산 변위 값의 y 성분을 지정합니다.

  • A가 mxnxp 크기의 2차원 RGB 영상이거나 3차원 회색조 영상이면 D는 다음과 같습니다.

    • mxnxpx3. D(:,:,:,1)은 x축 방향의 변위 값을 포함하고, D(:,:,:,2)는 y축 방향의 변위 값을 포함하며, D(:,:,:,3)은 z축 방향의 변위 값을 포함합니다.

    • mxnx2. 이 경우 imwarp는 한 번에 평면 하나씩 변위 필드를 적용합니다.

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

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

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

보간 방법설명
'linear'선형 보간입니다. 이는 숫자형 및 논리형 배열의 디폴트 보간 방법입니다.
'nearest'최근접이웃 보간 — 해당 점이 속한 픽셀 값이 출력 픽셀에 할당됩니다. 다른 픽셀은 고려되지 않습니다. 이는 categorical형 배열의 유일한 보간 방법이자 디폴트 보간 방법입니다.
'cubic'3차 보간

데이터형: char | string

이름-값 쌍의 인수

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

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

세계 좌표 시스템상에서의 출력 영상의 크기와 위치로, 'OutputView'와 함께 imref2d 또는imref3d 공간 참조 객체가 쉼표로 구분되어 지정됩니다. 공간 참조 객체의 ImageSize, XWorldLimits, YWorldLimits 속성에 따라 세계 좌표 시스템상에서의 출력 영상의 크기와 위치가 정의됩니다. 변위 필드를 적용할 때는 'OutputView'를 사용할 수 없습니다.

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

  • 입력 영상이 2차원이고 변환이 2차원인 경우 채우기 값은 스칼라가 되어야 합니다.

  • 입력 영상이 3차원이고 변환이 3차원인 경우 채우기 값은 스칼라가 되어야 합니다.

  • 입력 영상이 N차원이고 변환이 2차원인 경우 채우기 값은 스칼라 또는 배열일 수 있습니다. 채우기 값이 배열인 경우 그 크기는 입력 영상의 상위 차원(3번째 차원 ~ N번째 차원)과 같아야 합니다. 예를 들어, A가 RGB 영상 200x200x3이면 채우기 값은 스칼라 또는 3x1 배열일 수 있습니다. 검은색 채우기 값을 지정하려면 0 또는 [0;0;0]으로 설정하십시오. 또 다른 예로, A가 200x200x3x10 크기의 4차원 행렬인 경우 채우기 값은 스칼라 또는 3x10 배열일 수 있습니다.

  • 입력 영상이 categorical형 배열인 경우 MATLAB의 missing 함수를 사용하여 채우기 값을 지정해야 합니다. categorical형 데이터에서의 missing<undefined>입니다.

예: 128은 데이터형이 uint8인 모든 영상에 중간 회색 채우기 값을 지정합니다.

예: 0.5는 데이터형이 double인 모든 영상에 중간 회색 채우기 값을 지정합니다.

예: [255 255 0]은 데이터형이 uint8인 2차원 RGB 영상에 노란색 채우기 색을 지정합니다.

예: [1 1 0]은 데이터형이 double인 2차원 RGB 영상에 노란색 채우기 색을 지정합니다.

예: [0 1 0;1 1 0]'은 데이터형이 double인 일련의 두 RGB 영상에 각각 녹색과 노란색 채우기 색을 지정합니다.

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

출력 인수

모두 축소

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

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

알고리즘

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

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

평행 이동한 입력 영상

확장 기능

R2013a에 개발됨