?? test.m
字號:
function []=test(mypic,wavename,threshold);
% 該函數(shù)是本課程設計的主函數(shù),它根據(jù)對所輸入的png格式的真彩圖像、小波類型(db9或haar)和相應的閾值進行了
% 三級非標準小波harr或db9的分解和重構,從而達到了對原圖像的壓縮處理的目的。
% 它首先把通過原圖像分離后的某顏色分量作為二維圖像矩陣,通過調用自定義的二維離散小波變換函數(shù)mydwt2(),
% 并依據(jù)指定的小波基函數(shù)'wavename'進行二維離散的行、列小波變換,得到了經變換后的相應顏色分量的近似分量
% cA,水平細節(jié)分量cH,垂直細節(jié)分量cV,對角細節(jié)分量cD和中間分量cM,然后調用自定義的圖像輸出函數(shù)outrgb分別
% 把中間分量以及cA、cH、cV、cD合并后的圖像陣進行R、G、B合成輸出圖像文件,其中某顏色分量的cA又做為下一級
% 二維離散的行、列小波分解的輸入圖像陣,如此共完成三次。
% 其次,把經過三級非標準小波分解后的各顏色分量的各級水平細節(jié)分量、垂直細節(jié)分量、對角細節(jié)分量矩陣通過調用
% 自定義函數(shù)make_0()完成了相應矩陣元素數(shù)值小于閥值系數(shù)的個數(shù)統(tǒng)計,并對它們進行小于閥值系數(shù)元素置0處理,且
% 把分量盡數(shù)返回,以便三級的非標準小波重構處理。
% 最后,將返回得到的各顏色分量的第三級水平細節(jié)分量、垂直細節(jié)分量、對角細節(jié)分量矩陣和第三級分解后的近似分
% 量作為參數(shù),通過調用自定義的二維離散小波反變換函數(shù)myidwt2()進行二維離散的列、行重構,得到了經重構后的
% 近似分量cA 和中間分量cM,把該中間分量cM以及近似分量cA分別和經置0處理后第二級cH、cV、cD行列擴展,同時進
% 行R、G、B合成,后調用自定義的圖像輸出函數(shù)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')
% 統(tǒng)計經過三級非標準小波分解后的各顏色分量的各級水平細節(jié)分量、垂直細節(jié)分量、對角細節(jié)分量的相應矩陣元素數(shù)
% 值小于閥值系數(shù)的個數(shù),并對它們進行小于閥值系數(shù)元素置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的總數(shù)寫入文本文件
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 + -