实验三图像变换自编小波函数.doc_第1页
实验三图像变换自编小波函数.doc_第2页
实验三图像变换自编小波函数.doc_第3页
实验三图像变换自编小波函数.doc_第4页
实验三图像变换自编小波函数.doc_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验三 图像变换姓名: 学号: 邮箱:一、 实验目的1. 掌握小波变换的原理与方法2. 了解小波变换在图像变换中的应用3. 理解小波变换的特点4. 熟悉MATLAB编程二、 实验原理一个2-D缩放函数u(x,y)和三个2-D小波函数,(其中上标H,V和D分别指示水平,垂直和对角方向)它们每一个都是1-D缩放函数u和对应的小波函数v的乘积: 其中u(x,y)是一个可分离的缩放函数,而,是三个对方向敏感的小波函数。 先定义缩放和平移的基函数: 然后就可得到尺寸为的2-D图像f(x,y)的离散小波变换 通过离散小波反变换得到f(x,y)三、 实验内容 快速小波变换(Mallat小波分解算法):对一幅图像做2级小波分解(离散小波变换)与合成(离散小波反变换)1、自己编写离散小波变换与离散小波反变换程序,小波函数自选(例如哈尔函数等)。2、直接调用MATLAB 2-D图像小波变换与反变换函数,重复上述实验。四、 实验过程与结果1.自已编写的MATLAB程序如下(先列出主程序,然后给出各功能子程序的程序):clear all;load(lena.mat)%调入170*170大小的一幅彩色lena图像 l=imresize(lena,256 256);%将图像变换为8的整数倍大小K=rgb2gray(l);x=double(K);%将图像转换为双精度类型 LL1,HL1,LH1,HH1=mydwt2(x);LL2,HL2,LH2,HH2=mydwt2(LL1); row,col=size(x); % 求出缓存矩阵的行列数y2(1:row/2,1:col/2)=LL2,HL2;LH2,HH2; y1(1:row,1:col)=y2,HL1;LH1,HH1; figureimshow(y1,);title(二层小波分解后图像)其中,主程序所要用到的各个功能子函数程序如下:一维离散小波变换mydwt子程序如下:function cA,cD = mydwt(x,lpd,hpd,dim)% 一维离散小波分解,输出分解序列cA,cD,lpd低通滤波器; hpd高通滤波器;dim小波分解级数。输出参数:cA平均部分的小波分解系数;cD细节部分的小波分解系数。cA=x; % 初始化cA,cDcD=;for i=1:dim cvl=conv(cA,lpd); % 低通滤波 dnl=downspl(cvl); % 下抽样求平均部分分解系数 cvh=conv(cA,hpd); % 高通滤波 dnh=downspl(cvh); % 下抽样求出本层分解后的细节部分系数 cA=dnl; % 下抽样后的平均部分系数进入下一层分解 cD=cD,dnh; % 将本层分解细节系数存入序列cDendend二维离散小波变换mydwt2子程序如下:function LL,HL,LH,HH=mydwt2(x)% 二维小波分解,输出参数:LL,HL,LH,HH 是分解系数矩阵的四个相等大小的子矩阵,大小均为 r/2 * c/2 维lpd=1/2 1/2;hpd=-1/2 1/2; % 默认的低通、高通滤波器row,col=size(x); % 读取输入矩阵的大小 for j=1:row % 对输入矩阵每一行进行一维离散小波分解 tmp1=x(j,:); ca1,cd1=mydwt(tmp1,lpd,hpd,1); x(j,:)=ca1,cd1; %将分解系数序再存入矩阵x中endfor k=1:col % 对输入矩阵的每一列一维离散小波分解 tmp2=x(:,k); ca2,cd2=mydwt(tmp2,lpd,hpd,1); x(:,k)=ca2,cd2; % 将分解系数存入矩阵x中,得到LL,Hl;LH,HHendLL=x(1:row/2,1:col/2); LH=x(row/2+1:row,1:col/2); HL=x(1:row/2,col/2+1:col); HH=x(row/2+1:row,col/2+1:col); end下抽样子程序downspl如下:function y=downspl(x)% 下抽样是对输入序列取其偶数位,舍弃奇数位。例如 x=x1,x2,x3,x4,x5,则 y=x2,x4.N=length(x); % 读取输入序列长度M=floor(N/2); % 输出序列的长度是输入序列长度的一半(带小数时取整数部分)i=1:M;y(i)=x(2*i); End上抽样子程序upspl如下:function y=upspl(x)% 函数 Y = UPSPL(X) 对输入的一维序列x进行上抽样,即对序列x每个元素之间y=x1,0,x2,0,x3,0,x4;N=length(x); % 读取输入序列长度M=2*N-1; % 输出序列的长度是输入序列长度的2倍再减一for i=1:M % 输出序列的偶数位为0,奇数位按次序等于相应位置的输入序列元素 if mod(i,2) y(i)=x(i+1)/2); else y(i)=0; endend end一维小波逆变换myidwt子程序:function y = myidwt(cA,cD,lpr,hpr);% 函数 MYIDWT() 对输入的小波分解系数进行逆离散小波变换,重构出信号序列 y,cA 平均部分的小波分解系数;cD 细节部分的小波分解系数;lpr、hpr 重构所用的低通、高通滤波器。lca=length(cA); % 求出平均、细节部分分解系数的长度lcd=length(cD);while (lcd)=(lca) % 每一层重构中,cA 和 cD 的长度要相等,故每层重构后 upl=upspl(cA); % 对平均部分系数进行上抽样 cvl=conv(upl,lpr); % 低通卷积 cD_up=cD(lcd-lca+1:lcd); % 取出本层重构所需的细节部分系数,长度与本层平均部分系数的长度相等 uph=upspl(cD_up); % 对细节部分系数进行上抽样 cvh=conv(uph,hpr); % 高通卷积 cA=cvl+cvh; % 用本层重构的序列更新cA,以进行下一层重构 cD=cD(1:lcd-lca); % 舍弃本层重构用到的细节部分系数,更新cD lca=length(cA); % 求出下一层重构所用的平均、细节部分系数的长度 lcd=length(cD);end % lcd lca,重构完成,结束循环y=cA; % 输出的重构序列 y 等于重构完成后的平均部分系数序列 cAend二维小波逆变换myidwt2子程序:function y=myidwt2(LL,HL,LH,HH);% 函数 MYIDWT2() 对输入的子矩阵序列进行逆小波变换,lpr=1 1;hpr=1 -1; % 默认的低通、高通滤波器tmp_mat=LL,HL;LH,HH; % 将输入的四个矩阵组合为一个矩阵row,col=size(tmp_mat); % 求出组合矩阵的行列数 for k=1:col % 首先对组合矩阵tmp_mat的每一列,分开成上下两半 ca1=tmp_mat(1:row/2,k); % 分开的两部分分别作为平均系数序列ca1、细节系数序列cd1 cd1=tmp_mat(row/2+1:row,k); tmp1=myidwt(ca1,cd1,lpr,hpr); % 重构序列 yt(:,k)=tmp1; % 将重构序列存入待输出矩阵 yt 的相应列,此时 y=L|Hendfor j=1:row % 将输出矩阵 y 的每一行,分开成左右两半 ca2=yt(j,1:col/2); % 分开的两部分分别作为平均系数序列ca2、细节系数序列cd2 cd2=yt(j,col/2+1:col); tmp2=myidwt(ca2,cd2,lpr,hpr); % 重构序列 yt(j,:)=tmp2; % 将重构序列存入待输出矩阵 yt 的相应行,得到最终的输出矩阵 y=ytendy=yt;end程序运行结果如下:2. 使用系统自带小波函数进行小波分解与重构,程序如下:clear all;load(lena.mat)%调入170*170大小的一幅彩色lena图像 l=imresize(lena,256 256);%将图像变换为8的整数倍大小K=rgb2gray(l);x=double(K);%将图像转换为双精度类型c,s = wavedec2(x,2,db1);%两层二维小波分解,使用db1小波app1 = appcoef2(c,s,db1,1);%取得第一层分解后的近似系数chd1,cvd1,cdd1 = detcoef2(all,c,s,1);%取得第一层分解后的各细节系数app2 = appcoef2(c,s,db1,2);%取得第二层分解后的近似系数chd2,cvd2,cdd2 = detcoef2(all,c,s,2);%取得第二层分解后的各细节系数I_wave1=app1,chd1;cvd1,cdd1;%第一层分解后系数I_wave2=app2,chd2;cvd2,cdd2;%第二层分解后系数I_wave3=I_wave2,chd1;cvd1,cdd1;%二层分解后最终的全部系数figureimshow(mat2gray(I_wave3),);title(二层离散小波分解后图像)Y=waverec2(c,s,db1);%使用db1小波进行两层二维小波重构figureimshow(Y,);title(二层离散小波重构图像)结果如下:五、 实验总结通过自已编写Matlab功能子函数,我熟悉了Matlab的编程技巧,而且通过与直接调用系统函数所得的结果进行观察比较发现,自己所编写的程序较好的实现了实验所要求的功能。另外注意到,小波变换后,图像左上角表现了图像的低频分量,它是构成图像信

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论