圖像的亮度值和灰度值是有區別的,區別為:圖象亮度是指畫面的明亮程度,單位是堪德拉每平米(cd/m2)或稱nits。灰度是指把白色與黑色之間按對數關系分成若幹級,其範圍壹般從0到255,白色為255,黑色為0。
擴展資料:
灰度與亮度的關系:
轉換公式:
壹、基礎
對於彩色轉灰度,有壹個很著名的心理學公式:
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
但是,雖說上壹個公式是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)>>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
由於誤差很大,所以做圖像處理絕不用該公式(最常用的是16位精度)。但對於遊戲編程
,場景經常變化,用戶壹般不可能觀察到顏色的細微差別,所以最常用的是2位精度。
參考資料:
百度百科——灰度值
百度百科——圖像亮度