MATLAB由一系列工具組成。這些工具方便用戶使用MATLAB的函數和文件,其中許多工具采用的是圖形用戶界面。包括MATLAB桌面和命令窗口、歷史命令窗口、編輯器和調試器、路徑搜索和用于用戶瀏覽幫助、工作空間、文件的瀏覽器。
隨著MATLAB的商業化以及軟件本身的不斷升級,MATLAB的用戶界面也越來越精致,更加接近Windows的標準界面,人機交互性更強,操作更簡單。而且新版本的MATLAB提供了完整的聯機查詢、幫助系統,極大的方便了用戶的使用。簡單的編程環境提供了比較完備的調試系統,程序不必經過編譯就可以直接運行,而且能夠及時地報告出現的錯誤及進行出錯原因分析。
新版本的MATLAB可以利用MATLAB編譯器和C/C++數學庫和圖形庫,將自己的MATLAB程序自動轉換為獨立于MATLAB運行的C和C++代碼。允許用戶編寫可以和MATLAB進行交互的C或C++語言程序。另外,MATLAB網頁服務程序還容許在Web應用中使用自己的MATLAB數學和圖形程序。
MATLAB的一個重要特色就是具有一套程序擴展系統和一組稱之為工具箱的特殊應用子程序。工具箱是MATLAB函數的子程序庫,每一個工具箱都是為某一類學科專業和應用而定制的,主要包括信號處理、控制系統、神經網絡、模糊邏輯、小波分析和系統仿真等方面的應用。
matlab小波分析源代碼
[x,map]=imread(‘MUCS_新建文件夾_32603.ptl_208.bmp’);
subplot(1,2,1);
imshow(x);
[c,s]=wavedec2(x,3,‘sym4’);
Csize=size(c);
for i=1:Csize(2)
if(c(i)》100) %低頻分量----s中第一維的長度
c(i)=1*c(i);
else
c(i)=0.9*c(i); %高頻分量
end
end
x1=waverec2(c,s,‘sym4’);
im=uint8(x1);
subplot(1,2,2);
imshow(im);
[c,s]=wavedec2(X,2,‘bior3.7’);%對圖像用小波進行層分解
cal=appcoef2(c,s,‘bior3.7’,1);%提取小波分解結構中的一層的低頻系數和高頻系數
ch1=detcoef2(‘h’,c,s,1);%水平方向
cv1=detcoef2(‘v’,c,s,1);%垂直方向
cd1=detcoef2(‘d’,c,s,1);%斜線方向
a1=wrcoef2(‘a’,c,s,‘bior3.7’,1);%各頻率成份重構
[c,s]=wavedec2(X,1,‘sym4’);
a1=appcoef2(c,s,‘sym4’,1);%小波分解結構中的一層的低頻系數,下面是3個高頻系數
a1=2*a1;
h1=detcoef2(‘h’,c,s,1);
v1=detcoef2(‘v’,c,s,1);
d1=detcoef2(‘d’,c,s,1);
h1=0.5*h1;
v1=0.5*v1;
d1=0.5*d1;
y=idwt2(a1,h1,v1,d1,‘sym4’);
load wbarb;
X1=X;map1=map;
subplot(2,2,1);
image(X1);colormap(map1);
title(‘圖像wbarb’);
load woman;
X2=X;map2=map;
subplot(2,2,2);
image(X2);colormap(map2);
title(‘圖像woman’);
%=====================================
%對上述二圖像進行分解
[c1,l1]=wavedec2(X1,2,‘sym4’);
[c2,l2]=wavedec2(X2,2,‘sym4’);
%對分解系數進行融合
c=c1+c2;
%=====================================
%應用融合系數進行圖像重構并顯示
XX=waverec2(c,l1,‘sym4’);
subplot(2,2,3);
image(XX);
title(‘融合圖像1’);
Csize1=size(c1);
%=====================================
%對圖像進行增強處理
for i=1:Csize1(2)
c1(i)=1.2*c1(i);
end
Csize2=size(c2);
for j=1:Csize2(2)
c2(j)=0.8*c2(j);
end
%=====================================
%通過減小融合系數以減小圖像的亮度
c=0.5*(c1+c2);
%=====================================
%對融合系數進行圖像重構
XXX=waverec2(c,l2,‘sym4’);
%=====================================
%顯示重構結果
subplot(2,2,4);
image(XXX);
title(‘融合圖像2’);
%本程序實現下述功能:首先讀入原始圖像,并對它使用db3小波進行2層分解,
%然后對分解系數進行處理突出所需,弱化不需要的部分
%裝載并顯示原始圖像
clear all;
clc;
load flujet;
subplot(1,2,1);
image(X);colormap(map);
title(‘原始圖像’);
%=====================================
%對圖像X用小波db3進行2層分解
[c,l]=wavedec2(X,2,‘db3’);
Csize=size(c);
%=====================================
%對分解系數作處理以突出所需部分并弱化不需要部分
for i=1:Csize(2)
if(c(i)》300) %低頻分量
c(i)=2*c(i);
else
c(i)=0.5*c(i); %高頻分量
end
end
%=====================================
%重構圖像并顯示
X1=waverec2(c,l,‘db3’);
subplot(1,2,2);
image(X1);colormap(map);
title(‘增強圖像’);
[c,s]=wavedec2(x,2,‘sym4’);
Csize=size(c);
for i=1:Csize(2)
if(c(i)》169) %低頻分量----s中第一維的長
度
c(i)=2*c(i);
else
c(i)=0.3*c(i); %高頻分量
end
end
x1=waverec2(c,s,‘sym4’);
im=uint8(x1);
imshow(im);
二維小波變換的 Matlab 實現
%o u n\ { K*Y
二維小波變換的函數
-------------------------------------------------
函數名 函數功能
---------------------------------------------------‘d3d t B e’x6g
dwt2 二維離散小波變換
wavedec2 二維信號的多層小波分解
idwt2 二維離散小波反變換
waverec2 二維信號的多層小波重構 z H!f6~)}-P _
wrcoef2 由多層小波分解重構某一層的分解信號0E,\ |.o | D T2@2b2K$U
upcoef2 由多層小波分解重構近似分量或細節分量
detcoef2 提取二維信號小波分解的細節分量
appcoef2 提取二維信號小波分解的近似分量
upwlev2 二維小波分解的單層重構
dwtpet2 二維周期小波變換4Y/a N&G q ] E B“H)W
idwtper2 二維周期小波反變換
-------------------------------------------------------------9O d7D ` b y
&lX { I g u s I `
(1) wcodemat 函數
功能:對數據矩陣進行偽彩色編碼
格式:Y=wcodemat(X,NB,OPT,ABSOL)‘k#e C a I%H
Y=wcodemat(X,NB,OPT) i)E)p _!O-k j J ^
Y=wcodemat(X,NB)
Y=wcodemat(X)
說明:Y=wcodemat(X,NB,OPT,ABSOL) 返回數據矩陣 X 的編碼矩陣 Y ;NB
偽編碼的最大值,即編碼范圍為 0~NB,缺省值 NB=16;
OPT 指定了編碼的方式(缺省值為 ’mat‘),即: r(o ? L j(y e f N
OPT=’row‘ ,按行編碼
OPT=’col‘ ,按列編碼
OPT=’mat‘ ,按整個矩陣編碼
ABSOL 是函數的控制參數(缺省值為 ’1‘),即: i x”^:| ~5{
ABSOL=0 時,返回編碼矩陣
ABSOL=1 時,返回數據矩陣的絕對值 ABS(X)
(2) dwt2 函數 D J ~0D/m S:O S“I
功能:二維離散小波變換 B c t _)h O X I
格式:[cA,cH,cV,cD]=dwt2(X,’wname‘)3A N _ W F
[cA,cH,cV,cD]=dwt2(X,Lo_D,Hi_D)
說明:[cA,cH,cV,cD]=dwt2(X,’wname‘)使用指定的小波基函數 ’wname‘ 對二維信號 X 進行二維離散小波變幻;cA,cH,cV,cD 分別為近似分量、水平細節分量、垂直細節分量和對角細節分量;[cA,cH,cV,cD]=dwt2(X,Lo_D,Hi_D) 使用指定的分解低通和高通濾波器 Lo_D 和 Hi_D 分解信號 X 。$K v*S X2^8G Q7? M _ d B(g”d
(3) wavedec2 函數
功能:二維信號的多層小波分解 H F S)b p$G:i
格式:[C,S]=wavedec2(X,N,’wname‘)
[C,S]=wavedec2(X,N,Lo_D,Hi_D)
說明:[C,S]=wavedec2(X,N,’wname‘) 使用小波基函數 ’wname‘ 對二維信號X 進行 N 層分解;[C,S]=wavedec2(X,N,Lo_D,Hi_D) 使用指定的分解低通和高通濾波器 Lo_D 和 Hi_D 分解信號 X 。7Y j ~ q5a H S4e1r
(4) idwt2 函數
功能:二維離散小波反變換
格式:X=idwt2(cA,cH,cV,cD,’wname‘)
X=idwt2(cA,cH,cV,cD,Lo_R,Hi_R)
X=idwt2(cA,c
H,cV,cD,’wname‘,S)
X=idwt2(cA,cH,cV,cD,Lo_R,Hi_R,S)
說明:X=idwt2(cA,cH,cV,cD,’wname‘) 由信號小波分解的近似信號 cA 和細節
信號 cH、cH、cV、cD 經小波反變換重構原信號 X
;X=idwt2(cA,cH,cV,cD,Lo_R,Hi_R) 使用指定的重構低通和高通濾波器 Lo_R
和 Hi_R 重構原信號 X ;X=idwt2(cA,cH,cV,cD,’wname‘,S)’z6Z e x;o
和 X=idwt2(cA,cH,cV,cD,Lo_R,Hi_R,S) 返回中心附近的 S 個數據點。
(5) waverec2 函數
說明:二維信號的多層小波重構
格式:X=waverec2(C,S,‘wname’)
X=waverec2(C,S,Lo_R,Hi_R)
說明:X=waverec2(C,S,‘wname’) 由多層二維小波分解的結果 C、S 重構原始信號 X ,‘wname’
為使用的小波基函數;X=waverec2(C,S,Lo_R,Hi_R) 使用重構低通和高通濾波器 Lo_R 和 Hi_R 重構原信號。 s)A ?*n i ?+G
matlab小波分析源代碼分析
1. 奇偶分開。
非常簡單,就是[2,4,6,8]組成一列向量,[1,3,5,7]組成一列向量。
2. 預測。
用[2,4,6,8]來預測[1,3,5,7]。比如說1,3估計2; 3,5估計4; 5,7估計6; 7,1估計8。(邊緣處理,我采用循環方法)。估計公式可以用別人的,也可以自己做。舉一個線性的例子:2=1*a+3*b,4=3*a+ 5*b,。。.,其他的都一樣。這樣我們就可找到最優的a,b,使得(2-(1*a+3*b)).^2+(4-(3*a+5*b)).^2+.。。最小化。就是最小均方準則。若正好為零,說明偶可以完全預測奇,也就是我們只要存儲偶數列向量,和a,b就可以了,壓縮也就是實現了。對于信號很長序列,就等于壓縮了一半。當然,我們可以采用更復雜的立方差值預測,多項式預測,或其它的準則,來使其最小,這樣我們的壓縮也就得到了最優。
3. 提升。
我們總希望,均方為零,但可望不可及。于是,提升就需要了。我們經過預測后,要存儲的是偶數序列[2,4,6,8],新的奇數序列[n1,n3,n5, n7]=[2-(1*a+3*b),4-(3*a+5*b),。。.]和線性變換系數(a,b)。這里新的奇數序列就是高頻分量。但偶數序列是不能完全代表信號的性質的,有所差距。所以我們要對偶數序列進行修正。即所謂的提升。我們這次用個簡單的提升吧。[n2,n4,n6,n8]=[2,4,6,8]+ k*[n1,n3,n5,n7]。[n2,n4,n6,n8],就是要分解的低頻分量。那k怎么求呢?因為要保持n2,n4,n6,n8和原始信號 [1,2,3,4,5,6,7,8]一樣的性質。一般就是均值和高階矩。這里就一個未知數k,所以用均值相等,就行了。1/8*(1+2+3+..8)= 1/4*(n2+n4+n6+n8)。k很容易就求出來了。我們最終存儲的就是[n1,n3,n5,n7]和[n2,n4,n6,n8]以及a,b,k。
現在,所謂的第二代就完了。再說幾句。
1.反變換,就是3-》2-》1。
2.二維。先行提升,再列提升。(我置頂的貼子里有harr二維提升的源代碼)。
3.整數階。就是加一個取整。
4.多層或小波包提升,就是在對序列[n1,n3,n5,n7]或[n2,n4,n6,n8],再做1-》2-》3。
5.靈活。不一定是a,b,也可能就一個a,或a,b,c;不一定是一個k,也可能是k1,k2。但越多計算量太大。最好是用大師們做好的CDF,5/3,7/9等。
6.最重要的,任何一代小波,總可以通過一次或多次提升實現。它和一代小波沒有本質區別。
7.優勢。文獻都有,我隨便談談。時域實現,最優壓縮,無邊緣效應,靈活多變,無損壓縮,編程方便,速度快。
文章寫完了,希望對大家有幫助。最主要的,動手編,不要依賴MATLABM,這樣才有所體會。希望和大家多交流。
給 simon21 加一點人氣
評論
查看更多