小波算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
传统的第一代小波变换是在欧式空间内通过基底的平移和伸缩构造小波基的,不适合非欧式空间的应用。因此小波的提升方案应运而生,它是构造第二代小波变换的理想方法。
提升的形式给出了小波完全的空间域的完全解释,它具有许多优良的特性:结构简单,运算量低,原位运算,节省存储空间,逆变化可以直接翻转实现,以及可逆的整数到整数变换,便于实现。在高速处理、移动手持设备、低功耗设备应用中具有很大的吸引力。提升小波在1996年由Sweldens提出后,在信号处理领域得到了广泛的应用。在静态图像处理中,提升小波已被选作JPEG2000的变换核。它还提供了多精度的性能,同基于JPEG2000的标准相比,在很低的比特率时具有较好的压缩DCT的JPEG性能,并提供了在同一个编码结构中有效的失真和无失真的压缩。在视频领域,使用提升小波方法自适应地对任意形状的物体进行编码,显著提高了编码效率,在静态图像编码上明显优于MPEG4;视频物体的主观评价效果更好,具有比MPEG4更好的块效应。通过提升小波的梯形结构,提出的渐进性的小波逆变换合成(PIWC)算法来保证一个局域场景的再现只需要使用部分的压缩数据,这样减少了数据访问量和计算开销,实现了在3D环境下从压缩数据中实时再现3D。提升小波用于一维信号消噪和图像消噪也得到了良好的效果。通过将水印加入到提升结构正在处理的小波系数中,进一步增强了安全性。
提升算法:
二维离散小波变换最有效的实现方法之一是采用Mallat算法,通过在挺香的水平和垂直方向交替使用低通和高通滤波器实现。这种传统的基于卷积的离散小波变换的计算量很大,计算复杂度高,对存储空间要求高,不利于硬件实现。提升小波的出现有效地解决了这一问题。提升算法相对于MATLAB算法而言,是一种更为快速有效的小波变换实现方法,被誉为第二代小波变换。它不依赖于傅里叶变换,继承了第一代小波的多分辨率的特征,小波变换后的系数是整数,计算速度快,计算时无需额外的存储开销,Daubechies已经证明,任何离散小波或具有有限长滤波器的两阶滤波变换都可以被分解成一系列简单的提升步骤,因此能够用Mallat算法实现的小波,都可以用提升算法来实现。
提升算法给出了双正交小波简单而有效的构造方法,使用了基本的多项式插补来获取信号的高频分量,之后通过构建尺度函数来获取信号的低频分量,“提升”算法的基本思想是,将现有的小波滤波器分解成基本的构造模块,分步骤完成小波变换。
基于提升算法的小波变换称为第二代小波变换。它使我们能够用一种简单的方法去解释小波的基本理论,而第一代小波变换都可以找到等效的提升方案。提升方案把第一代小波变换过程分为以下三个阶段:分解(split),预测(predict)和更新(update)。
(1)分解。将输入信号s(i)分为2个较小的子集s(i-1)和d(i-1),d(i-1)也称为小波子集。最简单的分解方法是将输入信号s(i)根据奇偶性分为2 组,这种分裂所产生的小波称为懒小波(lazy wavelet)。分解过程可
以表示为如下:F(s(i))=(s(i-1),d(i-1)),其中F(s(i))为分解过程。
(2)预测。在基于原始数据相关性的基础上,用偶数序列s(i-1)的预测值P(s(i-1))去预测(或者内插)奇数序列d(i-1),即将滤波器P 对偶数信号作用以后作为奇数信号的预测值,奇数信号的实际值与预测值相减得到残差信号。实际中虽然不能从子集s(i-1)中准确地预测子集d(i-1),但是P(s(i- 1))有可能很接近d(i-1),因此我们可以使用P(s(i-1))和d(i-1)的差值来代替原来的d(i-1),这样产生的d(i-1)比原来的d(i-1)包含更少的信息,于是得到d(i-1)=d(i-1)-P(d(i-1))
,这里,已经可以用更小的子集s(i-1)和子集d(i-1)来代替原信号集s(i)。重复分解和预测过程,经过n步以后原信号集可用{s(n),d(n),d(n-1),d(n-2),.....,d(1)}来表示。
(3)更新。为了使原始信号集的某些全局特性在其子集s(i-1)中继续保持,使得它保持原图的某一标量特性Q(x)(如均值、消失矩等不变),即有Q(s(i- 1))=Q(s(i))。可能利用已经计算的小波子集d(i-1)对s(i-1)进行更新,从而使得后者保持特性Q(x),即要构造一个算子U去更新s(i-1)。定义如下:
s(i-1)=s(i-1)+U(d(i-1))
从上述分析可以知道,提升方法可以实现原位运算,即该方法不需要除了前级提升步骤的输出之外的数据,这样在每个点都可以运用新的数据流替换旧的数据流。
当重复使用原位提升滤波器组时,就获得了交织的小波变换系数。
/content/13/0928/15/10724725_317659907.shtml
% 2.提升系数确定
% t1=liftwave('9.7');
% 获取提升系数(MATLAB7.0以后)
d1=[-1.586100000000000e+000,-1.586134342069360e+000];
p1=[1.079600000000000e+000,-5.298011857188560e-002];
d2=[-8.829110755411875e-001,-8.829110755411875e-001];
p2=[4.435068*********e-001,1.576123746148364e+000];
d3=-8.698644516247808e-001;
p3=-1.149604398860242e+000;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%
% 3.分解层数确定
% 采用用户输入和自动给出最大层数两种方法N=length(x); % 矩阵大小
S=N; % 变量
s=log2(N); % 最大循环次数
n1=N/2; % 初始一半矩阵大小
n2=N; % 初始矩阵大小
u=0; % 初始值% 对非2的整数幂大小图像确定最大分解层数
for ss=1:s
if (mod(S,2)==0)
u=u+1;
S=S/2;
end;
end;
u=u-1; % 分解最大层数减1(后面的边界处理造成) % 最大层数确定
if (flag_max==0) % 手动输入
T=layer; % 用户输入值
else % 自动确定最大层数