第9章小波图像编码Word文件下载.docx
《第9章小波图像编码Word文件下载.docx》由会员分享,可在线阅读,更多相关《第9章小波图像编码Word文件下载.docx(15页珍藏版)》请在冰豆网上搜索。
9.1.4从子带编码到小波编码
在过去的年代里,人们做了许多的努力来改进滤波器组的设计和子带编码技术。
在小波编码(waveletcoding,WC)技术的旗号下,人们提出了许多与子带编码技术非常类似和密切相关的方法。
小波编码技术中的一个重要的问题是如何构造正交的小波基函数系列。
正交的小波基函数系列可以在连续的时间域中构造,但如何在离散的时间域中构造是一个现实问题。
在众多的研究者中,InridDaubechies在离散的时间域中构造小波基函数方面做出了杰出的贡献。
她于1988年[1]最先揭示了小波变换和滤波器组之间的内在关系:
离散时间滤波器(discrete-timefilters)或者正交镜像滤波器(quadraturemirrorfilter,QMF)可以被叠代,并在某一种匀称(regularity,可粗略理解为函数的平滑性)条件下可获得连续小波。
这是一个非常实际和极其有用的发现,意味着可使用有限冲击响应(finiteimpulseresponse,FIR)的离散时间滤波器来执行小波分解,使用相同的滤波器可重构小波分解之后的信号。
由此可见,早期开发的子带编码实际上是一种小波变换。
在Daubechies揭示小波变换和滤波器组之间的关系之前,在图像编码中小波技术并不流行。
从20世纪90年代开始,Cohen,Daubechies和Feauveau,简称为CDF,系统地开发了构造紧支持双正交小波(compactlysupportedbiorthogonalwavelets)的方法[2],以及其他学者提出的各种算法,使小波技术在图像编码中得到广泛的应用。
在构造小波和开发小波变换算法中,比利时成长的年轻学者WimSweldens在1994年的博士论文中首先提出了"
TheLiftingScheme"
[3][4],简称Lifting/lifting(提升法)。
该方法的基本思想是首先把信号分成偶数号样本和奇数号样本。
根据信号本身的相关性,奇数样本使用偶数样本进行预测,由预测丢失的信号叫做信号的细节信息,然后调整偶数样本以保存原始信号的粗糙信息和细节信息。
该方法保留了小波分析的特性(时间频率局部化和快速计算),通过放弃小波的平移和缩放,并且放弃用傅立叶分析来构造小波,从而解决了非无限信号或者非周期信号的小波和小波变换问题,也使计算速度得到很大的提高,因此被称为第二代小波(secondgenerationwavelets),现在也成为制定JPEG2000标准中小波部分的基础。
9.1.5小波分解图像方法
使用小波变换把图像分解成各种子带的方法有很多种。
例如,均匀分解(uniformdecomposition),非均匀分解(non-uniformdecomposition),八带分解(octave-banddecomposition)和小波包分解(wavelet-packetdecomposition),根据不同类型的图像选择不同小波的自适应小波分解(adaptivewaveletdecomposition)等。
其中,八带分解是使用最广泛的一种分解方法。
这种分解方法属于非均匀频带分割方法,它把低频部分分解成比较窄的频带,而对每一级分解的高频部分不再进一步分解。
图9—4表示Lena图像的数据分解。
9.2失真的度量方法?
?
在图像编码系统中,评估编码系统性能的一种方法是失真度量法,用峰值信号噪声比(peaksignaltOnoiseratio,PSNR)来衡量,定义为最大像素值与均方差(meansquareerror,MSE)之比(5),
对8位二进制图像,
其中,
其中,x(m,”)为原始图像的像素值,;
(m,”)为解压缩之后的像素值。
在文献中,评估编码系统性能还使用其他方法,这些方法包括使用规格化均方差(normalizedmeansquareerror,NMSE)、信号噪声比(signaltOnoiseratio,SNR)和平均绝对误差(meanabsoluteerror,MAE)来度量,分别定义为:
其中,x(m,n)为原始图像的像素值,x(m,n)为解压缩之后的像素值。
在电子工程中,信号噪声比(SNR)一直是最流行的误差度量指标,在大多数情况下可提供很有价值的信息,在数学上也比较容易计算。
信号噪声比虽然也用在图像编码中,但由于它的数值与图像编码系统中高压缩比的关系不容易体现,因此提出了其他的几种度量方法,包括平均主观评分(meanopinionscore,MOS)。
9.3EZW编码
9.3.1介绍
在1992年,Lewis,A.S.和Knowles,G.首先介绍了一种树形数据结构来表示小波变换的系数:
6)。
在1993年,Shapiro,J.M.把这种树形数据结构叫做“零树(zerotree)”,并且开发了一个效率很高的算法用于熵编码,他的这种算法叫做嵌入(式)零树小波(embeddedzerotreewavelet,EZW)算法‘”。
EZW主要用于与小波变换有关的二维信号的编码,但不局限于二维信号。
嵌入(式)零树小波中的“小波”是指该算法以离散小波变换为基础,以大的小波变换系数比小的小波变换系数更重要,以及高频子带中的小系数可以被抛弃的事实为背景。
“零树”是指小波变换系数之间的一种数据结构,因为离散小波变换是一种多分辨率的分解方法。
每一级分解都会产生表示图像比较粗糙(低频图像)和比较精细(高频图像)的小波系数;
在同一方向和相同空间位置上的所有小波系数之间的关系可用一棵树的形式表示,如果树根和它的子孙的小波系数的绝对值小于某个给定的阈值丁(threshold),那么这棵树就叫做零树。
“嵌入”是渐进编码(progressiveencoding)技术的另一种说法。
其含义是指一幅图像可以分解成一幅低分辨率图像和分辨率由低到高的表示图像细节的许多子图像;
图像合成的过程与分解的过程相反,使用子图像生成许多分辨率不同的图像。
EZW编码指的是,按照用户对图像分辨率的要求,编码器可以进行多次编码;
每进行一次编码,阈值降低1/2,水平和垂直方向上的图像分辨率各提高1倍。
编码从最低分辨率图像开始扫描,每当遇到幅度大于阈值的正系数就用符号P表示,幅度的绝对值大于阈值的负系数用符号N表示,树根节点上的系数幅度小于阈值而树枝中有大于阈值的非零树用符号Z表示,零树用符号T表示。
.
小波图像编码(waveletimagecoding)的一般结构如图9—5所示,它主要由小波变换(wavelettransform)、量化(quantization)和熵编码(entropyencoding)等3个模块组成。
小波变换不损失数据,但它是EZW算法具有渐进特性的基础;
量化模块对数据会产生损失,数据损失的程度取决于量化阈值的大小,EZW算法指的就是这个模块的算法,它的输出是符号集{P,N,T,Z,0,1>
中的一系列符号;
熵编码模块对每个输入数据值精确地确定它的概率,并根据这些概率生成一个合适的代码,使输出的码流(codestream)小于输入的码流。
·
9.3.2算法
EZW算法是多分辨率图像的一种编码方法。
对整幅图像编码一次,生成一种分辨率图像,编码一次叫做一遍扫描。
每一遍扫描大致包含3个步骤:
设置阈值、每个小波系数与阈值进行比较、量化系数和重新排序。
在扫描过程中需要维护两种表,一种是小波系数的符号表,另一种是量化表。
1.零树
回顾二维小波变换的计算过程,不难想象各级子图像中的系数是相关的。
在说明零树的概念之前,需要对小波变换得到的系数、名称和符号加以说明。
现以3级分解的离散小波变换为例,图9—6表示Lena图像使用三级滤波器组做小波变换输出的子图像(subimage)。
需要注意的是:
分解之后的图像的名称在文献上有很多种,除了子图像之外,有的叫做子带图像(sub—bandimage),有的把子图像进一步区分为高频子图像和低频子图像,或者粗糙图
像和精细图像等名称。
这些名称从不同的角度反映图像的特性,在不同的场合下使用可以收到异曲同工的效果。
图9—6中的数字1,2和3表示分解的级数编号,LL3表示第3级的低频子图像,在这个例子中,它是分辨率最低的子图像。
HL3表示第3级分解在水平方向上的子图像,LH3表示第3级分解在垂直方向上的子图像,HH3表示第3级分解在对角线方向上的子图像,其他的组合符号依此类推。
由于低频子图像的系数要比高频子图像的系数大,零树编码技术就是利用这个事实来设计编码/解码过程中每一级使用的量化器。
各级子图像中的系数之间的关系可以用树的形式描述。
如图9—7(a)所示,最低频率的子图像在左上角,最高频率的子图像在右下角,由同一方向和相同空间位置上的所有小波系数组成一棵树。
例如,从第3级子图像HH3、第2级子图像HH2到第1级子图像HHl的相应位置上的所有系数构成一棵下降树。
按箭头所指的方向,各级系数的名称分别用祖系数、父系数、子系数和孙系数来称呼。
举例来说,LL3的系数为{63},HH2和HHl中的系数分别为{3}和{4,6,3,一2},由这些系数构成的树如图9—7(b)所示。
如果把{63}指定为父系数,{3}就称为子系数,而{4,6,3,一2}中的4个系数就称为孙系数。
现在再来看零树的概念。
为便于比较,把图9—7(b)所示的两棵树用图9—8(a)和图9-8(b)表示。
假设编码时开始的阈值丁o;
32,由于63比32大,这样的树叫做非零树,如图9-8(a)所示。
假设下一次编码时的阈值T1=16,把一13当作父系数,它的幅度16小,而它的所有4个子系数的幅度都比16小,这样的树叫做零树,系数一13叫做零树根,如图9-8(b)所示。
根据以上的分析,零树的定义可概括为一句话:
子孙系数都为零的树。
定义零树的重要意义在于,如果一棵树是零树,那么这棵树就可以用一个预先定义的符号来代表整棵树,从而提高了压缩比。
顺便要指出的是,小波图像系数结构的形式不只是上面介绍的一种,也可能不是最好的一种。
2.扫描方法
EZW算法对小波系数的进行编码的次序叫做扫描。
扫描子图像系数的方法有两种:
一种叫做光栅扫描(raster:
,。
n),如图9—9(a)所示;
另一种叫做迂回扫描(mortonscan),如图9—9(b)所示。
3.算法
EZW算法可归纳为下面几个主要步骤。
(1)阈值丁的选择
开始时的阈值丁。
通常按下式估算,
T0=2[1og2(MAX(|xi|))
其中,MAX(.)表示最大的系数值,x/表示小波变换分解到第i级时的系数。
以后每扫描一次,阈值减少一半。
(2)给系数分配符号
使用EZW算法编码图像时每一次扫描需要执行两种扫描,并产生两种输出的符号。
第一种扫描叫做主扫描(dominantpass),它的任务是把小波系数X与阈值T进行比较,然后指定表9—1中的4个符号之一,笔者把这种符号叫做系数符号,对整幅图像扫描之后产生系数符号序列。
第二种扫描叫做辅扫描(subordinatepass),其任务是对主扫描取出的带有符号P或者N的系数进行量化,产生代表对应量化值的符号“0”和“尸,笔者把这种符号称为量化符号。
主扫描:
扫描每一个系数以产生系数符号。
(1)如果系数幅度大于阈值(丁)且为正数,输出符号P(positive),
(2)如果系数幅度的绝对值大于阈值(丁)且为负数,输出符号N(negative),
(3)如果系数是零树根,输出T(zerotree),
(4)如果系数幅度小于阈值但树中有大于阈值的子孙系数,输出孤立零符号Z(isolatedzero)。
、
为了确定一个系数是否为零树根T或者是孤立零Z,需要对整个4叉树进行扫描,这样就需要花时间。
此外,为了保护已经被标识为零树的所有系数,需要跟踪它们,这就意味需要存储空间来保存。
最后要把绝对值大于阈值的系数取出来,并在图像系数相应的位置上填人一个标记或者零,这样做可防止对它们再编码。
辅扫描:
量化带符号P和N的系数。
在量化系数之前要构造量化器。
量化器的输人间隔为[Ti-1,2Ti-1],该间隔被1.5Ti-1分成两个部分:
[Ti-1,1.5Ti-1]和[1.5Ti-1,2Ti-1],量化间隔为0.5Ti-1,其中i为第i次编码。
量化器的输出为量化符号“0”和“1”,“0”对应量化值为(1.5—0.25)Ti-1,“1”对应量化值为(1.5+0.25)Ti-1。
例如,第一次扫描时的阈值丁o=32,量化器的间隔就为[32,64],该间隔[32,64]被48分成两个相等的部分:
[32,48]和[48,64],量化间隔为16。
对系数进行量化时,如果幅度在[32,48]的范围里,该系数的量化值为“0”,对应的量化值为(1.5—0.25)丁o=40;
如果幅度在[48,64]的范围里,该系数的量化符号为“尸,它的量化值为(1.5+0.25)丁o=56(详见图9—13)。
9.3.3算法举例
为进一步理解EZW算法,综合了C.Valens[8]和在读博士生GhassanAl-Regibrg~提供的一个例子[7]。
假设有一幅8X8的图像户,离散小波变换矩阵为W,经过小波变换之后的图像为X=WP,小波图像系数X和扫描方式分别如图9—10(a)和图9—10(b)所示。
另外还假设,图9—10(a)所示的数据是经过3级分解的小波图像系数。
1.树结构
为叙述方便,图9—10(a)中的系数用组合符号(YM/YYN)表示。
2.编码
根据对图像分辨率的要求,编码时可对小波图像系数进行多次扫描。
每一次扫描包括主扫描和辅扫描。
(1)第1次扫描
步骤1:
选择初始阈值。
最大的系数为63,因此选择丁o=32。
步骤2:
指定系数的符号。
假设存放系数符号的缓冲存储器为D1,存放量化符号的缓冲存储器的符号为S1。
扫描每一个系数并且与阈值32进行比较。
在比较过程中对每一个系数指定一个符号,并把符号放在D1中。
当一个系数被指定为符号T时,所有的子孙系数就不再扫描,并用“X”表示,扫描结果如图9—13(a)所示。
图中,输出符号的下标表示系数被标识的次序,仅仅是为了叙述方便。
对扫描结果作如下说明:
①Xl/LL3的系数是63,它大于阈值32,因此输出的符号为Pl。
②X2/HL3的系数是一34,它的符号输出为是N2。
③X3/LH3的系数是一31,它的幅度相对于阈值32来说是不重要的,它下属子系数{X3/HL2,X3/LH2和X3/HH2},孙系数{X9/HLl,X10//HLl,X13//HLl,X14//HLl},{X9//LHl,X10/LHl,X13/LHl,X14/LHl}和{X9//HHl,X10/HHl,X13/HHl,X14/HHl)的幅度都比它小,因此它输出的符号为零树符号T,。
④X2/LH2的系数是14,它小于阈值32。
在它的子系数{X3/LHl,X4/LHl,X7//
.175。
LHl,X8/LHl}中,X4/LHl的系数是47,它大于阈值32,因此X2/LH2输出符号为孤
立零符号Z,。
⑤X4/LHl的系数是47,相对于阈值32是重要的,产生符号P1,。
第1次主扫描之后,高速缓冲存储器D1中的系数符号为:
D1:
PNTTPTTZTTTTTTTPTT
步骤3:
量化系数。
对带符号P/N的系数进行量化。
在第1次主扫描期间的阈值是32,幅度大于32的有4个系数{63,34,49,47}。
用48把间隔[32,64]分成两个部分,如图9—13(b)所示。
幅度在间隔[32,48]中的系数指定为符号“0”,幅度在间隔[48,64]中的系数指定为符号“尸,于是这4个系数被编码成如表9—2所示的量化符号。
顺便指出,由于解码器重构的系数幅度按(1.5土0.25)T进行计算,因此重构数据的绝对误差在1~7之间,即/j、于0.25丁。
在第1次辅扫描之后,4个系数{63—P,34—N,49—P,47—P}的量化符号所组成的位流为:
Sl:
10l0
步骤4:
重新排列带P/N符号的数据。
为便于设置第2次扫描时所用的量化间隔,以提高解码的系数精度,编码器对本次扫描取出的4个系数作重新排列,把系数集{63—P,34—N,49—P,47—P>
排列成{63—P,49—P,34—N,47—P}。
,对于重新排序的问题也有人指出,从他们的实验结果看,精度提高不大但付出的计算代价却很高。
步骤5:
输出编码信息。
编码器输出两类信息,一类给解码器的系数符号系列等信息,
另一类用于下一次扫描的阈值和大于阈值的系数值等信息。
①给解码器的信息包含下面3种:
HEADER(即丁o=32),D1;
PNTTPTTZTTTTTTTPTT“AND'
’S1:
1
010
.176·
②给下一次扫描用的信息包含下面三种:
丁o=32,{63—P,49—P,34—N,47—P}“AND”子带图像。
此处的"
AND"
仅为强调它们之间的对应关系
(2)第2次扫描
设置新阈值:
T1=T0/2=16。
使用“o”代替第1次扫描时被标识的系数,这些系数就不再被扫描,在图9—“中,用符号@表示。
然后扫描其余的系数,并与新的阈值进行比较。
假设第2次存放系数符号的缓冲存储器为D2,存放量化符号的缓冲存储器S2,采用与第1次类似的扫描方法,得到的系数符号为,
D2:
NPTTTTTTTTTTTTTTT
由于阈值是16,因此量化器的间隔有3个:
[16,32),[32,48)和[48,64),如图9—“所示。
按照这次构造的量化器,对第2次主扫描得到的系数集{63—P,49-P,34—N,47—P,31—N,23—P>
进行编码,得到的量化符号位流如下,
S2:
l00ll0
将系数集{63—P,49—P,34—N,47—P,31—N,23-P}排成{63—P,49—P,47—P,34—N,31—N,23—P}。
①给解码器的信息包含下面两种:
NPTTTTTTTTTTTTTTT“AND'
’S2:
100110
Tl=16,{63—P,49—P,47—P,34—N,31—N,23—P}“AND"
子带图像
(3)第3次扫描
T2=T1/2=8。
使用“0”代替第2次扫描时被标识的系数,这些系数就不再
177.
被扫描,在图9—15中,用符号⑧表示。
假设
第3次存放系数符号的缓冲存储器为D3,存放量化符号位流的缓存存储器为S3,采用与第
1次类似的扫描方法,得到的系数符号为,
1)3;
PPNPPNTTNNPTPTTNTTTTTTTTTTTTPTTTTTTTTPTTTTTTTTTTTT
由于阈值是8,因此量化器有?
个间隔:
[8,16),[16,24),[24,32),[32,40),[40,48),[48,56)和[56,64),如图9—15所示。
按照这次构造的量化器,对第3次主扫描得到的系数集{63—P,49—P,47—P,34—N,31—N,23—P,10—P,14—P,13—N,15-P,14-P,9—N,12-N,14—N,8-P,13—P,12—N,9—P,9—P,1l—P}进行编码,得到的量化符号位流如下,
S3:
10l01101111011011000
解码码器要按照编码时的扫描和量化方法进行解码。
输入位流的第1个系数符号是P,对应的量化符号位是“1”,因此第1个系数是56;
第2个系数符号是N,对应的量化符号位是“0”,因此第2个系数是一40;
第3个系数符号是T,在相应的图像系数位置上用“o’’表示它的系数。
第1次解码的结果如图9—16所示。
用“o”表示的系数表示已经扫描过,它们对应符号T或者Z,用“X”表示的系数表示不需要扫描的系数,因为它们是零树根的子孙。
在第1次解码之后,解码器需要判断是否要进一步重构比较精细的图像。
如果不需要,则退出解码,如果需要则进入第2次解码。
(2)第2次解码
第2次解码分两步。
第1步:
提高第1次解码时得到的系数的精度;
第2步:
求解未解码的系数。
解码器将使用编码器生成的第2次编码时的扫描信息,
100110
解码器首先修改阈值,使T1=16,然后构造一个如图9—17所示的量化器。
开始时,解码器只看S2中用下划线表示的