Main Content

image 객체 및 해당 속성

이미지 CData

참고

image 명령과 imagesc 명령은 image 객체를 생성합니다. line, patch, surface, text 객체와 같이, image 객체는 axes 객체의 자식입니다. 모든 그래픽스 객체와 같이, image 객체에는 화면에 표시되는 모양을 세부 조정하기 위해 설정할 수 있는 여러 속성이 있습니다. image 객체에서 모양과 관련하여 가장 중요한 속성은 CData, CDataMapping, XData, YData입니다. 이들 속성은 이 섹션과 이후 섹션에서 설명합니다. 이들 속성을 포함하여 image 객체의 모든 속성에 대한 자세한 내용은 image를 참조하십시오.

image 객체의 CData 속성에는 데이터 배열이 포함됩니다. 다음 명령에서 himage로 생성되는 image 객체의 핸들이며, 행렬 XY는 동일합니다.

h = image(X); colormap(map)
Y = get(h,'CData');

CData 배열의 차원에 따라 이미지가 컬러맵 색을 사용하여 표시되는지 또는 RGB 이미지를 사용하여 표시되는지가 결정됩니다. CData 배열이 2차원인 경우 이미지는 인덱스 이미지이거나 명암 이미지입니다. 두 경우 모두 이미지는 컬러맵 색을 사용하여 표시됩니다. 반면, CData 배열이 m×n×3인 경우 이미지는 컬러맵 색을 무시하고 트루컬러 이미지로 표시됩니다.

이미지 CDataMapping

CDataMapping 속성은 이미지가 indexed인지 또는 intensity인지를 제어합니다. 인덱스 이미지를 표시하려면 CData 배열의 값이 Figure의 컬러맵에 대한 인덱스로 직접 사용되도록 CDataMapping 속성을 'direct'로 설정합니다. image 명령이 단일 입력 인수와 함께 사용되는 경우 CDataMapping의 값이 'direct'로 설정됩니다.

h = image(X); colormap(map)
get(h,'CDataMapping')
ans =

direct

명암 이미지는 CDataMapping 속성을 'scaled'로 설정하는 방식으로 표시됩니다. 이 경우, CData 값은 선형으로 스케일링되어 컬러맵 인덱스를 형성합니다. 좌표축의 CLim 속성은 스케일링 인자를 제어합니다. imagesc 함수는 CDataMapping 속성이 'scaled'로 설정된 image 객체를 생성하고, 부모 axes의 CLim 속성을 조정합니다. 예를 들면 다음과 같습니다.

h = imagesc(I,[0 1]); colormap(map)
get(h,'CDataMapping')
ans =

scaled

get(gca,'CLim')
ans =

[0 1]

XData 및 YData

XData 속성과 YData 속성은 이미지의 좌표계를 제어합니다. m×n 이미지의 경우 디폴트 XData[1 n]이고, 디폴트 YData[1 m]입니다. 이들 설정은 다음을 의미합니다.

  • 이미지의 왼쪽 열은 x 좌표로 1을 갖습니다.

  • 이미지의 오른쪽 열은 x 좌표로 n을 갖습니다.

  • 이미지의 맨 위 행은 y 좌표로 1을 갖습니다.

  • 이미지의 맨 아래 행은 y 좌표로 m을 갖습니다.

이미지의 좌표계

디폴트 좌표계 사용

디폴트 좌표계를 사용하여 이미지를 표시합니다. colorcube 맵의 색을 사용합니다.

C = [1 2 3 4; 5 6 7 8; 9 10 11 12];
im = image(C);
colormap(colorcube)

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

좌표계 지정

이미지를 표시하고 좌표계를 지정합니다. colorcube 맵의 색을 사용합니다.

C = [1 2 3 4; 5 6 7 8; 9 10 11 12];
x = [-1 2];
y = [2 4];
figure
image(x,y,C) 
colormap(colorcube)

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

이미지 데이터에 텍스트 추가하기

이 예제에서는 배열 인덱싱을 사용하여 텍스트를 기존 이미지로 래스터화하는 방법을 보여줍니다.

text 함수를 사용하여 좌표축에 텍스트를 그립니다. 그런 다음, getframe을 사용하여 화면에서 텍스트를 캡처하고 Figure를 닫습니다.

fig = figure;
t = text(.05,.1,'Mandrill Face','FontSize',20,'FontWeight','bold');
F = getframe(gca,[10 10 200 200]);
close(fig)

getframe에서 반환된 결과 RGB 이미지의 평면을 선택합니다. 검은색(검은색은 0임)인 픽셀을 찾아 sub2ind를 사용하여 해당 첨자를 인덱스로 변환합니다. 이러한 첨자를 사용하여 텍스트를 mandrill MAT 파일에 포함된 이미지로 "그립"니다. 해당 이미지의 크기와 텍스트의 행 및 열 위치를 사용하여 새 이미지에서의 위치를 결정합니다. 새 이미지에 대한 인덱스를 참조하여, 픽셀을 대체합니다.

c = F.cdata(:,:,1);
[i,j] = find(c==0);
load mandrill
ind = sub2ind(size(X),i,j);
X(ind) = uint8(255);

뼈(bone) 컬러맵을 사용하여 새 이미지를 표시합니다.

imagesc(X)
colormap bone

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

빠른 이미지 업데이트를 위한 추가 기법

image 객체의 CData 속성이 업데이트되는 속도를 높이려면 CData를 최적화하고 일부 관련 Figure 속성 및 axes 속성을 설정합니다.

  • 가능한 한 가장 작은 데이터형을 사용합니다. 이미지에 uint8 데이터형을 사용하는 것이 double 데이터형을 사용하는 것보다 빠릅니다.

    이미지의 CData 속성을 설정하는 과정에는 이미지 사용을 위한 행렬 복사 작업이 포함됩니다. 행렬의 전체 크기는 개별 요소의 크기에 따라 결정됩니다. 더 작은 개별 요소(예: 더 작은 데이터형)를 사용하면 행렬 크기가 줄어들고, 행렬을 복사하는 데 필요한 시간이 줄어듭니다.

  • 허용 가능한 가장 작은 행렬을 사용합니다.

    이미지가 표시되는 속도가 최우선 순위인 경우 이미지의 크기와 품질을 낮춰야 할 수 있습니다. 다시 강조하자면, 크기를 줄이면 행렬을 복사하는 데 필요한 시간이 줄어듭니다.

  • 좌표축의 제한 모드 속성(XLimModeYLimMode)을 manual로 설정합니다.

    auto로 설정하면 객체(예: image, line, patch 등)가 데이터의 일부 측면을 변경할 때마다 좌표축이 관련 속성을 다시 계산해야 합니다. 예를 들어, 다음을 지정할 경우

    image(firstimage);
    set(gca, 'xlimmode','manual',...
    'ylimmode','manual',...
    'zlimmode','manual',...
    'climmode','manual',...
    'alimmode','manual');
    

    좌표축은 이미지를 다시 그리기 전에 제한 값을 다시 계산하지 않습니다.

  • 작업의 핵심이 화면에 일련의 이미지를 단순히 표시하는 것이라면 movie 객체를 사용하는 것을 고려하십시오.

    MATLAB® movie 객체는 MATLAB 객체 코드를 실행하는 대신 기본 시스템 그래픽스 리소스를 직접 활용합니다. 이는 앞서 설명한 것과 같이 이미지의 CData 속성을 반복적으로 설정하는 것보다 빠릅니다.