基于增量序列的调色板索引匹配算法
2009-09-10
作者:彭玉忠 陈 勤
摘 要: 生成带调色板的图像文件时,需要解决调色板索引匹配的问题。针对该问题,本文提出了一种增量序列的产生方法,并基于这种序列,给出了一种调色板索引匹配算法。
关键词: 增量序列 调色板 索引值 匹配算法
图像处理时,经常需要生成带有调色板的图像文件。各种类型的图像文件一般采用压缩存储方式,解压后彩色图像数据可表示为三基色的灰度值。图像数据在转换为带调色板的图像文件时,如果所占用的颜色空间小于调色板所能表示的颜色数目,则可以实现无失真的转换;如果图像数据的颜色空间大于调色板数目,则转换过程需要舍弃部分颜色。为了使图像达到较高的保真度,应将舍弃的颜色转换为调色板中与之最相近的颜色。为此,本文提出了一种基于增量序列的调色板索引匹配算法。
1 知识描述
BMP图像文件是一种常用的图像格式,图像数据可采用压缩、非压缩2种方式存放,较多采用非压缩方式。BMP图像文件由三部分组成:文件头、调色板数据和索引数据。调色板数据对不超过256色的图像模式都要进行设置。调色板中红、绿、蓝三种基色数据的排列顺序与其他图像文件格式相反。对256色非压缩方式而言,调色板由256项组成,每项代表一种颜色,其索引编号从0~255,图像数据为象素点的索引。
图像数据生成带调色板的图像时,如果图像数据的颜色空间超过调色板空间,则会出现一些调色板中没有的颜色。此时,可采用匹配算法,在调色板中找出与该颜色最接近的颜色索引。在匹配过程中按递增顺序修改该颜色灰度值,以找到最佳匹配项,并使该颜色灰度值的修改尽量小。匹配过程所用的增量序列满足以下3个基本条件。
(1)整体有序。因为图像变换要求基本维持原图像的效果,所以大部分象素灰度值与调色板中某颜色的灰度值之差较小。匹配从最小项开始,可以较快找到对应索引,加快匹配速度。
(2)无重复项。有重复项时,会延长匹配时间,但不影响匹配结果。
(3)在给定差值范围内包含所有组合。缺少某些组合,会使一些象素找不到对应索引而采用其他方法,例如使用前一个象素的索引。如果这种象素比较多,会使生成的图像质量受到影响。
2 增量序列的产生方法
颜色分量最大绝对值为1(limit=1)时的序列如表1所示。
从部分结果来看,序列满足以下3个基本条件。
(1)limit的限定,使产生的增量序列整体有序。
(2)由于限定新产生的项,至少包含一个分量为limit或-limit,所以,不产生重复项。
(3)除了缺少(0、0、0)项外,序列包含了绝对值小于33的所有组合,共有274624项,与65×65×65=274625差1。
由于匹配结果直接影响图像质量,因此,序列中的分量变化范围不能太大,本文选择最大绝对值为32。如果匹配过程用完整个序列仍不能找到匹配的颜色,则可用其他方法获得索引,如用前一个象素的索引代替。实验结果表明,以这种方式处理,图像效果比最大绝对值为64时要好。
3 基于增量序列的调色板索引匹配算法
匹配算法中,待匹配颜色与调色板中的颜色逐个比较,若找到相同颜色,则保存该颜色的索引值,否则根据增量项修正待匹配的颜色值,重新与调色板中的颜色进行匹配,直至找到相同颜色或匹配完所有象素。
匹配算法的具体描述如下:
Step1:增量序列当前指针置0;
Step2:如有未匹配象素,读取一个待匹配象素颜色值(B0,G0,R0),否则转Step6;
Step3:扫描调色板,如果找到匹配颜色,则保存其索引值,转Step1,否则继续下一步;
Step4:若增量序列未结束,则从指针位置取一增量项(y1,y2,y3),否则,取前一象素的索引作为当前象素的匹配结果,转Step1;
Step5:求出修正后的待匹配颜色(B,G,R)=(B0+y1,G0+y2,R0+y3),转Step3;
Step6:输出图像文件,结束。
由于灰度值有确定的范围,所以,Step5中要对修正后的待匹配颜色灰度值作出限制。当原灰度值为正且增量为负时,若得到的灰度值为负值,应设灰度值为0,否则负灰度值将识别为较大的正值,与原值产生很大的误差,不能保证最佳匹配效果;若灰度值大于255,应设为255,否则计算机舍弃最高位,也会产生较大的误差。
增量序列与匹配过程的结合可以采用多任务方式或文件方式来实现。采用多任务方式时,由一个任务产生增量序列,并通过消息发送给匹配过程。匹配过程根据收到的增量项,产生用于匹配的新颜色,并进行匹配。采用文件方式时,用一个过程将增量序列写入文件,匹配过程每次从文件中读取一项进行匹配,这种方式的优点在于可一次性生成存储增量序列的文件,不必每次匹配都重新生成该文件。
4 实验结果
利用增量序列对几幅标准图像进行匹配,给出了象素匹配的结果。实验如下:选择一个256色BMP图像文件,生成三种基色的灰度值矩阵;每个矩阵做8×8分块DCT变换,将每一子块的部分交流系数置0后,做IDCT反变换,重新得到三种基色的灰度值矩阵;对全部象素查找调色板,找出最佳匹配项,生成文件。
将子块3个最高频系数置0的结果如表2所示;将子块10个最高频系数置0的结果如表3所示。表中的序列号与序列的最大绝对值有关,将最大绝对值分为9类:0、1、2、3、4、5、6~10、11~20、21~32,分别对应表中前9行,每行数字为使用增量序列各序号范围的象素数,DiffNum为图像匹配前后索引不同的象素数,百分比为DiffNum占整个图像象素数的比例。
从实验结果可以看出,变换前后图像象素索引差别很小,不到1%,2幅图像看不出明显区别,这表明索引匹配算法的匹配效果良好。
5 结束语
本文给出的增量序列与匹配过程进行有机结合,可以对图像数据进行很好的匹配,匹配后的图像能够达到较好的效果。当图像数据颜色与调色板颜色整体相差较大时,可以先调整调色板数据,再进行匹配。
参考文献
1 王峰,王向阳,杨红颖.Windows环境下的逻辑调色板及其应用.计算机工程;1999;25(4)
2 董韬,陆宗骐.C++ Builder环境下调色板的使用.现代计算机,2001;(4)
3 张憬,刘云超,陈一民等.基于DCT变换的图像中的数据隐藏技术及理论.计算机工程,2000;26(12)
4 夏德深,傅德胜.现代图像处理技术与应用.南京:东南大学出版社,2001
5 晶臣工作室.最流行图像格式实用参考手册.北京:电子工业出版社,1998
6 汪小帆,戴跃伟,茅耀斌.信息隐藏技术方法与应用.北京:机械工业出版社,2001