RGB顏色轉灰度的演算法公式

2021-07-09 11:23:10 字數 2176 閱讀 3280

方法一:

對於彩色轉灰度,有乙個很著名的心理學公式:

gray = r*0.299 + g*0.587 + b*0.114

方法二:

而實際應用時,希望避免低速的浮點運算,所以需要整數演算法。

注意到係數都是3位精度的沒有,我們可以將它們縮放1000倍來實現整數運算演算法:

gray = (r*299 + g*587 + b*114 + 500) / 1000

rgb一般是8位精度,現在縮放1000倍,所以上面的運算是32位整型的運算。注意後面那個除法是整數 除法,所以需要加上500來實現四捨五入。

就是由於該演算法需要32位運算,所以該公式的另乙個變種很流行:

gray = (r*30 + g*59 + b*11 + 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 = (r*19595 + g*38469 + b*7472) >> 16

2至20位精度的係數:

gray = (r*1 + g*2 + b*1) >> 2

gray = (r*2 + g*5 + b*1) >> 3

gray = (r*4 + g*10 + b*2) >> 4

gray = (r*9 + g*19 + b*4) >> 5

gray = (r*19 + g*37 + b*8) >> 6

gray = (r*38 + g*75 + b*15) >> 7

gray = (r*76 + g*150 + b*30) >> 8

gray = (r*153 + g*300 + b*59) >> 9

gray = (r*306 + g*601 + b*117) >> 10

gray = (r*612 + g*1202 + b*234) >> 11

gray = (r*1224 + g*2405 + b*467) >> 12

gray = (r*2449 + g*4809 + b*934) >> 13

gray = (r*4898 + g*9618 + b*1868) >> 14

gray = (r*9797 + g*19235 + b*3736) >> 15

gray = (r*19595 + g*38469 + b*7472) >> 16

gray = (r*39190 + g*76939 + b*14943) >> 17

gray = (r*78381 + g*153878 + b*29885) >> 18

gray = (r*156762 + g*307757 + b*59769) >> 19

gray = (r*313524 + g*615514 + b*119538) >> 20

仔細觀察上面的**,這些精度實際上是一樣的:3與4、7與8、10與11、13與14、19與20

所以16位運算下最好的計算公式是使用7位精度,比先前那個係數縮放100倍的精度高,而且速度快:

gray = (r*38 + g*75 + b*15) >> 7

其實最有意思的還是那個2位精度的,完全可以移位優化:

gray = (r + (word)g<<1 + b) >> 2

另一種是 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)

該方法執行速度稍慢,但是效果很好。

還有就是   平均值方法 

gray = (red+blue+green)/3

(gray,gray,gray ) 替代 (red,green,blue)

RGB顏色轉灰度的演算法公式

方法一 對於彩色轉灰度,有乙個很著名的心理學公式 gray r 0.299 g 0.587 b 0.114 方法二 而實際應用時,希望避免低速的浮點運算,所以需要整數演算法。注意到係數都是3位精度的沒有,我們可以將它們縮放1000倍來實現整數運算演算法 gray r 299 g 587 b 114 ...

RGB顏色空間轉LAB

第一 lab顏色空間簡介 lab是由乙個亮度通道 channel 和兩個顏色通道組成的。在lab顏色空間中,每個顏色用l a b三個數字表示,各個分量的含義是這樣的 第二 為什麼使用lab顏色空間 因為它是一種裝置無關的顏色系統,也是一種基於生理特徵的顏色系統。它所描述的顏色空間就是人眼的視覺感應。...

RGB轉HSI顏色空間

顯示原圖 def rgb2hsi rgb img row np.shape rgb img 0 col np.shape rgb img 1 對原始影象進行複製 hsi img rgb img.copy 對影象進行通道拆分 b,g,r cv2.split rgb img 把通道歸一化到 0,1 b,...