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


Posted by kkokkal
: