资源描述:
《小波分析实验:二维离散小波变换(Mallat快速算法).docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、小波分析实验:实验2二维离散小波变换(Mallat快速算法)实验目的:在理解离散小波变换原理和Mallat快速算法的基础上,通过编程对图像进行二维离散小波变换,从而加深对二维小波分解和重构的理性和感性认识,并能提高编程能力,为今后的学习和工作奠定基础。实验工具:计算机,matlab6.5附录:(1)二维小波分解函数%二维小波分解函数 functionY=mallatdec2(X,wname,level)%输入:X 载入的二维图像像数值;% level 小波分解次(级)数设定值(如果设定值超过
2、最高可分解次数,按最高分解次数分解)% wname 小波名字waveletname%输出:Y 多极小波分解后的小波系数矩阵 [h,g]=wfilters(wname,'d'); %h,g分别为低通和高通滤波器X=double(X);t=1;hh=size(X,2); whilet<=level %先进行行小波变换 for row=1:hh Y(row,1:hh)=mdec1(X(row,1:hh),h,g); end %再进行列小波变换 forcol=1:h
3、h temp=mdec1(Y(1:hh,col)',h,g); Y(1:hh,col)=temp'; endt=t+1;hh=hh/2;X=Y;end %内部子函数,对一行(row)矢量进行一次小波变换,利用fft实现functiony=mdec1(x,h,g)%输入:x行数组% h为低通滤波器% g为高通滤波器%输出:y进行一级小波分解后的系数lenx=size(x,2);lenh=size(h,2); rh=h(end:-1:1);rrh=[zeros(1,(l
4、enx-lenh)),rh];rrh=circshift(rrh',1)'; rg=g(end:-1:1);rrg=[zeros(1,(lenx-lenh)),rg];rrg=circshift(rrg',1)';r1=dyaddown(ifft(fft(x).*fft(rrh,lenx)),1); %usepara1r2=dyaddown(ifft(fft(x).*fft(rrg,lenx)),1);y=[r1,r2]; (2)二维小波重构函数%二维小波重构函数functionY=mallatrec2(
5、X,wname,level)%输入:X 载入的小波系数矩阵;% level 小波分解次(级)数设定值(如果设定值超过最高可分解次数,按最高分解次数分解)% wname 小波名字waveletname%输出:Y 重构图像矩阵 [h,g]=wfilters(wname,'d'); %h,g分别为重构低通滤波器和重构高通滤波器 hz=size(X,2);h1=hz/(2^(level-1));whileh1<=hz %对列变换 forcol=1:h1 temp=m
6、rec1(X(1:h1,col)',h,g)'; X(1:h1,col)=temp; end %再对行变换 forrow=1:h1 temp=mrec1(X(row,1:h1),h,g); X(row,1:h1)=temp; end h1=h1*2; endY=X; %内部子函数,对一行小波系数进行重构functiony=mrec1(x,h,g)%输入:x行数组% h为低通滤波器% g为高通滤波器%输出:y进行一级小波重构
7、后值lenx=size(x,2); r3=dyadup(x(1,1:lenx*0.5),0); %内插零usepara0r4=dyadup(x(1,(lenx*0.5+1):lenx),0); %usepara0y=ifft(fft(r3,lenx).*fft(h,lenx))+ifft(fft(r4,lenx).*fft(g,lenx)); (3)测试函数(主函数)%测试函数(主函数)clc;clear;X=imread('E:Libin的文档CourseCourse_wavelet实
8、验2要求exp2LENA.bmp');%路径 X=double(X);A=mallatdec2(X,'sym2',3); image(abs(A));colormap(gray(255));title('多尺度分解图像');Y=mallatrec2(A,'sym2',3);Y=real(Y);figure(2);subplot(1,2,1);image(X);colormap(gray(255));title('原始图像'