小波分析实验:二维离散小波变换Mallat快速算法.docxVIP

  • 10
  • 0
  • 约5.27千字
  • 约 24页
  • 2019-05-05 发布于福建
  • 举报

小波分析实验:二维离散小波变换Mallat快速算法.docx

小波分析实验:二维离散小波变换Mallat快速算法

HYPERLINK /Torstan/archive/2011/08/31/2161456.html 小波分析实验: 实验2 二维离散小波变换(Mallat快速算法) 实验目的: 在理解离散小波变换原理和Mallat快速算法的基础上,通过编程对图像进行二维离散小波变换,从而加深对二维小波分解和重构的理性和感性认识,并能提高编程能力,为今后的学习和工作奠定基础。 实验工具: 计算机,matlab6.5 附录: (1)二维小波分解函数 %二维小波分解函数 ? 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=size(X,2); ? while t=level? ??? %先进行行小波变换 ??? for? row=1:hh ??????? Y(row,1:hh)=mdec1(X(row,1:hh),h,g) ; ??? end ??? %再进行列小波变换 ??? for col=1:hh ??????? temp=mdec1( Y(1:hh,col),h,g); ??????? Y(1:hh,col)=temp; ??? end t=t+1; hh=hh/2; X=Y; end ? %内部子函数,对一行(row)矢量进行一次小波变换,利用fft实现 function y=mdec1(x,h,g) %输入:x 行数组 %???? h为低通滤波器 %???? g为高通滤波器 %输出: y 进行一级小波分解后的系数 lenx=size(x,2); lenh=size(h,2); ? rh=h(end:-1:1); rrh=[zeros(1,(lenx-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);? %use para 1 r2=dyaddown(ifft(fft(x).*fft(rrg,lenx)),1); y=[r1,r2]; ? (2)二维小波重构函数 %二维小波重构函数 function Y=mallatrec2(X,wname,level) %输入:X????? 载入的小波系数矩阵; %?? ??level? 小波分解次(级)数设定值(如果设定值超过最高可分解次数,按最高分解次数分解) %????? wname? 小波名字wavelet name %输出:Y???? 重构图像矩阵 ? [h,g]=wfilters(wname,d);? %h,g分别为重构低通滤波器和重构高通滤波器 ? hz=size(X,2); h1=hz/(2^(level-1)); while h1=hz ??? % 对列变换 ??? for col=1:h1 ??????? temp=mrec1(X(1:h1,col),h,g); ??????? X(1:h1,col)=temp; ??? end ??? %再对行变换 ??? for row=1:h1 ??????? temp=mrec1(X(row,1:h1),h,g); ???????? X(row,1:h1)=temp; ???? end ???? h1=h1*2; ???? end Y=X; ? ? ? %内部子函数,对一行小波系数进行重构 function y=mrec1(x,h,g) %输入:x 行数组 %???? h为低通滤波器 %???? g为高通滤波器 %输出: y 进行一级小波重构后值 lenx=size(x,2); ? ? r3=dyadup(x(1,1:lenx*0.5),0);?? %内插零use para 0 r4=dyadup(x(1,(lenx*0.5+1):lenx),0);?? %use para 0 y=ifft(fft(r3,lenx).*fft(h,lenx))+ ifft(fft(r4,lenx).*fft(g,lenx));?? ? (3)测试函数(主函数) %测试函数(主函数) clc;clear; X=imread(E:\Libin的文档\Course\Course_wavele

文档评论(0)

1亿VIP精品文档

相关文档