0 分量法
将彩色图像中的三分量的亮度作为三个灰度图像的灰度值,可根据应用需要选取一种灰度图像。f1(i,j)=R(i,j) f2(i,j)=G(i,j) f3(i,j)=B(i,j) 其中fk(i,j)(k=1,2,3)为转换后的灰度图像在(i, j)处的灰度值。
1 最大值法
将彩色图像中的三分量亮度的最大值作为灰度图的灰度值。
f(i,j)=max(R(i,j),G(i,j),B(i,j))
2 平均值法
将彩色图像中的三分量亮度求平均得到一个灰度图。
f(i,j)=(R(i,j)+G(i,j)+B(i,j)) /3
3 加权平均法
根据重要性及其它指标,将三个分量以不同的权值进行加权平均。由于人眼对绿色的敏感最高,对蓝色敏感最低,因此,按下式对RGB三分量进行加权平均能得到较合理的灰度图像。 f(i,j)=0.30R(i,j)+0.59G(i,j)+0.11B(i,j))
4 优化的加权平均法
其实3的方法更高精度的表达应该如下
Gray = R0.299 + G0.587 + B0.114
优化一
实际应用时,希望避免低速的浮点运算,所以需要整数算法。注意到系数都是 3 位精度的没有,我们可以将它们缩放 1000 倍来实现整数运算算法:
Gray= (R299 + G587 + B114 + 500) / 1000
RGB 一般是 8 位精度,现在缩放 1000 倍,所以上面的运算是 32 位整型的运算。注意后面那个除法是整数 除法,所以需要加上 500 来实现四舍五入。
就是由于该算法需要 32 位运算(耗费资源较多),所以该公式的另一个变种很流行(基于16位的运算):
Gray= (R30 + G59 + B11 + 50) / 100
优化二
上面的整数算法已经很快了,但是有一点仍制约速度,就是最后的那个除法。移位比除法快多了,所以可以将系数缩放成 2 的整数幂。习惯上使用 16 位精度,2 的 16 次幂是 65536,所以这样计算系数:
0.299*65536 = 19595.264 ≈ 19595
0.587*65536+ (0.264) = 38469.632 + 0.264 = 38469.896 ≈ 38469
0.114*65536 + (0.896) = 7471.104 + 0.896 = 7472
可能很多人看见了,我所使用的舍入方式不是四舍五入。四舍五入会有较大的误差,应该将以前的计算结果的误差一起计算进去,舍入方式是去尾法:
写成表达式是:
Gray= (R19595 + G38469 + B7472) >> 16
2 至 20 位精度的系数:
Gray = (R1 + G2 + B1) >> 2
Gray = (R2 + G5 + B1) >> 3
Gray = (R4 + G10 + B2) >> 4
Gray = (R9 + G19 + B4) >> 5
Gray = (R19 + G37 + B8) >> 6
Gray = (R38 + G75 + B15) >> 7
Gray = (R76 + G150 + B30) >> 8
Gray = (R153 + G300 + B59) >> 9
Gray = (R306 + G601 + B117) >> 10
Gray = (R612 + G1202 + B234) >> 11
Gray = (R1224 + G2405 + B467) >> 12
Gray = (R2449 + G4809 + B934) >> 13
Gray = (R4898 + G9618 + B1868) >> 14
Gray = (R9797 + G19235 + B3736) >> 15
Gray = (R19595 + G38469 + B7472) >> 16
Gray = (R39190 + G76939 + B14943) >> 17
Gray = (R78381 + G153878 + B29885) >> 18
Gray = (R156762 + G307757 + B59769) >> 19
Gray = (R313524 + G615514 + B119538) >> 20
仔细观察上面的表格,这些精度实际上是一样的:3 与4、7与8、10与11、13与14、19与20。所以如果是基于16 位运算的前提下,最好的计算公式是使用 7 位精度(因为RGB本身是8位,所以最高允许8位,而7与8是一样的,所以选择尽可能减少运算,选择7位),比先前那个系数缩放 100 倍的精度高,而且速度快。
Gray = (R38 + G75 + B15) >> 7
其实最有意思的还是那个 2 位精度的,完全可以移位优化:
Gray = (R + (WORD)G<<1 + B) >> 2
5 Adobe Photoshop 里的公式
Adobe RGB (1998)[gamma=2.20]
Gray = (R^2.2 0.2973+ G^2.2 0.6274 + B^2.2 0.0753)^(1/2.2)
该方法运行速度稍慢,但是效果很好。
6 参考链接
http://blog.csdn.net/evsqiezi/article/details/7905436
https://hacpai.com/article/1359968457263