[转] 图像灰度化

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章