欢迎来到天天文库
浏览记录
ID:38518328
大小:32.00 KB
页数:4页
时间:2019-06-14
《从RGB色转为灰度色算法》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、从RGB色转为灰度色算法一、基础 对于彩色转灰度,有一个很著名的心理学公式: 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位整型的运算。
2、注意后面那个除法是整数除法,所以需要加上500来实现四舍五入。 就是由于该算法需要32位运算,所以该公式的另一个变种很流行: Gray=(R*30+G*59+B*11+50)/100 但是,虽说上一个公式是32位整数运算,但是根据80x86体系的整数乘除指令的特点,是可以用16位整数乘除指令来运算的。而且现在32位早普及了(AMD64都出来了),所以推荐使用上一个公式。三、整数移位算法 上面的整数算法已经很快了,但是有一点仍制约速度,就是最后的那个除法。移位比除法快多了,所以可以
3、将系数缩放成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 可能很多人看见了,我所使用的舍入方式不是四舍五
4、入。四舍五入会有较大的误差,应该将以前的计算结果的误差一起计算进去,舍入方式是去尾法: 写成表达式是: 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
5、 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
6、 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
7、 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*30775
8、7+B*59769)>>19 Gray=(R*313524+G*615514+B*119538)>>20 仔细观察上面的表格,这些精度实际上是一样的:3与4、7与8、1
此文档下载收益归作者所有