当前位置 :
【求两层小波分解,观察分解系数并重构,求重构图像误差值.】
更新时间:2024-04-27 23:06:30
1人问答
问题描述:

求两层小波分解,观察分解系数并重构,求重构图像误差值.

毛艳回答:
  clear;clc;   %%%%%%%%%%测试图像只能是方形图像,长宽像素一样.   f=imread('Lena.bmp');%%读取图像数据,图像只能保存在m文件所在的路径下   d=size(f);   iflength(d)>2   f=rgb2gray((f));%%%%%%%%如果是彩色图像则转化为灰度图   end   T=d(1);   SUB_T=T/2;   %2.进行二维小波分解   l=wfilters('db10','l');%db10(消失矩为10)低通分解滤波器冲击响应(长度为20)   L=T-length(l);   l_zeros=[l,zeros(1,L)];%矩阵行数与输入图像一致,为2的整数幂   h=wfilters('db10','h');%db10(消失矩为10)高通分解滤波器冲击响应(长度为20)   h_zeros=[h,zeros(1,L)];%矩阵行数与输入图像一致,为2的整数幂   fori=1:T;%列变换   row(1:SUB_T,i)=dyaddown(ifft(fft(l_zeros).*fft(f(:,i)'))).';%圆周卷积FFT   row(SUB_T+1:T,i)=dyaddown(ifft(fft(h_zeros).*fft(f(:,i)'))).';%圆周卷积FFT   end;   forj=1:T;%行变换   line(j,1:SUB_T)=dyaddown(ifft(fft(l_zeros).*fft(row(j,:))));%圆周卷积FFT   line(j,SUB_T+1:T)=dyaddown(ifft(fft(h_zeros).*fft(row(j,:))));%圆周卷积FFT   end;   decompose_pic=line;%分解矩阵   %图像分为四块   lt_pic=decompose_pic(1:SUB_T,1:SUB_T);%在矩阵左上方为低频分量--fi(x)*fi(y)   rt_pic=decompose_pic(1:SUB_T,SUB_T+1:T);%矩阵右上为--fi(x)*psi(y)   lb_pic=decompose_pic(SUB_T+1:T,1:SUB_T);%矩阵左下为--psi(x)*fi(y)   rb_pic=decompose_pic(SUB_T+1:T,SUB_T+1:T);%右下方为高频分量--psi(x)*psi(y)   %3.分解结果显示   figure(1);   subplot(2,1,1);   imshow(f,[]);%原始图像   title('originalpic');   subplot(2,1,2);   image(abs(decompose_pic));%分解后图像   title('decomposedpic');   figure(2);   %colormap(map);   subplot(2,2,1);   imshow(abs(lt_pic),[]);%左上方为低频分量--fi(x)*fi(y)   title('Phi(x)*Phi(y)');   subplot(2,2,2);   imshow(abs(rt_pic),[]);%矩阵右上为--fi(x)*psi(y)   title('Phi(x)*Psi(y)');   subplot(2,2,3);   imshow(abs(lb_pic),[]);%矩阵左下为--psi(x)*fi(y)   title('Psi(x)*Phi(y)');   subplot(2,2,4);   imshow(abs(rb_pic),[]);%右下方为高频分量--psi(x)*psi(y)   title('Psi(x)*Psi(y)');   %5.重构源图像及结果显示   %construct_pic=decompose_matrix'*decompose_pic*decompose_matrix;   l_re=l_zeros(end:-1:1);%重构低通滤波   l_r=circshift(l_re',1)';%位置调整   h_re=h_zeros(end:-1:1);%重构高通滤波   h_r=circshift(h_re',1)';%位置调整   top_pic=[lt_pic,rt_pic];%图像上半部分   t=0;   fori=1:T;%行插值低频   if(mod(i,2)==0)   topll(i,:)=top_pic(t,:);%偶数行保持   else   t=t+1;   topll(i,:)=zeros(1,T);%奇数行为零   end   end;   fori=1:T;%列变换   topcl_re(:,i)=ifft(fft(l_r).*fft(topll(:,i)'))';%圆周卷积FFT   end;   bottom_pic=[lb_pic,rb_pic];%图像下半部分   t=0;   fori=1:T;%行插值高频   if(mod(i,2)==0)   bottomlh(i,:)=bottom_pic(t,:);%偶数行保持   else   bottomlh(i,:)=zeros(1,T);%奇数行为零   t=t+1;   end   end   这个只是一级分解,matlab自带的函数可以实现多级分解,级数由编程者自己确定.
最新更新
查询网(q821.com)汇总了汉语字典,新华字典,成语字典,组词,词语,在线查字典,中文字典,英汉字典,在线字典,康熙字典等等,是学生查询学习资料的好帮手,是老师教学的好助手。
声明:本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
Copyright©2009-2021 查询网 q821.com 版权所有 闽ICP备19006478号-19