MATLAB圖像處理中的小波變換

在Matlab圖像處理中,小波變換對應的函數都有下面這些:

1、

dwt2 二維離散小波變換

[cA,cH,cV,cD]=dwt2(X,"wname")%使用指定的小波基函數對矩陣X進行二維離散小波變換[cA,cH,cV,cD]=dwt2(X,Lo_D,Hi_D) %使用指定的低通濾波器Lo_D和高通濾波器Hi_D分解信號 %cA--近似分量(低頻分量);cH--水平方向細節分量 cV--垂直方向細節分量;cD--對角方向細節分量

這個代碼寫起來就很簡單啦~~~奉上代碼

A=imread("lena.png");[cA,cH,cV,cD]=dwt2(A,"haar");%使用haar小波figure,imshow(A);title("原圖");figure,subplot(2,2,1),imshow(uint8(cA)),title("低頻分量");subplot(2,2,2),imshow(uint8(cH)),title("水平細節分量");subplot(2,2,3),imshow(uint8(cV)),title("垂直細節分量");subplot(2,2,4),imshow(uint8(cD)),title("對角線細節分量");

2、

wavedec2 二維多尺度分解

[C,S]=wavedec2(X,N,"wname")%使用指定的小波基函數對矩陣X進行N層分解[C,S]=wavedec2(X,N,Lo_D,Hi_D)%使用指定的低通濾波器Lo_D和高通濾波器Hi_D分解信號為N層; %C為各層分解係數,S為各層分解係數的大小(行數及列數)

在這裡,一開始我對這個函數的理解是比較困難的,後來通過一段程序輔助了一下理解:

查閱一些博客,才知道

c=[A(N)|H(N)|V(N)|D(N)|H(N-1)|V(N-1)|D(N-1)|H(N-2)|V(N-2)|D(N-2)|...|H(1)|V(1)|D(1)]

s=[m(A(N)) n(A(N)); m(|H(N)|V(N)|D(N)) n(|H(N)|V(N)|D(N));

m(|H(1)|V(1)|D(1)) n(|H(1)|V(1)|D(1));m(X) n(X)]

(ps!!!!!!這張Matlab幫助文檔里的圖比我列的清楚多了,看不懂在看我的,(*^__^*) 嘻嘻……)

A(N)為第N層低頻係數(近似分量),H(N)|V(N)|D(N)對應高頻係數,分別對應水平高頻分量|垂直高頻分量||對角方向高頻分量

c的矩陣如下圖所示

可以看出c實際上是一個1×117307的行向量(圖像大小341*341=117307),c以行向量的形式存儲了個分量中所有的值;

工作區各變數的大小如圖所示,原圖的大小為341×341,第一層分解得出的各分量大小為171×171,第二層分解各分量大小為86×86。

clc,clear all,close all;X=imread("3.bmp");[c,s]=wavedec2(X,2,"db1");%進行2尺度二維離散小波分解。分解小波函數-db1[cH1,cV1,cD1]=detcoef2("all",c,s,1);%尺度1的所有方向的高頻係數[cH2,cV2,cD2]=detcoef2("all",c,s,2);%尺度2的所有方向的高頻係數cA1=appcoef2(c,s,"db1",1);%尺度1的低頻係數cA2=appcoef2(c,s,"db1",2);%尺度2的低頻係數figure,imshow(X);title("原圖");figure;subplot(1,2,1),imshow(uint8(cA1));axis off;title("尺度1的低頻係數圖像");subplot(1,2,2),imshow(uint8(cA2));axis off;title("尺度2的低頻係數圖像");figure;subplot(2,3,1),imshow(uint8(cH1));axis off;title("尺度1水平方向高頻係數");subplot(2,3,2),imshow(uint8(cV1));axis off;title("尺度1垂直方向高頻係數");subplot(2,3,3),imshow(uint8(cD1));axis off;title("尺度1斜線方向高頻係數");subplot(2,3,4),imshow(uint8(cH2));axis off;title("尺度2水平方向高頻係數");subplot(2,3,5),imshow(uint8(cV2));axis off;title("尺度2垂直方向高頻係數");subplot(2,3,6),imshow(uint8(cD2));axis off;title("尺度2斜線方向高頻係數");

照例奉上lena小姐姐。。。。。

最後,上一些常見的小波,MATLAB幫助搜索waveinfo可以找到~

(例如,搜索haar小波,waveinfo("haar"))

今天學習的內容大概就是這樣,至於關於小波變換的原理,我打算再深入學習一下再寫成筆記~~~~嘿嘿嘿~~~~~


推薦閱讀:

plot 中哪些顏色線形搭配會讓圖好看些?
已知橢圓5個點,用數學軟體求橢圓周長?
請問誰有非同步電機abc_to_dq0坐標轉換模塊?
matlab 函數返回值列表太長,覺得醜陋,怎麼辦?
Mathematica 為什麼沒有像matlab一樣的clear 和clc功能?

TAG:图像处理 | MATLAB |