티스토리 뷰

1.1 매트랩의 이미지 구조

매트랩에서 행렬 연산등을 통해 영상 처리를 하기 위해서는 당연히 매트랩이 이미지를 표현하는 방법부터 알아야할 것이다. 매트랩에서 이미지는 크게 3가지 유형으로 표현/처리되는데 다음과 같은 유형의 format이 존재한다.

 

  • 흑백 이미지 (명암 이미지)
  • RGB(트루컬러) 이미지
  • 인덱스 이미지

1.1.1 흑백 이미지의 구조

우선, 흑백 영상을 다루는 것을 생각해보자. 흑백 영상에 있는 하나의 pixel은 다음과 같은 정보를 반드시 포함해야한다.

  • 가로 축 좌표
  • 세로 축 좌표
  • 각 좌표에서 밝기의 값

이 정보는 2D array면 표시할 수 있다. row와 col이 각각 하나의 좌표가 되고 배열에 들어있는 값이 밝기의 값을 표시하면 되기 때문이다.

 

또한 각 pixel 밝기의 값은 0~1에서 표현될 수도 있고, 혹은 0~255에서, 혹은 0~65535에서 표현될 수도 있는데

각각 자료형이 double, uint8, uint16일 때의 범위가 된다. 이미지의 밝기를 표현하는 서로다른 방법들은 문서 1.5 imshow()에서 자세하게 다루었다.

 

mathwork 사이트의 예제 그림을 가져온다. 다음<그림1>은 흑백 이미지를 표현하는 방법이다.

<그림1: 매트랩에서 흑백 이미지를 표현하는 방법>

1.1.2 RGB(트루컬러) 이미지의 구조

흑백 사진을 표현하는 방법은 쉬웠다. 그러면 컬러 사진을 표현하려면 어떻게 해야할까? 우리는 컬러 사진이 RGB삼원색으로 구성되어있다는 것을 알고있다. 따라서 필요한 정보가 다음과 같이 바뀌었을 뿐이다.

  • 가로 축 좌표
  • 세로 축 좌표
  • 어떤 좌표에서 빨간 색의 밝기(R)
  • 어떤 좌표에서 초록 색의 밝기(G)
  • 어떤 좌표에서 파란 색의 밝기(B)

이 정보는 3D array를 사용하면 표현할 수 있다. 예를 들어 1920*1080의 FHD이미지를 생각해보자. 그러면 우리에게 필요한 3D array는 1920x1080x3 행렬이다. 그렇게 만든 다음

  • [:,:,1]에는 R의 밝기를
  • [:,:,2]에는 G의 밝기를
  • [:,:,3]에는 B의 밝기를

각각 표시하면 되기 때문이다. 이런 방식으로 컬러 이미지는 설계되어있다.

(물론 픽셀-색 하나는 명확한 표현은 아니지만 이해를 쉽게 하자.)

이 밝기 값도 0~1, 0~ 255에서, 혹은 0~65535에서 표현될 수도 있는데, 각각 자료형이 double, uint8, uint16일 때이다. 이는 문서 1.5 imshow()에서 자세하게 다루었다.

다음<그림2>는 RGB 트루컬러 이미지가 구성되어 있는 방식을 그림으로 표현한 것이다.

<그림2: 매트랩에서 컬러 이미지를 표현하는 방법, double scaling>

1.1.3 인덱스 이미지(indexed image)의 구조

컬러 이미지를 나타내는 방법으로 반드시 x 곱하기 y 곱하기 3의 행렬이 필요한 것은 아니다.

예를 들어 m개의 색이 저장되어 있는 m*3의 배열을 생각해볼 수 있는데 다음과 같이 구성하자.

  • 특정 행에는 3개의 열이 있으므로 각 열에 R성분, G성분, B성분을 저장한다.
  • 그러면 특정 행은 특정 RGB 색을 표현할 수 있고 이 m*3의 배열을 map이라 부르자.

그러면 다음 <그림3>과 같이 특정 (x,y)의 픽셀에 map의 원소 index를 써서 map에 미리 저장된 색을 대응시키는 것으로 컬러 이미지를 표현할 수 있게 된다.

<그림3: 인덱스 이미지 표현법>

이렇게 서로 다른 이미지 구조는 이미지를 사용하는 함수에도 영향을 조금씩 미친다. 이는 후속문서에서 유형을 나누어 다루겠다.

 

 

<그림1>, <그림2>, <그림3>과 거의 모든 내용의 출처

Reference: https://kr.mathworks.com/help/matlab/creating_plots/image-types.html

댓글