⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 modetest.m

📁 不同小波在不同分解模式下3级分解与重构图像演示程序
💻 M
字号:
function modetest(imgname,wavename,mode)
%modetest 不同小波在不同分解模式下3级分解与重构图像演示程序
%modetest(imgname,wavename,mode)
%输入:imgname 图像文件
% wavename 小波名称
% mode 分解模式(sym,per,zpd,spd,sp0,ppd)
%缺省为black256.png,db9小波,sym分解模式
%装载图像为黑白索引图像,X中含有被装载的信号,map中含有被装载的color
if nargin==0

    imgname='black256.png';

    wavename='db9';

    mode='sym';

else 

    if nargin==1

        wavename='db9';

        mode='sym';

    else 

        mode='sym';

    end 

end 

  

[X,map] = imread(imgname);

deccof=struct('cA',[],'cH',[],'cV',[],'cD',[]);

reccof=struct('RX',[]);

sX=size(X);

nbcol=size(map,1);

X=double(X);

%画出原始图像 

figure(1);

subplot(241);imshow(uint8(X));colormap(map);

title(strcat('原始图像(',wavename,'小波)'));

ylabel(strcat('3级分解与重构演示图(',mode,'模式)'));

xlabel(mat2str(sX));

axis square

DX=X;

deccof(1).cA=X;

for i=2:4

    %用小波函数进行分解 

    [deccof(i).cA,deccof(i).cH,deccof(i).cV,deccof(i).cD]=dwt2(DX,wavename,'mode',mode);

   

    %画出各分解系数对应的图像 

    subplot(2,4,i);

    imshow([deccof(i).cA/255,deccof(i).cH/255;deccof(i).cV/255,deccof(i).cD/255;]);colormap(map);

    title(strcat(int2str(i-1),'级分解系数图像'));

    xlabel(mat2str(2*size(deccof(i).cA)));

    axis square;

    DX=deccof(i).cA;

end 

reccof(i).RX=deccof(i).cA;

i=i+4;

for j=4:-1:2

    %画出每级重构的图像 

    figure(1);

    subplot(2,4,i);imshow([reccof(j).RX/255,deccof(j).cH/255;deccof(j).cV/255,deccof(j).cD/255]);

    if j==3

        title(strcat(int2str(j-1),'级分解系数图像'));

    else 

        title(strcat('重构',int2str(j-1),'级系数图像'));

    end 

    axis square;

    xlabel(mat2str(2*size(reccof(j).RX)));

  

    %利用分解系数进行直接重构 

    reccof(j-1).RX=idwt2(reccof(j).RX,deccof(j).cH,deccof(j).cV,deccof(j).cD,wavename,size(deccof(j-1).cA),'mode',mode) ;

    i=i-1;

end 

%检查重构误差 

A0max1=max(max(abs(X-reccof(1).RX)));

A0max2=prod(size(find(abs((X-(reccof(1).RX)))~=0)));

subplot(245);imshow(reccof(1).RX/255);colormap(map);

title('系数重构图像');

axis square;

xlabel(mat2str(size(reccof(1).RX)));

ylabel(strcat('最大重构误差=',num2str(A0max1)));

%xlabel(strcat('有误差值的数量=',num2str(A0max2)));

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -