`
womendu
  • 浏览: 1482246 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

讨论:一种基于状态位图的SPIHT算法(1)

阅读更多


今天在维普下载了一篇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)。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics