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