JellyJay

【Project】RGB 이미지를 Grayscale로 변환하는 함수 만들기. 본문

past/SASPL

【Project】RGB 이미지를 Grayscale로 변환하는 함수 만들기.

JellyJay 2010.11.30 21:50

음성처리와 함께 영상처리실습 프로젝트 중 하나였던
RGB 이미지를 Grayscale로 변환하는 함수 구현에 대한 내용입니다.

이는 영상 전처리(Pre-Processing)에 해당하는 기본적인 내용이어서,
사실 MATLAB Toolbox에 아름답게 구현되어 있지요.ㅋㅋ
이번 프로젝트에서 그걸 사용해 보는 것이 다인 줄 알고 첫 제출 및 발표 때는 Toolbox를 사용했습니다.
하지만 교수님께서 바라셨던 결과는 그러한 동작을 하는 M-file의 구현이었지요.^-^;;
그래서 새로 제출하는 겸, 포스팅하며 정리해봅니다.

일단 RGB를 어떻게 Grayscale로 변환 알고리즘을 알아야 함수 구현이 가능하기에.
여기저기 기웃거리며 검색한 결과.

  1. 3 layer(R,G,B)의 신호들을 단순 평균하여 1 layer의 흑백이미지로 만드는 방법.
  2. 1의 방법과 유사하나 weighted average를 이용하여 흑백이미지를 만드는 방법.
  3. YIQ Color Space와 RGB 변환 Matrix를 이용한 Intensity value(Y) 이용 방법.

대략 이렇게 3가지 정도의 간단한 알고리즘이 있음을 확인했습니다.
물론 사진적인 접근으로 desaturation하는 방법도 있지요. 물론 수학적인 알고리즘도 있지만
일단 세가지 중 하나를 선택하기로 하고.
MATLAB Toolbox에 구현된 rgb2gray.m 파일에서 사용된 RGB to YIQ 변환 Matrix이용한 방법을 사용하기로 하였습니다.



< 그림1. grb2gray에 사용된 Algorithm >



< 그림2. RGB to YIQ 변환 Matrix (출처: Wikipedia) >


간단히 설명해보자면, YIQ Color Space는 미국/일본 등에서 사용된 NTSC 컬러 TV 시스템입니다.
RGB 이미지는 R(Red), G(Green), B(Blue) 각각 3개의 채널에 저장되는 색상을 합하여 밝기, 채도(Saturation), 색조(Hue)를 나타내지만,
YIQ는 Y(Intensity), I & Q(Chrominance), 즉 Y는 밝기 정보를, I와 Q가 이루는 위상과 크기는 색조와 채도를 나타냅니다.



< 그림3. YIQ Color Space에서 I와 Q Plane (출처: Wikipedia) >


그래서 단순히 흑백이미지 변환을 위해서, 우리는 변환 Matrix의 최상단 row만을 취하여
RGB에 곱해주고 더하면 YIQ의 Y(Intensity)에 대한 데이터가 연산되어 결과적으로 Grayscale을 얻을 수 있지요.^-^

구현해 보겠습니다.



< 그림4. rgb2gray_JAY.m >


아주 깔끔하고 단순하게 끝나버렸습니다.ㅋ^-^;
12~14번째 줄에서 채널을 분리하고, 18번째 줄에서 변환 Matrix의 첫번째 row를 곱해서 흑백이미지를 얻습니다.
결과는 그림6과 같습니다.



< 그림5. 실습에 사용한 512x512 원본이미지 >



< 그림6. rgb2gray_JAY.m 함수를 이용해 얻은 Grayscale image >



1 Comments
댓글쓰기 폼