游戏开发论坛

 找回密码
 立即注册
搜索
查看: 6203|回复: 13

关于Soft Boy一文:《将RGB值转换为灰度值的简单算法

[复制链接]

43

主题

229

帖子

234

积分

中级会员

Rank: 3Rank: 3

积分
234
QQ
发表于 2006-9-6 15:59:00 | 显示全部楼层 |阅读模式
关于Soft Boy一文:《将RGB值转换为灰度值的简单算法》算法的意见

原文对公式描述如下:
R = G = B = 0.3R + 0.6G + 0.1B; //第二版改正后的公式
//第一版中的错误公式是 R = G = B = ( R + G + B ) / 3;

原文算法如下:
WORD RGB16toGray(WORD sour)
{
    WORD t;
    WORD r, g, b;
    r= sour >> RMove;
    g= (GMask & sour) >> GMove;
    b= BMask & sour;
    t = (r*3+b*6+g)/10; //第二版改正的地方
    return (t<<RMove)|(t<<GMove)|t;
}

我这里讨论的就是这一行:
    t = (r*3+b*6+g)/10; //第二版改正的地方

实际上根据我的测试,R:G:B的正确比例更趋近于2:3:1,所以经过更改,我把算法更改为:
    t= ((r<<1) + (g<<2) + b + 31) >> 3;//按照2:4:1的比例合成再加1份白色调节

有人要问为什么变成了2:4:1了呢?因为人眼感觉绿色实际上比其他颜色更明亮一些,而且天蓝色RGB(0,255,255)和绿色RGB(0,255,0)等含绿色的颜色又经常出现(天空,草地……),所以我把绿色*4(就是<<2)。为什么又加了个31呢?因为柔和明亮一些的图象让人眼感到更舒适,所以我加了个31使的图象更白更柔和一些(顺便凑成8倍用来除以8[就是>>3])。

这些改动都是通过实际实验了很多次得出的,综合了速度和让人感到舒适两部分要求。

详细请见下面的图片对照。

游戏原图:
sf_200696155854.png

43

主题

229

帖子

234

积分

中级会员

Rank: 3Rank: 3

积分
234
QQ
 楼主| 发表于 2006-9-6 16:00:00 | 显示全部楼层

Re: 关于Soft Boy一文:《将RGB值转换为灰度值的简单算

截图后利用PhotoShop转灰度得到的图片(因为是24位色所以清楚点):
sf_2006961606.png

43

主题

229

帖子

234

积分

中级会员

Rank: 3Rank: 3

积分
234
QQ
 楼主| 发表于 2006-9-6 16:02:00 | 显示全部楼层

Re: 关于Soft Boy一文:《将RGB值转换为灰度值的简单算

这是Soft Boy原算法得到的图片(16位色)
sf_20069616143.png

43

主题

229

帖子

234

积分

中级会员

Rank: 3Rank: 3

积分
234
QQ
 楼主| 发表于 2006-9-6 16:02:00 | 显示全部楼层

Re: 关于Soft Boy一文:《将RGB值转换为灰度值的简单算

最后是我改变算法后获得的图片(16位色)
sf_20069616229.png

43

主题

229

帖子

234

积分

中级会员

Rank: 3Rank: 3

积分
234
QQ
 楼主| 发表于 2006-9-6 16:04:00 | 显示全部楼层

Re:关于Soft Boy一文:《将RGB值转换为灰度值的简单算

应该明显的发现Soft原来的算法得出的图案颜色偏深了吧。

6

主题

307

帖子

309

积分

中级会员

Rank: 3Rank: 3

积分
309
发表于 2006-9-6 16:51:00 | 显示全部楼层

Re:关于Soft Boy一文:《将RGB值转换为灰度值的简单算

人是猴子进化而来的,猴子要吃树叶,要吃树叶就得通过树叶的颜色判断鲜嫩程度和品种,所以对绿色最为敏感,所以绿色分量要加强

5

主题

49

帖子

49

积分

注册会员

Rank: 2

积分
49
QQ
发表于 2006-9-6 18:29:00 | 显示全部楼层

Re:关于Soft Boy一文:《将RGB值转换为灰度值的简单算

用Photoshop去转换一幅光谱图,然后对比各个光谱的RGB比例,你会发现:各个光谱的RGB比例并不一致。(PS应该是按严格的光学理论来处理的)

所以,如果LZ不是在制作专门的图像处理软件的话,那么,就没必要特意讲究这个RGB比例,只要取一个比较舒服的值就可以了。

要知道,用PS将一幅图转为灰度的时候要经过一段明显的计算时间。而我们在开发游戏的时候,需要追求的是速度。

43

主题

229

帖子

234

积分

中级会员

Rank: 3Rank: 3

积分
234
QQ
 楼主| 发表于 2006-9-10 21:54:00 | 显示全部楼层

Re:关于Soft Boy一文:《将RGB值转换为灰度值的简单算

十分统一楼上两位观点!

89

主题

4036

帖子

4132

积分

论坛元老

Rank: 8Rank: 8

积分
4132
发表于 2006-9-10 23:27:00 | 显示全部楼层

Re:关于Soft Boy一文:《将RGB值转换为灰度值的简单算

rgb-yuv的转化是有公式的。不是你的"实际测试"
Y就是亮度. Y=0.29 * r + 0.6 g + 0.11b

6

主题

390

帖子

400

积分

中级会员

Rank: 3Rank: 3

积分
400
发表于 2006-9-11 20:24:00 | 显示全部楼层

Re: Re:关于Soft Boy一文:《将RGB值转换为灰度值的简单

xpertsoft: Re:关于Soft Boy一文:《将RGB值转换为灰度值的简单算法》算法的意见

rgb-yuv的转化是有公式的。不是你的"实际测试"
Y就是亮度. Y=0.29 * r + 0.6 g + 0.11b

想起来图像处理这门课了……
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-25 10:10

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表