SPHIT 编码
图像在经过小波变换和量化后,还未实现真正意义上的数据量的压缩。因此,需要通过 SPHIT 编码算法对小波系数进行编码压缩。对图像的编码方式有很多,这些编码包括:游程编码、huffman编码以及算数编码等等。
对系数矩阵进行了二维提升小波变换后,小波系数有了空间上的特殊结构,这种特殊的结构称为零树结构。
根据这种零树结构提出了一种经典的编码方法嵌入式零树小波压缩编码方法(EWZ)。利用 EWZ 方法进行图像压缩时,首先,传递图像中的重要像素点的位置以及像素点的符号;其次,对不重要的小波系数的位置进行编码处理,这种编码处理利用到了二维提升小波变换后的系数在不同尺度之间的自相似性;最后,利用连续逼近的方法求出有效的二维提升小波变换系数的值。
SPIHT 算法编码(set partitioning in hierarchical trees)即多级树集合分裂编码。
SPIHT 算法的主要思想是利用给定的阈值与小波系数集合中的每个系数进行比较,如果值大于阈值,则输出一个二进制的数字作为该系数重要性的标志;这个二进制的标志位就是对图像系数进行编码后所生成的码流。当把所有的小波变换的系数值遍历完以后将阈值减半,再进行扫描小波系数集合,与更新的阈值对比,然后输出相应的图像压缩码流,直到阈值变为 1。
该算法基于嵌入式零树小波变换编码思想,以 EZW 算法的零树结构为基础,将某树节点及其所有后继节点规划为同一集合,创建 LSP、LIP 和 LIS 三个表项,并采用适当的集合分割排序策略,通过初始化、排序过程、细化过程和量化步长更新这四个子过程完成嵌入式编码。
SPIHT 编码是一种渐进的对于不重要的系数集合不断的进行分裂,同时空间方向树也在不断变化的过程,这种过程可以使误差逐渐减小。
除最左上角的 LLn 和高频 HL1、HH1、LH1 没有孩子节点外,其余像素 (,) 都有四个孩子节点。
(,) 为像素 (,) 的所有直接后代,像素 a 的 (, )为空集合,像素 b 的 (,) 为{b1,b2,b3,b4}。
(, ) 为像素 (, ) 的所有后代,像素 b的 (, ) 为{b1,
b2,b3,b4,b11,b12,b13,b14,b21,b22,b23,b24,b31,b32,b33,
b34,b41,b42,b43,b44}。
为所有空间树结构的根节点,即整个子带 LL2。
(,) 为像素 (, ) 的所有间接后代,即 (, ) = (, ) − (,) 。
像素 b 的 (,) 为{ b11,b12,b13,b14,b21,b22,b23,b24,
b31,b32,b33,b34,b41,b42,b43,b44}。
首先,初始状态的切割就是 中所有根节点 (,) 以及他们的 (, )所有后代。其次,如
果 n((, )) = 1,则将(, )所有
后代 切割为 (,) 所有间接后代和四个单独的节点 (,) ,其中(,)属于所有直接后代(,)。最后,如果 n((,)) = 1 ,则将所有间接后代 (,) 再切割为四个(,),其中(, )就是 (,) 所有直接后代中的四个节点。
SPHIT 算法利用空间方向树来制定划分子集的集合分割规则,使用了 3 个链表来组织空间方向树中的结构:
(1)重要像素链表(LSP)(List of Significant Pixels);
(2)不重要像素链表(LIP)(List of Insignificant Pixels);
(3)不重要集合链表(LIS)(List of Insignificant Sets);
在 LSP 和 LIP 中每一个 (, ) 都代表一个像素,但是在 LIS 中 (, ) 代表的可能是一个所有后代(,)集合(称之为 type A)或 所有间接后代(, ) 集合(称之为 type B)。
(1) 初始化
(2) 排序
第一步:处理 LIP 表中的每一个节点。
第二步:处理 LIS 表中的每一个节点。
(3) 细化
如果对于 LSP 表中的每一个节点(,)它不是在最近的一次排序中才加入的,那就输出这个节点(, )的系数,绝对值的第 n 个 MSB(Most Significant Bit)。
(4) 更新
若 n=0,则退出扫描;否则 n-1,并转移回步骤(2),进行下一轮扫描。
上述过程为 SPIHT 编码算法的全过程。初始化是对阈值与三个表项赋初值,排序过程是对 LIP 和 LIS 表中的重要系数进行判断并将重要系数放入 LSP 的过程,细化是将重要系数输出的过程,最后更新步长。
最后,对 LSP 中的值进行编码,将每个值变换成二进制,然后取其第 n 位为
编码值,其中
式中,T 表示阈值。例如 LSP 中有重要像素值(30)=(00011110),阈值取 8,则取
n =3 ,则将其第三位 1 作为编码值。
对所有的 LIP、LIS 以及 LSP 中的值编码完毕后,将阈值减小一倍,再进行依
次编码,直到阈值变为 1,则编码完毕。编码后的码流包含图像的所有信息,通过
编码的逆过程、二维提升小波变换的逆过程便可以将压缩的图像恢复出来。
参考文献:
基于FPGA实时图像压缩算法的实现——付雷
基于 FPGA 的高帧频图像实时准无损压缩算法研究——王国庆