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

imwarp

영상에 기하 변환 적용

설명

예제

B = imwarp(A,tform)은 기하 변환 객체인 tform으로 정의된 기하 변환에 따라 영상 A를 변환합니다. 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]
t = 4×4

    0.9239         0   -0.3827         0
         0    1.0000         0         0
    0.3827         0    0.9239         0
         0         0         0    1.0000

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

입력 인수

모두 축소

변환할 영상으로, 비희소 형식의 실수 값 배열로 지정됩니다.

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

수행할 2차원 또는 3차원 기하 변환으로, 기하 변환 객체로 지정됩니다. 기하 변환 객체에는 affine2d, projective2d, affine3d의 세 가지 유형이 있습니다.

  • 트루컬러 영상에서 tform이 2차원이고 ndims(A) > 2이면 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차원 트루컬러 영상이거나 3차원 회색조 영상이면 D는 다음과 같습니다.

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

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

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

변환할 영상과 연결된 공간 참조 정보로, 공간 참조 객체로 지정됩니다.

  • tform이 2차원 기하 변환인 경우 RA는 2차원 공간 참조 객체(imref2d)여야 합니다.

  • tform이 3차원 기하 변환인 경우 RA는 3차원 공간 참조 객체(imref3d)여야 합니다.

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

보간 방법설명
'linear'선형 보간
'nearest'최근접이웃 보간 — 해당 점이 속한 픽셀 값이 출력 픽셀에 할당됩니다. 다른 픽셀은 고려되지 않습니다.
'cubic'3차 보간

데이터형: char

이름-값 쌍의 인수

선택적으로 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차원인 경우 FillValues는 스칼라여야 합니다.

  • 입력 영상이 3차원이고 기하 변환도 3차원인 경우 FillValues는 스칼라여야 합니다.

  • 입력 영상이 N차원이고 기하 변환이 2차원인 경우 FillValues는 스칼라 또는 배열일 수 있습니다. 배열을 지정하는 경우 배열 크기는 입력 영상의 더 높은 차원과 일치해야 합니다. 예를 들어, 입력 영상이 200x200x3의 uint8형 RGB 영상인 경우 FillValues는 스칼라 또는 3x1 배열일 수 있습니다. 또 다른 예로, 입력 영상이 200x200x3x10 크기의 4차원인 경우 FillValues는 스칼라이거나 3x10 배열일 수 있습니다.

    이 RGB 영상 예제에서 FillValues에 사용할 수 있는 값은 다음과 같습니다.

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

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

출력 인수

모두 축소

변환된 영상으로, 비희소 형식의 실수 값 배열로 반환됩니다. BA와 클래스가 같습니다.

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

알고리즘

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

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

평행 이동한 입력 영상

확장 기능

R2013a에 개발됨