l 提升原理
小波提升是一种构造紧支集双正交小波的新方法。
1)步骤
由提升构成第二代小波变换的过程分为如下3个步骤:
(1) 分裂
分裂(Split)是将原始信号sj = { sj,k }分为两个互不相交的子集和。每个子集的长度是原子集的一半。通常是将一个数列分为偶数序列ej-1和奇数序列oj-1,即
Split (sj) = (ej-1, oj-1 )
其中,ej-1 = { ej-1, k = sj, 2 k },oj-1 = { oj-1, k = sj, 2 k +1}。
(2) 预测
预测(Predict)是利用偶数序列和奇数序列之间的相关性,由其中一个序列(一般是偶序列ej-1)来预测另一个序列(一般是奇序列oj-1)。实际值oj-1与预测值P (ej-1)的差值dj-1反映了两者之间的逼近程度,称之为细节系数或小波系数,对应于原信号sj的高频部分。一般来说,数据的相关性越强,则小波系数的幅值就越小。如果预测是合理的,则差值数据集dj-1所包含的信息比原始子集oj-1包含的信息要少得多。预测过程如下:
dj-1 = oj-1 – P (ej-1)
其中,预测算子P可用预测函数Pk来表示,函数Pk可取为ej-1中的对应数据本身:
Pk (ej-1, k ) = ej-1, k = sj, 2 k
或ej-1中的对应数据的相邻数据的平均值:
Pk (ej-1) = (ej-1, k + ej-1, k+1) / 2 = (sj, 2 k + sj, 2 k +1) / 2
或其他更复杂的函数。
(3) 更新
经过分裂步骤产生子集的某些整体特征 (如均值)可能与原始数据并不一致,为了保持原始数据的这些整体特征,需要一个更新(Update)过程。将更新过程用算子U来代替,其过程如下:
sj-1 = ej-1 + U (d j-1)
其中,sj-1为sj的低频部分;与预测函数一样,更新算子也可以取不同函数,如
U k (dj-1) = dj-1, k / 2
或
U k (dj-1) = (dj-1, k -1 + dj-1, k) / 4 + 1 / 2。
P与U取不同的函数,可构造出不同的小波变换。
2) 分解与重构
经过小波提升,可将信号sj分解为低频部分sj-1和高频部分dj-1;对于低频数据子集sj-1 可以再进行相同的分裂、预测和更新,把sj-1 进一步分解成dj-2和 sj-2;…;如此下去,经过n次分解后,原始数据sj的小波表示为 {sj-n, dj-n, dj-n+1, …, dj-1}。其中sj-n代表了信号的低频部分 ,而{dj-n, dj-n+1, …, dj-1}则是信号的从低到高的高频部分系列。
每次分解对应于上面的三个提升步骤——分裂、预测和更新:
Split (sj) = (ej-1, oj-1 ),dj-1 = oj-1 – P (ej-1),sj-1 = ej-1 + U (d j-1)
小波提升是一个完全可逆的过程,其反变换的步骤如下:
ej-1 = sj-1 - U (d j-1 ),oj-1 = dj-1 + P (ej-1),sj = Merge (ej-1, oj-1 )
下图是用提升方法进行小波分解和重构的示意图。
分解的三个步骤可以用替代的方式来计算:先将奇数序列更新 (用偶数序列预测奇数序列),然后用更新的奇数序列更新偶数序列。大致过程如下:
Split (sj) = (ej-1, oj-1 ),oj-1 -= P (ej-1 ),ej-1 += U (oj-1)
其反变换过程也可以用替代的方式来计算:
ej-1 -= U (oj-1),oj-1 += P (ej-1 ),sj = Merge (ej-1, oj-1 )
4)例子
(1) 线性Haar小波变换
取预测函数
Pk (ej-1) = ej-1, k = sj, 2k
更新函数
Uk (d j-1) = dj-1, k / 2
则得到线性Haar小波变换。
分解式如下:
Split (sj) = (ej-1, oj-1 )
d j-1, k = oj-1, k – Pk (ej-1) = oj-1, k – ej-1, k = sj, 2k+1 - sj, 2k
sj-1, k = ej-1, k + Uk (d j-1) = sj, 2k + dj-1, k / 2 = (sj, 2k+1 + sj, 2k) / 2
重构式如下:
ej-1, k = sj-1, k - Uk (d j-1) = sj-1, k – dj-1, k / 2
oj-1, k = d j-1, k + Pk (ej-1) = d j-1, k + ej-1, k
sj = Merge (ej-1, oj-1 )
(2) 线性小波变换
取预测函数
Pk (ej-1) = (ej-1, k + ej-1, k+1) / 2 = (sj, 2k + sj, 2k +2) / 2
更新函数
Uk (d j-1) = (dj-1, k -1 + dj-1, k) / 4
则得到线性小波变换。
分解式如下:
Split (sj) = (ej-1, oj-1 )
d j-1, k = oj-1, k – Pk (ej-1) = oj-1, k – (ej-1, k + ej-1, k+1) / 2 = sj, 2k+1 - (sj, 2k + sj, 2k +2) / 2
sj-1, k = ej-1, k + Uk (d j-1) = sj, 2k + (dj-1, k -1 + dj-1, k) / 4
重构式如下:
ej-1, k = sj-1, k - Uk (d j-1) = sj-1, k – (dj-1, k -1 + dj-1, k) / 4
oj-1, k = d j-1, k + Pk (ej-1) = d j-1, k + (ej-1, k + ej-1, k+1) / 2
sj = Merge (ej-1, oj-1 )
实际上,提升算法是一种改善快速小波变换的方法。单步的提升算法并不能用于所有的小波构造过程,事实上只有一些特殊的小波变换很容易用它构造,比如双正交小波。不过,涉及有限滤波器(FIR)的所有小波或子带变换可用多个提升步骤来构造。Daubechies和 Sweldens等已经证明,借助于因子化小波变换,所有小波的构造都能够用提升模式实现。
l 整数小波变换
可以用提升方法来构造具紧支集的双正交小波,那么就可以通过对每一次滤波后的数据进行取整(用[·]表示)来实现整数小波变换,而且这种变换是完全可逆的,也就是完全重构数据。
Sweldens已经证明在提升的基础上可以进行整数集到整数集的小波变换,也就是说,一个整数集合通过小波变换得到的仍然是整数集合。这就给数字图象的压缩编码带来了好处,由于不需要对变换后的系数进行量化,因此提供了实现无损压缩的可能。
下面试几个典型的整数小波变换的例子:
1) S变换
最简单的整数小波变换是S变换(S transform, S = sequential),它是线性Haar小波变换的近似整数形式。
分解式如下:
d j-1, k = sj, 2k +1 - sj, 2k
sj-1, k = sj, 2k + [dj-1, k / 2]
相当于对原更新函数取整。
重构式如下:
sj, 2k = sj-1, k - [dj-1, k / 2]
sj, 2k +1 = d j-1, k + sj, 2k
2)S+P变换
S变换之后,在低通系数sj-1, k的基础上进行线性预测,以产生新的高通系数d j-1, k ,这就是S+P变换族(S+P family of transform , S+P = sequential plus prediction)。分解式如下:
sj-1, k = sj, 2k + [ vk / 2]
d j-1, k = vk + [tk + 1/2]
其中
vk = sj, 2k +1 - sj, 2k
tk =α-1 (sj-1, k -2 - sj-1, k -1) +α0 (sj-1, k -1 - sj-1, k ) +α1 (sj-1, k - sj-1, k +1) +β-1 v k +1
例如,取参数如下表所示。
变换 |
α-1 |
α0 |
α1 |
β-1 |
S |
0 |
0 |
0 |
0 |
2/6 |
0 |
1/4 |
1/4 |
0 |
B |
0 |
1/4 |
3/8 |
1/4 |
C |
-1/16 |
1/4 |
1/2 |
3/8 |
其中
(1)S变换:
sj-1, k = sj, 2k + [ vk / 2] = sj, 2k + [(sj, 2k +1 - sj, 2k) / 2]
d j-1, k = vk = sj, 2k +1 - sj, 2k
其分解与重构式同上1)。
(2)2/6变换:
分解:
sj-1, k = sj, 2k + [ vk / 2] = sj, 2k + [(sj, 2k +1 - sj, 2k) / 2]
d j-1, k = vk + [(sj-1, k -1 - sj-1, k ) / 4 + (sj-1, k - sj-1, k +1) / 4 +1/2]
= (sj, 2k+1 - sj, 2k) +[(sj-1, k -1 - sj-1, k +1) / 4 + 1/2]
即:
vk = sj, 2k +1 - sj, 2k
sj-1, k = sj, 2k + [ vk / 2]
d j-1, k = vk + [(sj-1, k -1 - sj-1, k +1) / 4 + 1/2]
重构:
uk = [(sj-1, k -1 - sj-1, k +1) / 4 + 1/2]
sj, 2k = [(2 sj-1, k - d j-1, k + uk ) / 2] ?
sj, 2k +1 = sj, 2k + d j-1, k - uk
3)5/3变换
d j-1, k = sj, 2k +1 - [(sj, 2k +2 - sj, 2k) / 2]
sj-1, k = sj, 2k + [(dj-1, k + dj-1, k -1) / 4 + 1/2]
4)9/7-M变换
d j-1, k = sj, 2k +1 - [((sj, 2k +4 + sj, 2k -2) – 9 (sj, 2k +2 + sj, 2k)) / 16 + 1/2]
sj-1, k = sj, 2k + [(dj-1, k + dj-1, k -1) / 4 + 1/2]