VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)
首页 - 经验之谈 - 抖动算法
发表评论(0)作者:不详, 平台:VB6.0+Win98, 阅读:15448, 日期:2001-11-03
抖动算法
利用仅能显示少数彩色的设备显示含有丰富颜色信息图像的令一种非常有用的方法是抖动(dithering)。近年来抖动技术受到了比较广泛的重视,它可以较好地解决颜色压缩及压缩后颜色失真的问题。这里我们介绍两种在屏幕上显示图像效果较好的抖动方法—Bayer抖动和WING抖动。
1.Bayer抖动
Bayer抖动是有序抖动方法中的一种,有序抖动的基本原理如下:
设V为输出像素值,C为输入像素值,d(x,y)为m×m矩阵,则抖动过程可用下式表示
V(x,y)= 1 当C(x,y)>d(x,y) ;0 当C(x,y)≤d(x,y)
其中d(x,y)被称为抖动矩阵,
d(x,y)=M[y mod m][x mod m]
下面的矩阵是抖动矩阵的一种形式,这种抖动方法称为Bayer抖动
0 32 8 40 2 34 10 42
48 16 56 24 50 18 58 26
12 44 4 36 14 46 6 38
60 28 52 20 62 30 54 22
3 35 11 43 1 33 9 41
51 19 59 2 749 17 57 25
15 47 7 39 13 45 5 37
63 31 55 23 61 29 53 21
2. WinG抖动
WinG是 Windows 3. l, Windows 95, Windows NT设计的一种优化的高性能图形库,运行于386以上的处理器。程序员可以直接将内存中的设备无关位图拷贝到屏幕上,并且提供抖动API,利用标准Microsoft抖动调色板来支持对真彩色的仿真。
抖动调色板是一个对等调色板,其中包含的颜色是经过精心挑选的,并且进行了优化,使得8位设备上通过抖动模拟真彩色。WinG图形库提供两个支持抖动的API: WinG Create Halftone Palette和 WinG Create Halftone Brush 来实现仿真。
抖动调色板为应用程序提供了24位图像抖动到8位设备上的一个框架。256色的抖动调色板包含20种静态色和一系列灰度值。
给定一个24位的RGB颜色,可按下式计算出抖动调色板中最接近的颜色索引值
HalftoneIndex=(Red/51)+(Green/51)*6 +(Blue/51)* 36;
HalftoneColorIndex=aWinGHalftoneTranslantion[HalftoneIndex];
AwinGhalftoneTranslation矢量可在HALTONE源程序中找到。
通过对24位彩色到8位彩色各种算法的分析与实验,可以看出无论是统计算法,中位切分算法,固定调色板算法还是抖动算法,都有其优缺点。当面对一幅需要进行色彩显示模式转换的图像时,我们应该区别对待,从这几种算法中选择一种适合的算法,以期达到较好的效果。
一般来说,抖动算法的效果较好,这几年抖动算法受到了极大的重视。在一些游戏软件中几乎都应用了抖动算法来将24位图像转换为8位彩色图像,通过转换降低了存储量的开支,大幅度地提高了显示效率,使原来一些只能在DOS下运行的游戏移植到了WINDOWS 中。这就大大改善了游戏的质量。
对于统计算法来说,它适合应用在彩色数量少的图像中,而对彩色数量大的图像则不适合。对于彩色数量大的图像可以采用固定调色板算法。
总之,在对一幅图像进行色彩压缩转换时要综合考虑各因素,如色彩分布,转换过程运行速度等各方面的因素,以期获得最佳效果。
在搜索引擎中可以找到很多网址:
如:
http://www.lighteyes.net/subject/currciulum/c/c2.htm