SPIHT算法
基于分层树的集合划分算法(Set Partitioning inHierarchical Trees,SPIHT)改进了内嵌零树编码算法(EZW)。在对图像进行小波变换后,它更有效地利用了不同尺度子带重要系数间的相似性。它呈现出良好的特性:不依赖傅立叶变换而在空间域中构造小波;较高的PSNR(Peak Signal Noise Ratio,峰值信噪比)保证了良好的重现图像质量;整数运算利于实现实时快速编解码和网络传输;图像码流的逐渐呈现便于用户上网检索感兴趣的图像。
SPIHT算法对图像信息采用如下的编码步骤。
首先,定义三个队列:不显著性系数队列LIP,显著性系数队列LSP和不显著性集合队列LIS。
设,O(i,j)表示节点(i,j)的直接节点的集合;D(i,j)表示节点(i,j)的子节点集合;L(i,j)表示子节点中排除直接节点后的集合。
在队列中,每个元素由一个坐标唯一识别,它在LIP和LSP中代表孤立系数(无子节点的根节点),在LIS中代表第一类元素的D(i,j)或者第二类元素的L(i,j)。
对某个阈值T进行显著性测试。将大于T的元素移入LSP,并在LIP队列中移除该元素。对LIS也进行同样的测试,将显著的元素移入LSP,其他的再进行树的分裂。
用类C++语言描述的SPIHT算法如下:
第一步,阈值T和三个队列(LSP、LIS和LIP)初始化。
的坐标;
(2)if(x,y)是第二类元素,对L(i,j)进行显著性测试
if(L(i,j))==1 all(k,l)∈O(i,j)作为第一类元素移入LIS,从LIS出队。
第三步,比特传输/存储。将LSP中的每个系数转化成二进制传输/存储。
第四步,阈值更新并转至第二步:T/=2;gotostep2。
提升方案与第二代小波
提升方法构造小波分为分裂、预测和更新三个步骤。
1) 分裂(split)
将一原始信号序列Sj按偶数和奇数序号分成两个较小的、互不相交的小波子集Sj-1和dj-1:
2) 预测(predict)
由于数据间存在相关性,因而可以定义一个预测算子P,使dj-1=P(Sj-1),这样可用相邻的偶数序列来预测奇数序列。若用dj-1与P(Sj-1)的差值代替dj-1,则其数据量要比原始dj-1小得多。
最简单的情况下,取两个相邻偶数序号所在数据的均值作为它们间奇数序号所在数据的预测值。即,
编/解码方案
本文中前端采用第二代小波(lifting wavelet),接着对小波系数采用SPIHT算法,然后,采用Amir Said的自适应算术编码。