[轉] 圖像灰度化

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

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