小波变换 mallat
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验目的:通过编程实现离散快速小波变换Mallat 算法,从而加深理解二维
小波变换的分解与合成,同时,提高编程能力和matlab 的应用,为以后的学习打下基础。
实验原理:
1、Mallat 快速算法
本实验使用离散快速小波变换快速算法Mallat 算法,算法原理如下
(1)1(2)j j k n n
c h n k c -=-∑
(2)
1(2)j j k n n
d g n k c -=-∑重构算法:
(3)
1(2)(2)j j j n k k n
n
c h n k c g n k
d -=-+-∑∑对于(1)、(2)等效于经过冲击响应为和的数字滤波器,然后再分别进
1
j n c -[]h n -[]g n -行“二抽取”,Mallat 分解算法的滤波器表示形式如下图
C j-1
d j (k)
C j (k)
用滤波器表示如下图
d j
C j C j-1(k)
2、
255*255
10lg
PSNR MSE
='2
11
()*M
N
ij
ij i j f
f MSE M N
==-=
∑∑ 分别表示原始图像和重建后的图像,。
{}ij f '{}ij f 1,1i M j N ≤≤≤≤3、边界延拓方法有零延拓、周期延拓、对称周期延拓、常数连续延拓等,本实验采用以上四种方法进行原图像的1/8延拓,并进行重构,各种延拓方法所对应的函数为yan0(x)、yancir (x )、yan(x)、yanc(x),在主程序中,需要某种延拓,便调用某种函数。
实验编程思路:
为使程序易于理解,在不考虑算法复杂度的情况下,分解程序采用简洁的循环计算出下一级的分解系数,程序采用的编程思想如下
[][][]11100[0][1][2][3][4][5]001[1]00[0][1][2][3]00[1][2][3][4][5]00[0][1]12j j j j j j c c h h h h h h c c h h h h n c n h h h h h h c ---⎡⎤
⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢
⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎡⎤⎢⎥--⎢⎥⎣⎦⎣⎦⎢⎥⎢⎥⎣⎦⎣⎦
L
L M M M
M M M M M O O M L 以上矩阵等式左面是进行二抽样的结果,是分解的低频部分。同理,对
[0][1]2
j j n
c c -L j 于分解的高频部分有如下矩阵形式:
j [][][]11
100[0][1][2][3][4][5]0
01[1]00[0][1][2][3]00[1][2][3][4][5]00[0][1]12j j j j j d d g g g g g g d d g g g g n d n g g g g g g d ---⎡⎤⎡⎤
⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢
⎥⎢⎥=⎢
⎥⎢⎥⎢⎥⎢
⎥⎢⎥⎡⎤⎢⎥--⎢⎥⎣⎦⎣⎦⎢⎥⎢⎥⎣⎦⎣⎦
L L M M M
M M M M M O O
M L 分解程序: lenx=size(x,2);%x 为一维向量
lenh=size(h,2);h=[h,zeros(1,(lenx-lenh))];g=[g,zeros(1,(lenx-lenh))];
r1(1)=sum(h.*x);
r2(1)=sum(g.*x);
for k=1:1:(lenx/2-1) %循环求出下一级低频和高频分量
h=[h(end-1:end),h(1:(end-2))];
r1(k+1)=sum(h.*x);
g=[g(end-1:end),g(1:1:(end-2))];
r2(k+1)=sum(g.*x);
end y=[r1,r2];
对于重构算法,其等效形式为
[][][]
1(2)(2)j j j n
n
c n h n k c k g n k
d k -=-+-∑∑上式等号右边部分实质上是对变量的数字卷积运算,程序采用频域相乘代替卷积,重建程k 序为 y=ifft(fft(c3,lenx).*fft(h,lenx))+ ifft(fft(d3,lenx).*fft(g,lenx));
实验结果及分析:
1、多尺度分解与重构图像
二维小波变换采用小波采用db3,其峰值信噪比PNSR=230.13db,并对三级分解图像进行归一化,求出0的个数为37626,其所占的百分比为57.41%。
2、延拓重建图像
延拓方法周期延拓对称周期延拓零延拓常数连续延拓PNSR230.18db230.48db229.80db230.13db 从PNSR结果可知,在各种延拓中,对称周期延拓的重建图像结果最好,相比之下零延拓图像效果不如其他方法延拓。
3、不同小波下重构图像的性质
用不同小波进行图像重构,所得的重构图像能量分布如下
用各种小波进行重构后的图像的均值方差如下表。小波db1db2db3db4均值124.0309124.0509124.0509124.0509方差
2272
2272
2272
2272
附录:
1、主函数程序
clc;clear;
X=imread('LENA.bmp');%路径
X=double(X);
% S=yancir(X);
A=mallatdec2(X,'db3', 3);
image(abs(A));
colormap(gray(255));
title('3级多尺度分解图像');
Y=mallatrec2(A,'db3',3);
Y=real(Y);
figure(2);
subplot(1,2,1);
image(X);
colormap(gray(255));
title('原始图像');
subplot(1,2,2);
image(Y);
colormap(gray(255));
title('重建图像');
zerosn=numberzeros(A);
% Y=Y(33:288,33:288); %当调用延拓图像时,从延拓的重建图像进行截取
csize=size(X);
sr=csize(1);
sc=csize(2);
mse=sum(sum( (Y-X).^2,1))/(sr*sc);
psnr=10*log(255*255/mse)/log(10)
2、分解程序
function Y=mallatdec2(X,wname,level)
%输入:X 载入的二维图像像数值;
% level 小波分解次(级)数设定值(如果设定值超过最高可分解次数,按最高分解次数分% wname 小波名字wavelet name
%输出:Y 多极小波分解后的小波系数矩阵
[h,g]=wfilters(wname,'d'); %h,g 分别为低通和高通滤波器
X=double(X);
t=1;
[hh,ll]=size(X);
while t<=level
%先进行行小波变换
for row=1:hh
Y(row,1:ll)=mdec1(X(row,1:ll),h,g) ;
end