实验目的:通过编程实现离散快速小波变换Mallat 算法,从而加深理解二维小波变换的分解与合成,同时,提高编程能力和matlab 的应用,为以后的学习打下基础。 实验原理: 1、Mallat 快速算法 本实验使用离散快速小波变换快速算法Mallat 算法,算法原理如下 1(2 )jjknnch nk c (1) 1(2 )jjknndg nk c (2) 重构算法: 1(2 )(2 )jjjnkknnch nk cg nk d (3) 对于(1)、(2)等效于1jnc 经过冲击响应为 hn和 gn的数字滤波器,然后再分别进行“二抽取”,Mallat 分解算法的滤波器表示形式如下图 Cj-1(k)dj(k)h[-n]h[-n]22Cj(k) 用滤波器表示如下图 dj(k)Cj(k)Cj-1(k)22h(k)g(k)+ 2、 255*25510lgPSNRMSE '211()*MNijijijffMSEMN {}ijf '{}ijf 分别表示原始图像和重建后的图像,1,1iMjN。 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]12jjjjjjcchhhhhhcchhhhncnhhhhhhc 以上矩阵等式左面是进行二抽样的结果,[0][1]2jjncc是j 分解的低频部分。同理,对于j 分解的高频部分有如下矩阵形式: 11100[0][1][2][3][4][5]001[1]00[0][1][2][3]00[1][2][3][4][5]00[0][1]12jjjjjddggggggddggggndnggggggd 分解程序: 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(...