易码技术论坛

 找回密码
 加入易码
搜索
查看: 109836|回复: 1

[请教]256灰度转16灰度和单色的扩散算法

[复制链接]
发表于 2006-2-10 17:15:00 | 显示全部楼层
灰度化:
所谓灰度化,就是将彩色图象的每个想素用1个0---255的灰度值
来表示,数值越大,该点越亮,越小则越黑。
彩色图象的灰度化就是使三种颜色分量 R,G,B变成相同的值。具体而言可以采取下面的方法:
1,使RGB的值等于三个分量的最大值,即

R=G=B=MAX(R,G,B)

这样灰度化后的图象具有较高的亮度

2,使RGB的值等于三个分量的平均值,即

R=G=B=(R+G+B)/3

这样灰度化的方法使底图象处理后比较柔和

3,根据重要性或其他指标给R,G,B附不同的值,并使R,G,B等于它们的加权平均值,即:

R=G=B=(aR+bG+cB)/3

a,b,c是权。

人眼对绿色的敏感度最高,红色次之,对兰色的敏感度最低,因此,从符合人眼的视觉感受的角度出发,应使底劝值b>a>c,实验表明,a=30%,b=59%,c=11%时是一组比较合适的参数。

--------------------------------------------------------------------------------------------------------------

以下是256色灰度转16色的算法:

误差扩散法在数据处理中经常碰到, 尤其是用于图象处理中, 降低色彩的深度. 下面三张图, 图1 是 256 级灰度过度, 图 2 是简单的将图一按就近原则, 转换成了 16 级灰度. (直接把 8bit 灰度的后 4bit 砍掉) 图3 是将图 1 用误差扩散的方法转换成 16 级灰度.      


很明显, 同是 16 色, 但是图三的效果明显好于图二. 其原因是使用的误差扩散算法. 顾名思义, 误差扩散, 就是将色彩深度降低时, 将像素颜色的变化误差, 扩散开去. 这使得肉眼在观察图片的时候, 相邻的像素点集合整体的误差变小. 下面举一例来说明要容易理解的多:

在原256 级灰度图象上有一个点, 灰度值是 120 (0~255), 如果我们要将这张图转换成 16 级灰度, 最简单的方法是将每个像素点除以 16. 那么转换后的值就是 120/16=7.5 保留整数位后就是 7 . 这样转换后的值就有了 0.5 的误差. 最简单的误差扩散方法是将这 0.5 的误差放到这个点右边/下边的点上, 我们可以按 3:2:3 的比例把它分配到右边, 右下, 下边的点上. 即, 我们把右边和下边的点加上 (0.5*16)*3/8=3, 把右下的点加上 (0.5*16)*2/8=2. 这样处理完整个图形, 要比直接截尾的效果要好的多. 实际上, 3:2:3 的误差分配方案并不算好. 你还可以试试 7:3:5:1 的分法:

X 7
3 5 1  

或者 42 分:
  X 8 4  
2 4 8 4 2  
1 2 4 2 1  

当然也不一定复杂的 Filter 就一定效果更好, 还是要视图象而定.
我觉得这个方法很容易理解, 就不多写了, 可以将其很容易的扩展到彩色图象的处理. (只需要将颜色分成 R G B 三色素) 另外, 不光是图象处理, 这个算法在别的一些数据处理中也常用到.
13134_32643_5404.png
 楼主| 发表于 2006-2-6 17:22:12 | 显示全部楼层 |阅读模式
目前只知道彩色转256灰度的算法,想找关于256灰度转16灰度和单色的算法。
试过用阀值,不过色阶之间的过渡很差。
想知道256灰度转16灰度和单色的扩散算法是怎么样的。
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2025-6-16 10:06 , Processed in 0.015501 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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