- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
零树编码算法小波系数
零树编码算法
一零树编码算法的基本思想
众所周知,小波系数的能量集中程度越高,需要编码的系数越少,编码所需的比特数就越少,所以小波压缩都是利用变换分解后的图象能量分布集中这一特性来编码的。小波系数的能量集中程度对图象编码非常重要,而不同层次上,相同空间滤波方向上的小波系数之间的相关性也非常重要。零树编码的基本思想就是基于这种相关性。
经过小波变换后的图象被分解成若干个子频带,其中子带HH是低频分量,是原始图象的平滑版本,子带HL是水平方向上的高频,垂直方向上的低频分量;子带LH是垂直方向上的高频,水平方向的低频分量;子带HH是高频分量,揭示了原始图象在斜方向的边缘信息。
为了提高对小波系数的压缩性能,Jerome M. Shapiro提出了一种新的数据结构零树(zerotree),如果小波系数x的绝对值小于给定的阈值T,则此系数是可以忽略的。零树的方法是基于这样一个假设:如果在较粗的级别上,一个小波系数是小于阈值,可以忽略的,则所有在相同方向,相同位置的更高的级别上的系数也基本上是可以忽略不记的。经验证明这个假设通常是正确的。更特殊的情况下,在一个多级的子带系统里,除了最高频的子带之外,在每一级别的每个系数都是和该系数在更高的级别相同方位的系数集合相对应的,我们把在较粗的级别上的系数叫做父亲,而在所有在更高的级别上相应位置的系数都叫做后代,同样的,对于任一给定的后代,在更粗的级别上相同方位上对应的系数叫做祖先。
对于一个QMF-金字塔算法的子带分解,如图所示,除了最低频的子带之外,所有的父亲结点都有4个儿子,而最低频的结点是有3个儿子。对系数的扫描顺序的原则是不可以有一个儿子结点是在它的父亲结点之前被扫描。对于一个N级的变换,扫描是先从最低频的子带开始的,这里记作LLn,然后扫描子带HLn,LHn,和HHn,然后扫描第n-1级的系数,以此类推。在金字塔分解中这种扫描模式的图示见下图,可以看到在一个给定的子带每个系数都是在下一个子带的对应系数之前被扫描的。
gggg
给定一个阈值T然后判断一个系数是否可以被忽略,如果一个系数x和它的所有后代都小于阈值,则这个系数x可以看作是零树的一个成员,一个零树的根指的是一个零树中的结点,但是它不是任何一个结点的后代,实践证明对于相同的阈值零树的根的分布并没有可预见性。偶们用一种特殊的记号给一个零树的根编码,则它的所有的后代的结点就都可以被忽略不记了。于是所有的系数都可以被归为3类来编码:1)零树的根,2)孤立的零结点,3)重要的点。当给最高级的系数编码时,由于已经没有后代,所以可以不用零树的记号而直接进行编码。
在实践中,偶们通常把系数分成4类:1)零树的根,2)孤立的零结点,3)正的重要系数,4)负的重要系数。这个小改进将有利于嵌入。
注意可能还存在着其它两种系数我们没有考虑,那就是“正的/负的
重要系数,但是后代是零树”,在实践中,这种系数点出现的比率很低,为了减少编码的数据量,通常不与考虑。
我的关于零树编码的算法的实现是用C++语言在VC6.0下实现的,所以在解释算法时,涉及到数据结构和算法的流程时,会一C++语言为例来说明零树编码算法的具体实现方法。
二零树的数据结构
在小波变换之后,得到的是每个原始图象的像素坐标对应的小波系数。
我们要把这些系数都定义成零树的结点,除了最低频的和最高频的结点之外,
每个结点都有四个子结点,父结点和子结点之间坐标的对应关系是:
父亲(x,y) 儿子(2x,2y), (2x+1,2y), (2x,2y+1), (2x+1,2y+1)
每个结点的内容包括该点的小波系数,该点的位置坐标,还有指向该结点四个儿子的指针。如下图所示
:
Coeff (x,y) Son[4]
具体用C++语言定义的数据机构如下:
typedef struct node *zerotree_pointer;
typedef struct node {
double coeff;
unsigned long x,y;
zerotree_pointer son[4];
};
假设图象经过N次分解,最低频分量最后只剩下一个系数,这个系数就被作为零树的根结点。零树的根结点和上面定义的结点稍有不同,零树的根结点的数据结构如下:
系数值 HL_son LH_son HH_son
具体用C++语言定义的数据机构如下:
struct root_node {
double root_coeff;
zerotree_pointer LH_son,HL_son,HH_son;
};
这样
文档评论(0)