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

📄 test.m

📁 在MATLAB中编写实现图像的不同级别小波分解算法;2选择合适的小波基;3对经典的几幅黑白和彩色图像进行DWT变换;4实现零树、基于塔式网格矢量量化、基于LBG算法、基于标量量化等小波变换编码;5得到
💻 M
字号:
function []=test(mypic,wavename,threshold);
% 该函数是本课程设计的主函数,它根据对所输入的png格式的真彩图像、小波类型(db9或haar)和相应的阈值进行了
% 三级非标准小波harr或db9的分解和重构,从而达到了对原图像的压缩处理的目的。
% 它首先把通过原图像分离后的某颜色分量作为二维图像矩阵,通过调用自定义的二维离散小波变换函数mydwt2(),
% 并依据指定的小波基函数'wavename'进行二维离散的行、列小波变换,得到了经变换后的相应颜色分量的近似分量
% cA,水平细节分量cH,垂直细节分量cV,对角细节分量cD和中间分量cM,然后调用自定义的图像输出函数outrgb分别
% 把中间分量以及cA、cH、cV、cD合并后的图像阵进行R、G、B合成输出图像文件,其中某颜色分量的cA又做为下一级
% 二维离散的行、列小波分解的输入图像阵,如此共完成三次。
% 其次,把经过三级非标准小波分解后的各颜色分量的各级水平细节分量、垂直细节分量、对角细节分量矩阵通过调用
% 自定义函数make_0()完成了相应矩阵元素数值小于阀值系数的个数统计,并对它们进行小于阀值系数元素置0处理,且
% 把分量尽数返回,以便三级的非标准小波重构处理。
% 最后,将返回得到的各颜色分量的第三级水平细节分量、垂直细节分量、对角细节分量矩阵和第三级分解后的近似分
% 量作为参数,通过调用自定义的二维离散小波反变换函数myidwt2()进行二维离散的列、行重构,得到了经重构后的
% 近似分量cA 和中间分量cM,把该中间分量cM以及近似分量cA分别和经置0处理后第二级cH、cV、cD行列扩展,同时进
% 行R、G、B合成,后调用自定义的图像输出函数outrgb()输出图像文件。其中各颜色分量的cA又做为下一级二维离散
% 的列、行小波重构的输入图像阵,如此共完成三次。最终得到了压缩处理的图像文件。

% 读入图像文件
picchar=strcat(mypic,'.png')
pic=imread(picchar);
pic=double(pic);

%对原真彩图像进行R、G、B分离
cAr0=pic(:,:,1);cAg0=pic(:,:,2);cAb0=pic(:,:,3);

% 第1级非标准分解
[cAr1,cHr1,cVr1,cDr1,cMr1] = mydwt2(cAr0,wavename);
[cAg1,cHg1,cVg1,cDg1,cMg1] = mydwt2(cAg0,wavename);
[cAb1,cHb1,cVb1,cDb1,cMb1] = mydwt2(cAb0,wavename);

% 输出经第1级非标准分解后的图像文件
outrgb(cMr1,cMg1,cMb1,wavename,threshold,'_1_row');
outrgb(merge(cAr1,cHr1,cVr1,cDr1),merge(cAg1,cHg1,cVg1,cDg1),merge(cAb1,cHb1,cVb1,cDb1),wavename,threshold,'_1_col');

% 第2级非标准分解
[cAr2,cHr2,cVr2,cDr2,cMr2] = mydwt2(cAr1,wavename);
[cAg2,cHg2,cVg2,cDg2,cMg2] = mydwt2(cAg1,wavename);
[cAb2,cHb2,cVb2,cDb2,cMb2] = mydwt2(cAb1,wavename);
% 输出经第2级非标准分解后的图像文件
outrgb(merge(cMr2,cHr1,cVr1,cDr1),merge(cMg2,cHg1,cVg1,cDg1),merge(cMb2,cHb1,cVb1,cDb1),wavename,threshold,'_2_row');
outrgb(merge(merge(cAr2,cHr2,cVr2,cDr2),cHr1,cVr1,cDr1),merge(merge(cAg2,cHg2,cVg2,...
    cDg2),cHg1,cVg1,cDg1),merge(merge(cAb2,cHb2,cVb2,cDb2),cHb1,cVb1,cDb1),wavename,threshold,'_2_col');

% 第3级非标准分解
[cAr3,cHr3,cVr3,cDr3,cMr3] = mydwt2(cAr2,wavename);
[cAg3,cHg3,cVg3,cDg3,cMg3] = mydwt2(cAg2,wavename);
[cAb3,cHb3,cVb3,cDb3,cMb3] = mydwt2(cAb2,wavename);

% 输出经第2级非标准分解后的图像文件
outrgb(merge(merge(cMr3,cHr2,cVr2,cDr2),cHr1,cVr1,cDr1),merge(merge(cMg3,cHg2,cVg2,cDg2),...
   cHg1,cVg1,cDg1),merge(merge(cMb3,cHb2,cVb2,cDb2),cHb1,cVb1,cDb1),wavename,threshold,'_3_row');
outrgb(merge(merge(merge(cAr3,cHr3,cVr3,cDr3),cHr2,cVr2,cDr2),cHr1,cVr1,cDr1),merge(merge(merge(cAg3,cHg3,cVg3,cDg3),cHg2,cVg2,cDg2),cHg1,cVg1,cDg1),...
    merge(merge(merge(cAb3,cHb3,cVb3,cDb3),cHb2,cVb2,cDb2),cHb1,cVb1,cDb1),wavename,threshold,'_3_col')

% 统计经过三级非标准小波分解后的各颜色分量的各级水平细节分量、垂直细节分量、对角细节分量的相应矩阵元素数
% 值小于阀值系数的个数,并对它们进行小于阀值系数元素置0处理。
zeronum=0;
[cHr3,cVr3,cDr3,cHr2,cVr2,cDr2,cHr1,cVr1,cDr1,num_0]=make_0(cHr3,cVr3,cDr3,cHr2,cVr2,cDr2,cHr1,cVr1,cDr1,threshold);
zeronum=zeronum+num_0;
[cHg3,cVg3,cDg3,cHg2,cVg2,cDg2,cHg1,cVg1,cDg1,num_0]=make_0(cHg3,cVg3,cDg3,cHg2,cVg2,cDg2,cHg1,cVg1,cDg1,threshold);
zeronum=zeronum+num_0;
[cHb3,cVb3,cDb3,cHb2,cVb2,cDb2,cHb1,cVb1,cDb1,num_0]=make_0(cHb3,cVb3,cDb3,cHb2,cVb2,cDb2,cHb1,cVb1,cDb1,threshold);
zeronum=zeronum+num_0;
% 把0的总数写入文本文件
zerotxt=strcat(wavename,'_',threshold,'_','zero','.txt')
csvwrite(zerotxt,zeronum);

% 第1级非标准重构
[cAr2,cMr3] = myidwt2(cAr3,cHr3,cVr3,cDr3,wavename);
[cAg2,cMg3] = myidwt2(cAg3,cHg3,cVg3,cDg3,wavename);
[cAb2,cMb3] = myidwt2(cAb3,cHb3,cVb3,cDb3,wavename);

% 输出经第1级非标准重构后的图像文件
outrgb(merge(merge(cMr3,cHr2,cVr2,cDr2),cHr1,cVr1,cDr1),merge(merge(cMg3,cHg2,cVg2,cDg2),...
   cHg1,cVg1,cDg1),merge(merge(cMb3,cHb2,cVb2,cDb2),cHb1,cVb1,cDb1),wavename,threshold,'_1_icol');
outrgb(merge(merge(cAr2,cHr2,cVr2,cDr2),cHr1,cVr1,cDr1),merge(merge(cAg2,cHg2,cVg2,...
    cDg2),cHg1,cVg1,cDg1),merge(merge(cAb2,cHb2,cVb2,cDb2),cHb1,cVb1,cDb1),wavename,threshold,'_1_irow')

% 第2级非标准重构
[cAr1,cMr2] = myidwt2(cAr2,cHr2,cVr2,cDr2,wavename);
[cAg1,cMg2] = myidwt2(cAg2,cHg2,cVg2,cDg2,wavename);
[cAb1,cMb2] = myidwt2(cAb2,cHb2,cVb2,cDb2,wavename);

% 输出经第2级非标准重构后的图像文件
outrgb(merge(cMr2,cHr1,cVr1,cDr1),merge(cMg2,cHg1,cVg1,cDg1),merge(cMb2,cHb1,cVb1,cDb1),wavename,threshold,'_2_icol');
outrgb(merge(cAr1,cHr1,cVr1,cDr1),merge(cAg1,cHg1,cVg1,cDg1),merge(cAb1,cHb1,cVb1,cDb1),wavename,threshold,'_2_irow');

% 第3级非标准重构
[cAr0,cMr1] = myidwt2(cAr1,cHr1,cVr1,cDr1,wavename);
[cAg0,cMg1] = myidwt2(cAg1,cHg1,cVg1,cDg1,wavename);
[cAb0,cMb1] = myidwt2(cAb1,cHb1,cVb1,cDb1,wavename);

% 输出经第3级非标准重构后的图像文件,即最终图像文件
outrgb(cMr1,cMg1,cMb1,wavename,threshold,'_3_icol');
outrgb(cAr0,cAg0,cAb0,wavename,threshold,'_result');

⌨️ 快捷键说明

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