擴展數據:
灰度和亮度之間的關系:
轉換公式:
壹.基金會
顏色轉灰色有壹個著名的心理學公式:
灰色= R * 0.299+G * 0.587+B * 0.114
二、整數算法
在實際應用中,我們要避免低速浮點運算,所以需要整數算法。
註意,系數都是3位精度,我們可以將它們縮放1000倍來實現整數運算:
灰色=(R * 299+G * 587+B * 114+500)/1000
RGB壹般是8位精度,現在是1000倍縮放,所以上面的運算是32位整數運算。註意後面的除法是整數除法,需要加500才能實現四舍五入。
正是因為這個算法需要32位運算,所以這個公式的另壹個變種非常流行:
灰色=(R * 30+G * 59+B * 11+50)/100
但是,雖然前面的公式是32位整數運算,但是根據80x86系統整數乘除指令的特點,可以用16位整數乘除指令進行運算。
第三,整數移位算法
上面的整數算法很快,但是有壹點還是制約了速度,那就是最後的除法。移位比除法快得多,所以可以將系數縮放到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)>& gt16
2-20位精度的系數:
Gray=(R*1+G*2+B*1)>& gt2
Gray=(R*2+G*5+B*1)>& gt三
Gray=(R*4+G*10+B*2)>& gt四
Gray=(R*9+G*19+B*4)>& gt五
Gray=(R*19+G*37+B*8)>& gt六
Gray=(R*38+G*75+B*15)>& gt七
Gray=(R*76+G*150+B*30)>& gt八
Gray=(R*153+G*300+B*59)>& gt九
gray =(R * 306+G * 601+B * 117)>& gt10
gray =(R * 612+G * 1202+B * 234)>& gt11
gray =(R * 1224+G * 2405+B * 467)>& gt12
Gray=(R*2449+G*4809+B*934)>& gt13
gray =(R * 4898+G * 9618+B * 1868)>& gt14
gray =(R * 9797+G * 19235+B * 3736)>& gt15
gray =(R * 19595+G * 38469+B * 7472)>& gt16
gray =(R * 39190+G * 76939+B * 14943)>& gt17
gray =(R * 78381+G * 153878+B * 29885)>& gt18
gray =(R * 156762+G * 307757+B * 59769)>& gt19
gray =(R * 313524+G * 615514+B * 119538)>& gt20
觀察上面的公式,這些精度其實是壹樣的:3和4,7和8,10和11,13和14,19和20,所以16位運算的最佳計算公式是用7位精度。
Gray=(R*38+G*75+B*15)>& gt七
事實上,最有趣的是2位精度,它可以完全轉換和優化:
gray =(R+(WORD)G & lt;& lt1+B)>& gt2
由於誤差較大,在圖像處理中從不使用該公式(最常用的是16位精度)。但是對於遊戲編程來說,
場景經常變化,用戶壹般不可能觀察到顏色的細微差別,所以最常用的是2位精度。
參考資料:
百度百科-灰度值
百度百科-圖像亮度