探析基于固定特征长度的图像无损压缩研究
所谓无损压缩格式,是利用数据的统计冗余进行压缩,可完全恢复原始数据而不引起任何失真,但压缩率是受到数据统计冗余度的理论限制,一般为2:1到5:1.这类方法广泛用于文本数据,程序和特殊应用场合的图像数据(如指纹图像,医学图像等)的压缩。
摘要:本文将长度减半的二进制码流编码算法用于图像的无损压缩研究,采用固定特征长度对于经典测试图像进行无损压缩。测试结果表明,基于该算法对于连续相同的数据经过简单的编码就可以得到较为明显的压缩效果,其中测试图像R、G、B 越高Bit值部分的压缩效果越明显,对于整体的压缩效果也将更加明显,所以具有较好的应用价值。
关键词:无损压缩 固定特征长度 图像压缩
一、引言
图像压缩编码的主要任务是去掉各种冗余和不相干的信息。根据解码后的数据与原始数据是否一致,图像压缩方法可以分为无损压缩编码和有损压缩编码。常见的无损数据压缩有以下几种:字典编码(包括游长编码、LZW(Lempel-Ziv-Welch)编码等)、熵编码法(包括香农-范诺编码、哈夫曼编码、算术编码等)以及其他编码法[1-4]。
本文将长度减半的二进制码流编码算法用于图像的无损压缩,采用固定特征长度进行无损压缩,分析了基于该算法的压缩效率。
二、长度减半的二进制码流编码
长度减半的二进制码流编码简要流程[5]:
(1)统计数据中连续“0”的长度L0,以及连续“1”的长度L1,分别选择“0”和“1”合适的特征长度l0和l1。
(2)分别将大于等于特征长度l0和l1的L0和L1分别加上l0和l1,然后除以2,得到商Q0(Q1)和余数R0(R1),可知Q0编码为Q0个“0”,Q1编码为Q1个“1”。
(3)小于各自特征长度l0和l1的L0和L1不做编码处理,依然存储 L0个“0”和L1个“1”。
(4)按照原数据的顺序将商编码和未编码的存入商编码表。余数编码R0、R1存入余数编码表。
长度要比原始码字长度要短。而且,生成的商编码表Q内的码字连续“1”和连续“0”仍是交替出现的且有较长的长度,因此可以用上述算法对其进行二、三次及多次编码。
经统计,信源数据由189bit经一次编码后为126bit,经二次编码后为103bit,经三次编码后为100bit。
所以,基于该算法对于连续相同的数据经过简单的编码就可以得到较为明显的压缩效果。
三、固定特征长度的图像压缩
鉴于该算法的压缩效率较高[5],并且实现较为方便,本文将采用的是选取“1”和“0”的特征长度均为2,采用固定特征长度对图像进行无损压缩。
对于一副图像,每个像素分成R、G、B三原色,第n个像素的Rn、Gn、Bn值和第n+1个像素的Rn+1、Gn+1、Bn+1很可能是近似相等的`,基于图像这样一个特点,将该算法分别用到每一行的RGB数据上进行编码。如图3-1所示。
以一个像素为800*600、颜色深度为24bit的图片为例,依次取出R[7]- R[0]、G[7]- G[0]、B[7]- B[0],对于该行,分别将这24个长度为800bit的数据进行基于压缩。
压缩具体流程如图3-2所示,采用python脚本语言将其R[7]- R[0]、G[7]- G[0]、B[7]- B[0]数据分别取出,存为24个txt格式文件,用C语言进行长度减半的压缩操作。
对测试图像Pens、Pepper、Lenna、Boatscolor做了如上所述的压缩(如图3-3所示),其统计结果如表1所示。
由表1可以看出,图像的R、G、B,Bit值越高,压缩效果越明显。而相邻像素一般突变概率很小,像素高Bit值基本相同,为连续的“0”或 “1”,那么采用该算法进行多次压缩,必定可以获得良好的无损压缩效果。其中,Pepper的B信号的Bit:7的数据量大小为245352bit,实现了245352/480000=51%的压缩效率。可以得到这样的推论,对于每行的连续数据进行多次的压缩,图片R、G、B 高Bit值的压缩效果越明显,对于整体的压缩效果也将更加明显。
四、结语