今天在维普下载了一篇SPIHT算法改进的论文,(耿兴云,《基于改进SPIHT的静态图像编码》,电脑知识与技术:学术交流-2007年5期),我根据该文提出的改进算法,用Matlab来实现,却发现改进算法的程序运行速度比原算法还要慢,希望有兴趣的朋友进来看看,评论一下原因。文章指出SPIHT 算法有两个缺点:
(1)忽略了基于同频带内相邻小波系数值往往相近的兄弟相关性。SPIHT算法中采用的零树结构依然存在一些冗余信息,因为对于每个量化门限,尤其是初始门限,最低频子带内的所有系数都被编码。至少需输出每点的像素信息和集合信息.即对所有根节点的系数都进行独立编码。
(2)最低频子带系数并非同时都是重要的,SPIHT中,当排序扫描过程利用集合链表LIP和LIS确定小波系数重要性时.仅有一小部分比特用于编码重要信息.尤其在低比特率下:必然导致恢复图像质量的下降。
于是作者就引入提升小波变换、重新定义零树结构、改进扫描编码顺序,利用了LZC算法的状态位图思想,具体方法是:
(1)兄弟相关性的假设
在父节点系数值一般大于子节点系数值的同时,兄弟节点系数值又往往相近,这种由树结构体现的父子相关性和兄弟相关性是小波变换域内的两种主要相关性。基于同频带内相邻小波系数值往往相近的兄弟相关性,作者提出Shapiro假设外的另一个假设,即在最低频子带中一个系数相对于门限T是不重要的,则其邻近的系数相对于门限T也是不重要的。
(2)重新定义零树结构
其实就是把SPIHT零树结构改回采用EZW算法的零树结构。SPIHT算法中LL_N是没有孩子的,这篇文章沿用了SPIHT算法关于C(i,j)、D (i,j)和L(i,j)的定义,不同在于O(i,j)的定义,在改进零树中所有具有直接后续的节点(i,j)的孩子集合O(i,j)定义如下:
若(i,j)=C(0,0),则O(i,j)={(0,1)(1,0),(1,1)};
若(i,j)≠C(0,0),则O(i,j)={(2i,2j)(2i,2j+1),(2i+1,2j),(2i+1,2j+1)}。
(3)引入状态位图思想
采用位图FC、FD来分别表示系数C(i,j)和集合D(i,j)的重用性,同时增加D(i,j)的重要性,同时增加了位图FL来控制当前门限下子集是否进行编码。如果FL(i,j)=1,则D(i,j)或L(i,j)必须进行重要性判断;如果FL(i,j)=0,表示D(i,j)和L(i,j)不必进行重要性判断或已经在前一个门限判断过了。位图FC(i,j)的大小与原图像大小相同,而FD、FL的大小仅为原图像大小的1/4,即图像一级分解LL_1 的区域。
改进算法步骤(原文步骤有误,且印刷也有出错,我把自己改动的地方用红色标示出来):
(1) 初始化,输出 n=floor(log2(max{|C(i,j)|})).清空状态矩阵FC、FD和FL,并初始化FL(O,0)=1。
(2) 对系数C(0,0)单独编码
(a) 如果FC(0,0)=1,输出C(0,0)的第n个比特位;
(b) 否则,输出Sn(C(0,0)),如果Sn(C(0,0))=1
① 输出C(0,0)的符号位;
② 置FC(0,0)=1;
(3) 扫描FD,如果FD(i,j)=1,则对每个(k,l)∈O(i,j)
(a) 如果FC(k,l)=1,输出C(k,1)的第n层比特位;
(b) 否则,输出Sn(C(k,l)),如果Sn(C(k,l))=1
① 输出C(k,l)的符号位
② 置FC(k,l)=1;
(4)扫描FL,如果FL(i,j)=1
(a)如果FD(i,j)=O,输出Sn(D(i,j)),如果Sn(D(i,j))=1
① 置FD(i,j)=1;
② 对每个(k,l)∈O(i,j),输出Sn(C(k,l)),如果Sn(C(k,l))=1,输出C(k,l)的符号位并置FC(k,l)=1;
% ③ 如果L(i,j)是空集,置FL(i,j)=0,否则转而执行(b)。
% (b)如果FD(i,j)=O,输出Sn(L(i,j)),如果Sn(L(i,j))=1
%(蓝色标记的是原文算法步骤可能错误的地方,我修改如下)
③ 如果L(i,j)是空集,置FL(i,j)=0,
否则输出Sn(L(i,j)),如果Sn(L(i,j))=1:
① 置FL(i,j)=l
② 对每个(k,L)∈O(i,j),置FL(i,j)=1;
(5)量化步长;更新n=n-1,转(2)。
分享到:
相关推荐
基于分形与SPIHT算法的图像压缩技术研究
多级树集合分裂(SPIHT)算法的过程详解与Matlab实现实例演示
小波变换,SPIHT编码,压缩效率比较高
这是一个很好的源代码,它是在linux平台下编程,主要是实现SPIHT算法,有极大的参考价值,对于图像压缩算法的初学者来说,很有帮助,欢迎大家下载。
在matlab中实现了对SPIHT算法的编写
本代码为MATLAB代码,是经典的图像压缩算法SPIHT算法的完整实现。包含了该算法的全过程,能正常运行。
这是在linux平台下实现的spiht算法,对于初学者很有帮助,欢迎大家下载
matlab开发-SPIHT算法图像压缩。在所有情况下,用于开发SPIHT算法的matlab程序都必须比jpeg版本好得多。
标准的SPIHT无损压缩算法,便于改进!
基于小波变换的静态图像压缩,小波变换、图像压缩、分层小波树集合分割算法、SPIHT。图像经过离散余弦变换(DCT)或者小波变换之后,得到的DCT系数或小波系数需要进行组织分配,从而达到压缩的目的。然后采用编码...
基于改进的SPIHT图像压缩算法,胡晖,卢珏,针对SPIHT算法中的零树结构以及分集判断规则所产生的冗余对编码效果的影响,本文提出了一种改进算法。通过改变原算法的初始化步骤�
基于小波变换的图像压缩SPIHT算法的matlab实现程序
3.内容:基于状态表STS-SPIHT的图像压缩算法matlab仿真 4.运行注意事项:注意MATLAB左侧当前文件夹路径,必须是程序所在文件夹位置,具体可以参考视频录。 5.适用人群:本硕博等科研学习参考使用。
用matlab实现spiht的算法,具有很好的参考意义,能够直接用于自己的系统。
基于SPIHT经典编码算法,实现了图像ROI的编码压缩,并评价性能
vc++实现spiht算法(采用的是97小波)是毕设的内容
1.版本:matlab2019a,不会运行可私信 2.领域:【图像压缩】 3.内容:基于SPIHT算法实现图像压缩附matlab代码.zip 4.适合人群:本科,硕士等教研学习使用
实现SPIHT算法!!!!使用MATLAB 实现程序