资讯 整机 数码 DIY 办公 网络 通讯 产品大全 IT经销商 中关村 IDC 论坛 影音 游戏 汽车 学院 网址 软件 驱动
游戏梦网
游戏库 网页游戏 网络游戏 手机游戏 电子竞技 电脑单机 掌机游戏 电视游戏
新闻中心 ·小游戏 ·游戏排行 ·游戏壁纸 ·手办模型 ·Cosplay · 游戏MM 
游戏梦网 > 游戏开发 > 程序设计 > 正文
彩色转灰度算法彻底学习
2008-4-21
责编:冰雨

file: StudyRGB2Gray.txt
Name: 彩色转灰度算法彻底学习
Author: zyl910
Version: V1.0
Updata: 2006-5-22

  最近突然又对图形学有了兴趣,翻出了多年前学习图形学的笔记,感触良多。于是将它们整理好发了上来。


一、基础

  对于彩色转灰度,有一个很著名的心理学公式:
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位整数乘除指令来运算的。而且现在32位早普及了(AMD64都出来了),所以推荐使用上一个公式。

 

三、整数移位算法

  上面的整数算法已经很快了,但是有一点仍制约速度,就是最后的那个除法。移位比除法快多了,所以可以将系数缩放成 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位精度。

【作者:冰雨】  【来源:Czn游戏梦网】

评论】【 】【去论坛看看】【收藏】【打印】【关闭】【回到顶部
  看完这篇文章有何感觉?

夺命杀手3

除了你还能爱谁

我要结婚 不要结婚

曾经爱过你

生日快乐

不再为谁流眼泪

忘不了你

女生怕怕

玩转摇滚乐

超可爱炸弹人

【美图精选】

【热门推荐】
·新世代掌机大乱斗!PSP3000决战NDSi胜算几何
·记忆卡启动HDL,FREE MCBOOT详细教程
·《昆仑OnWeb》周末大狂欢 多倍经验送送送
·PlayStation 3  手柄无线键盘试用报告
·3D革命!彻底解放CPU的物理卡深入剖析
·《火焰VS》对战地图设计结果揭晓
·以已之力造福于人 《昆仑OnWeb》全服经验由
·NDSi烧录卡分析 真正破解仍需努力
·圣诞加强版热酷《三国风云》,新服开启大礼
商家最新促销信息


最新动态


PSP《牧场物语》

左手两仪 画集上市

可爱珠姫露出小玉足

彻底解放CPU物理卡
·《最终幻想纷争》朋友卡及道具(PSP)
·《魔界战记2 便携版》角色高清大图欣赏
·装备也当宠物养 华夏免费版新版五行御灵
·PSP-3000"艳光红"与"跃动蓝"1月15日发售
·新年新服今日开启《武林》喜添“锦绣”
·FAMI通社长:《DQIX》销量预计500万套
·疯狂改装玩创意 日本玩家制作索尼牌NDS
·奇桌网游: 《奇桌》网络游戏公测 游戏八卦哪
·寰宇之星王牌产品 周边获取办法
·寰宇、娱乐通“王牌”海报席卷单机市场
·《古墓丽影8:地下世界》PC版试玩版
·《三国群英传Ⅶ》简体中文版正式上市
·智慧与勇气的胜利《生化奇兵》火爆热销
·《星际争霸2》兵种总论
·《星际争霸2》兵种详细分析
·美国男孩热爱游戏主角 花三年时间挑战法律
·奥元网络科技诚聘英才
·深圳架式堂科技有限公司,诚招精英游戏人才
·国产硬派武侠网游《新侠义道》评测(图)
·Energizer推出Wii、PS3、360手柄专用充电器

论坛精选
·
·
·
·
·
·
·
·
·
·
抵制不良游戏,拒绝盗版游戏, 注意自我保护,谨防受骗上当, 适度游戏益脑,沉迷游戏伤身 合理安排时间,享受健康生活
您若发现页面中有任何错误或侵犯您的版权,请及时与我们联系
Copyright© 2008 Czn.Com.Cn All Rights Reserved