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