Study/Image Processing
RGB 트루칼라를 grayscale 로 변환하는 방법
kkokkal
2005. 5. 2. 21:55

RGB로 표현되는 트루칼라를 그레이스케일로 변환하는 식은 다음과 같다.
L = 0.299R + 0.587G + 0.114B
CxImage 라이브러리( http://www.xdp.it/cximage.htm )에는 위의 변환식을 define 문과 shift 연산자를 사용하여 속도 향상을 꾀하였다는 특색이 있다. CxImage 소스에 적혀있는 변환 코드는 다음과 같다.
// color to grey mapping <H. Muelner> <jurgene>
// Same as #define RGB2GRAY(r, g, b) (((b)*114 + (g)*587 + (r)*299)/1000)
#define RGB2GRAY(r, g, b) (((b)*117 + (g)*601 + (r)*306) >> 10)
이와는 달리, 매우 간단하게 grayscale 형태로 바꾸는 다음과 같은 식도 존재한다.
grayscale = (R + G + B) / 3
그러나, 이 방법은 말 그대로 매우 단순하게 grayscale 과 비슷한 값으로 바꾸는 것이고, 정확한 변환식은 아닌 것으로 생각된다.
(2005년 12월 28일 추가)
Matlab에서도 rgb2gray() 라는 함수가 있는데 이 함수에서는 다음과 같은 행렬을 이용하여 grayscale 로 변환을 한다.
T = inv([1.0 0.956 0.621; 1.0 -0.272 -0.647; 1.0 -1.106 1.703]);
이 행렬 T의 첫 번째 행이 위에서 제시한 변환식과 일치한다.
>> T
T =
0.2989 0.5870 0.1140
0.5959 -0.2744 -0.3216
0.2115 -0.5229 0.3114