李卓凡
(韩山师范学院,潮州 521041)
随着卫星遥感技术的发展和用户对分辨率要求的不断提高,遥感卫星获取的图像分辨率越来越高,图像信息量迅速增长,图像信息必须经过压缩,才能进行高效的存储和传输。因此数据压缩技术是遥感技术急需解决的关键技术之一。遥感图像相关性弱、纹理细节丰富、信息量大,而小波分析具有良好的时频局域性和多分辨率分析能力以及较强的去相关能力,因此基于小波变换的压缩算法占据了遥感图像压缩的主导地位。
小波变换的最大特点是具有频率上的自由伸缩性,当信号带宽较窄时,可通过缩小的方法,使得刻画精细。当信号带宽较宽时,可通过放大使其描述满足需要精度。因此小波变换不受图像带宽的约束,适用性强。图像经过小波变换后,大部分能量都集中在最低频的子图像里。小波系数的分布特点是越往低频子带系数值越大,包含图像信息越多,越往高频子带系数值越小,包含的图像信息越少。而基于小波变换的SPIHT(Set Partitioning in Hierarchical Trees)算法[1-2],是一种嵌入式的编码,它充分挖掘了小波图像不同子带之间的相似性,能支持解码器的多码率解码,有利于图像的渐近传输。因此SPIHT算法仍是当前图像压缩编码的研究热点之一。但是该算法未能充分利用小波系数的特点,运算时间长,压缩编码存在比较大的冗余,在压缩比率较大时,图像的重构质量不高。本文从遥感图像的特点出发,对SPIHT算法进行改进,提高重构图像质量。
遥感图像的纹理丰富,图像上既有细节信息又有大量的均匀区域,图像的动态范围大。图像的纹理信息多分布于高频子带,而均匀区域多分布在低频子带。SPIHT算法中低频子带和高频子带是作为一个整体来确定阈值的,但是图像经过小波变换后,低频子带的小波系数集中了图像主要的能量,低频分量系数比高频分量系数通常要高好几个数量级,这样SPIHT算法在前面几个层次的大阈值扫描中,由于高频分量的系数较小,从而导致在扫描LIP、LIS链表时,大部分编码的码值为0,对不重要系数进行重复扫描,不但耗费时间,而且压缩效率不高,重构图像质量差,特别是在大压缩比的情况下,图像质量更为糟糕。而对于纹理细节丰富的遥感图像,这种算法会丢失大量的细节信息,编码效率不高。
实验选用了LENA图像和7幅不同的遥感图像:map1(城市建筑)、map2(城市建筑)、map3(海域和建筑)、map4(山峰和森林)、map5(水域和农田)、map6(水域和山峰)、map7(建筑和农田)进行测试。首先对8幅图像低频子带的能量进行了计算,表1是低频子带占图像总能量的比值。从数据中可以看出,低频子带包含了图像的绝大部分能量。改进算法将低频分量单独切割出来进行编码,以避免编码高频分量时产生大量的零编码,这样可以增加SAQ[4]的次数,提高重构图像的质量。低频集中了图像的大部分信息,在编码时,对于低频子带采用WNC算术编码[3]进行无损压缩。由于D9/7小波基[5-6]的能量集中性好,改进的算法对图像采用D9/7整数提升小波进行5级分解(见表1)。
表1 低频子带能量比
低频子带进行WNC算术编码时,为保证压缩效率损失最小,初始化编码区间R[L,H)应该尽量大,至少要超过最大频率T,才能区分所有可能的符号。用b比特精度整数表示L和R,每个符号的频率用f比特的整数表示,频率T≤2f。每次编码前必须保证2b-2<R≤2b-1,因此f≤b-2。本算法采用自适应编码,每个符号的初始频率都为1。在编码过程中必须不断重新正规化,保证R足够大,伪代码如下:
遥感图像相关性弱、纹理细节丰富、信息量大。图像经过小波变换以后,细节信息主要集中在高频子带中。但是SPIHT算法的编码效率并不高,编码中存在冗余,针对高频部分将作下面三个方面的改进。
首先,在主扫描过程中,由于每个层次的扫描都编码LIP、LIS、LSP链表,编码结果中会出现大量的零编码,这是由于高频成分中大部分的系数都很小,只有少数系数是大系数,因此导致初始阈值太大,产生大量的零编码。这种现象在增大压缩比的情况下,会导致图像重建质量的明显下降。由于低频子带已经分割出来独立编码,改进算法中引入最大阈值表,即编码前把高频分量分为几个集合,找出每个集合的最大值 Mi,计算 Ni=log2(max|Mi|)」,把Ni按扫描的先后顺序排列起来,建立一个最大阈值表。最大阈值表中的每个数值对应的集合是:HLN、LHN、HHN,以及LIS表中每一个子集为一个集合。改进算法对原算法中定义的三个集合中的LIP进行修改。定义LIP为除了低频分量LLN之外的所有树根组成的集合,即只包括HLN、LHN、HHN。每次更新阈值后,进行扫描之前,将当前阈值与最大阈值表中的阈值一一进行比较,如果当前阈值小于最大阈值表中的阈值,则对该阈值对应的树进行扫描,并根据需要分割子节点;否则,不进行扫描。算法改进以后,在每一层扫描中,对于LIP、LIS链表中的不重要系数,系统不会进行扫描,不对其进行编码,从而减少了对不重要系数编码造成的冗余。在压缩码率相同的情况下,改进以后压缩编码所携带的信息量更多,重构图像的质量更好,提高了图像的信噪比。
其次,对LIS链表的扫描进行改进。利用D(i,j),O(i,j),L(i,j)三者之间的逻辑关系,对算法进行改进,减少编码冗余,节省输出的位数,提高编码效率。
第三,在SPIHT编码完成后,输出编码还存在冗余,对输出的码流再进行游程算术编码,可以再次消除冗余,提高压缩率。
改进算法增加了两个符号S(i,j)和M,其定义分别为节点(i,j)所有非直系子孙的集合(不包括孩子,且孩子是不重要的)和最大阈值表。
上述改进算法在 MATLAB7.0[7]的环境下进行程序设计和数值分析,图像采用256×256的测试图像Lena(以下把它命名为map8)和7幅遥感图像进行实验。表2为原算法8倍压缩时与改进算法的性能对比表,表3为原算法16倍压缩时与改进算法的性能对比表。从表1、表2的实验数据上可以看出,改进算法在纹理比较复杂的遥感图像重构中,MSE、PSNR、运算时间、压缩倍率几个方面均明显优于原算法,特别是压缩倍率较高时,如16倍压缩,图像的PSNR提高更为显著,视觉效果上的优势也能体现出来。图1中,改进算法map8(Lena)的图像效果比较细腻,原算法的重构图像较粗糙,出现一些水平和垂直方向的噪声线条。图2中,改进算法的重构图像中,船只行驶过的轨迹(见图中白色方框所示)还能看到,但是原算法中这个细节就丢失了。图3中,改进算法中,重构图像中海洋中央的两只船只(见图中白色方框所示)还清晰可见,但原算法中,这个细节部分也丢失了。可见,改进算法是优于原算法的,它保留了更多细节,图像效果更平滑。
表2 两种算法性能比较,压缩比率8∶1
表3 两种算法性能比较,压缩比率16∶1
改进算法中引入了最大阈值表,而且充分利用了父子孙各个子集之间的逻辑关系,所以减少了对不重要系数的多次重复扫描,使算法运行效率提高;输出编码中零编码的数量减少了,从而增加了SAQ的次数,即增加了小阈值的扫描次数,使压缩编码中包含更多的代表图像细节的高频分量,图像的PSNR提高了,重构图像质量和视觉效果也都得到了很大提高。改进算法程序的运算时间也明显缩短了。由于数据在最后还进行了游程算术编码,压缩率也有所提高。因此改进算法是适合于纹理复杂的遥感图像压缩的,相对于原算法压缩性能均有很大的提高。
[1]孙延奎.小波分析及其应用[M].北京:机械工业出版社,2005(3):128-135.
[2]马平.数字图像处理和压缩[M].北京:电子工业出版社,2007(4):162-187.
[3]Ian H Witten,Radford M Neal,John G Cleary.Arithmetic Coding for Data Compression[J].Communications of the ACM,1987,30(6):520-541.
[4]ShapiroJ M.Embedded image coding using zerotrees of wavelet coefficients[J].IEEE Transactions on Signal Processing,1993,41(12):3445.
[5]赫华颖,陆书宁.几种小波基在遥感图像压缩中的应用效果比较[J].国土资源遥感,2008(9):27-31.
[6]柯丽,黄廉卿.适于遥感图像实时压缩的小波基的选择[J].光学技术,2005(1):77-83.
[7]周伟.MATLAB小波分析高级技术[M].西安:西安电子科技大学出版社,2005-12.
[8]韩明臣,李小平.SPIHT嵌入式编码算法在图像压缩中的应用[J].电子科技,2007(7):58-61.
[9]秦琴,滕奇志,罗代升,余艳梅,吴晓红.一种改进的SPIHT图像编码算法[J].四川大学学报,2007(6):525-529.