Main Content

MATLAB에서 이미지 유형 사용하기

MATLAB®은 이미지를 배열(주로 2차원 행렬)로 표현하며, 배열의 각 요소는 표시된 이미지에서 하나의 픽셀에 해당합니다. MATLAB에서 이미지로 작업하는 것은 다른 유형의 행렬 데이터를 사용하는 것과 비슷하며, MATLAB에서는 어떠한 2차원 데이터라도 이미지로 표시할 수 있습니다. 이미지를 표시하는 두 가지 일반적인 방법은 다음과 같습니다.

이미지 유형

세 가지 일반적인 이미지 유형은 다양한 배열 차원을 가지며, 인덱스 이미지, 회색조(명암) 이미지, RGB(트루컬러) 이미지입니다. 다음 표에 이미지 유형이 요약되어 있습니다.

이미지 유형데이터 행렬컬러맵 행렬
인덱스 이미지m×np×3

인덱스 이미지 읽기 및 표시하기

Three cobs of corn displayed with color.

회색조(명암) 이미지m×n기본적으로 없지만, 컬러맵을 적용할 수 있습니다.

회색조 이미지 읽기 및 표시하기

Three cobs of corn displayed in gray.

RGB(트루컬러) 이미지m×n×3없음

RGB 이미지 읽기 및 표시하기

Image of the earth.

이미지 파일로 작업하는 경우 imfinfo 함수를 사용하여 이미지 유형을 확인할 수 있습니다. 예를 들어, peppers.png의 이미지 유형을 확인합니다.

info = imfinfo("peppers.png");
info.ColorType
ans = 'truecolor'

이미지 파일 읽기 및 표시하기

이미지로 작업할 때는 대개 이미지 데이터를 MATLAB 작업 공간으로 불러오고, 이미지를 표시하고, 이미지 데이터를 조작합니다. 그러나 이미지로 작업하는 과정은 이미지 유형에 따라 다릅니다.

인덱스 이미지

인덱스 이미지는 이미지 데이터 행렬 X 및 컬러맵 행렬 map으로 저장됩니다. map의 각 행은 하나의 색을 나타내는 빨간색, 녹색, 파란색 성분을 지정합니다. 인덱스 이미지는 픽셀 값과 컬러맵 값 간에 직접 매핑을 사용합니다. 각 이미지 픽셀의 색은 X의 대응값을 컬러맵에 저장된 색 값에 대한 인덱스(포인터)로 사용하여 결정됩니다. X는 정수를 포함하는 m×n 행렬로, 값 1이 map의 첫 번째 행을, 값 2가 두 번째 행을 가리키는 식으로 진행됩니다.

예를 들어, 옥수수를 나타내는 아래 인덱스 이미지의 경우 데이터 행렬의 값 2는 컬러맵의 행 2에 대한 인덱스이고, 데이터 행렬의 값 15는 컬러맵의 행 15에 대한 인덱스입니다.

Image of three ears of corn and its data matrix and colormap. The data matrix contains integer values that map into the colormap, which contains red, green, and blue values for pixel colors.

인덱스 이미지 읽기 및 표시하기

imread를 사용하여 인덱스 이미지를 불러옵니다. 이때 데이터 행렬 X와 컬러맵 map을 모두 출력 인수로 지정합니다. 그런 다음 컬러맵을 사용하여 데이터 행렬을 표시합니다.

[X,map] = imread("corn.png");
imshow(X,map)

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

map은 이미지 파일과 연결된 컬러맵을 저장합니다. 그러나 imshow 함수를 사용하여 임의의 컬러맵을 지정할 수 있습니다. 예를 들어, map을 회색조 컬러맵으로 변환하고 새 컬러맵을 사용하여 이미지 데이터를 표시합니다.

newmap = cmap2gray(map);
imshow(X,newmap)

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

행렬 첨자를 사용하여 이미지 데이터 행렬에서 하나의 픽셀을 선택할 수 있습니다. 이미지 데이터 행렬의 크기는 이미지의 픽셀 개수에 해당합니다. 예를 들어, X는 415개의 픽셀 행과 312개의 픽셀 열로 구성된 이미지를 나타냅니다.

sz = size(X)
sz = 1×2

   415   312

X의 행 2, 열 15에 있는 픽셀의 컬러맵 인덱스를 가져옵니다.

val = X(2,15)
val = uint8

39

map의 요소를 참조하여 이 픽셀의 빨간색, 녹색, 파란색 명암에 해당하는 3개의 값을 표시합니다.

color = map(val,:)
color = 1×3

    0.4588    0.2902    0.2627

회색조(명암) 이미지

회색조 이미지는 명암 이미지라고도 하며, m×n 데이터 행렬 X로 저장되고 행렬의 값은 특정 범위 내의 명암을 나타냅니다. 회색조 이미지는 단일 행렬로 표현되며, 행렬의 각 요소는 하나의 이미지 픽셀에 대응됩니다. 회색조 이미지는 컬러맵과 함께 저장되는 경우가 드물지만 회색조 컬러맵은 여전히 회색조 이미지를 표시하는 데 사용됩니다. 기본적으로, 회색조 이미지는 인덱스 이미지로 처리됩니다.

예를 들어, 옥수수를 나타내는 아래 회색조 이미지의 경우 데이터 행렬에는 각 픽셀의 명암을 나타내는 [0, 255] 범위의 정수가 포함되어 있습니다.

Grayscale image of three ears of corn and its data matrix. The data matrix contains integer values that represent the color intensities for the corresponding image pixels.

회색조 이미지 읽기 및 표시하기

회색조 이미지를 작업 공간으로 불러와서 표시합니다.

X = imread("corn_gray.png");
imshow(X)

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

다른 컬러맵을 사용하여 회색조 이미지를 표시할 수 있습니다. 예를 들어, winter 컬러맵을 사용하여 회색조 이미지를 파란색과 녹색의 음영으로 표시합니다.

imshow(X,winter)

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

행렬 첨자를 사용하여 이미지의 픽셀 명암에 액세스할 수 있습니다. 예를 들어, X의 행 2, 열 15에 있는 픽셀의 회색조 명암 값을 가져옵니다.

val = X(2,15)
val = uint8

156

RGB(트루컬러) 이미지

트루컬러 이미지라고도 하는 RGB 이미지는 m×n×3 데이터 배열로 저장됩니다. 이 데이터 배열은 각각의 개별 픽셀에 대해 빨간색, 녹색, 파란색의 색 성분을 정의합니다. 그래픽스 파일 형식은 RGB 이미지를 24비트 이미지로 저장하며, 여기서 빨간색, 녹색, 파란색 성분은 각각 8비트입니다. 이 배열 방식으로 1,600만 개의 색이 생성될 수 있습니다. 실제 이미지가 정확히 표현될 수 있는 수준의 정밀도를 제공하므로 “트루컬러 이미지”라는 이름이 붙여져 있습니다.

RGB 이미지는 컬러맵을 사용하지 않습니다. 각 픽셀의 색은 각 색 평면의 픽셀 위치에 저장된 빨간색, 녹색, 파란색 명암의 조합으로 결정됩니다. 예를 들어, RGB 이미지 X의 픽셀 (10, 5)의 빨간색, 녹색, 파란색 성분은 각각 X(10,5,1), X(10,5,2), X(10,5,3)에 저장됩니다.

Image of Earth and its 3-D data array. The data array contains red, green, and blue intensity values for the corresponding image pixels.

RGB 이미지 읽기 및 표시하기

RGB 이미지를 불러옵니다. RGB 이미지 데이터는 각 픽셀이 빨간색, 녹색, 파란색 명암 값으로 표현되는 m×n×3 배열로 저장되므로 이미지 데이터 X에 색 데이터가 포함되어 있습니다. 그런 다음 이미지를 표시합니다.

X = imread("earth.jpg");
imshow(X)

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

RGB 이미지의 데이터 배열을 사용하면 이미지 크기와 색에 손쉽게 액세스할 수 있습니다. 이미지 데이터 배열의 크기는 이미지의 픽셀 개수에 해당합니다. 예를 들어, X는 257개의 픽셀 행과 250개의 픽셀 열로 구성된 이미지를 나타냅니다.

size(X)
ans = 1×3

   257   250     3

픽셀의 색을 확인하려면 데이터 배열의 세 번째 차원에 저장된 RGB 3색을 살펴보십시오. 예를 들어, X의 행 50, 열 150에 있는 픽셀의 색을 가져옵니다. 요소는 픽셀 색의 빨간색, 녹색, 파란색 명암을 각각 범위 0 ~ 255로 나타냅니다.

color = X(50,150,1:3)
color = 1x1x3 uint8 array
color(:,:,1) =

   119


color(:,:,2) =

   102


color(:,:,3) =

   110

배열 데이터를 이미지로 표시하기

배열 데이터로 작업할 때는 데이터 값의 상대적 명암 같은 복잡한 패턴을 이해하고 분석하기 위해 배열 데이터를 이미지로 표시합니다. image 함수와 imagesc 함수를 사용하면 작업 공간에 있는 2차원 행렬의 데이터를 이미지로 표시하고 이 이미지에 컬러맵을 적용할 수 있습니다.

예를 들어, 2차원 행렬을 생성합니다. 그런 다음 이 행렬을 이미지로 표시합니다.

X = 4*peaks(100);
image(X)

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

데이터 값들의 차이를 더 효과적으로 시각화하려면 imagesc 함수를 사용하고 컬러맵을 지정하여 이미지 데이터가 표시되는 방식을 사용자 지정할 수 있습니다. 이미지를 컬러바와 함께 표시하여 이미지 데이터가 컬러맵의 다양한 명암에 어떻게 매핑되는지 확인합니다.

imagesc(X);
colormap(turbo)
colorbar

MATLAB이 이미지의 종횡비를 유지하고 픽셀을 정사각형으로 표시하도록 좌표축 제한 스타일을 "equal"로 설정합니다. 추가적으로 좌표축 제한을 설정합니다.

axis equal
xlim([0 100])
ylim([0 100])

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

참고 항목

함수

속성

관련 항목