1. 離散傅立葉變換的 Matlab 實現
Matlab 函數 fft、fft2 和 fftn 分別可以實現一維、二維和 N 維 DFT 算法;而函數 ifft、ifft2 和 ifftn 則用來計算反 DFT 。這些函數的調用格式如下:
A=fft(X,N,DIM)
其中,X 表示輸入圖像;N 表示採樣間隔點,如果 X 小於該數值,那麼 Matlab 將會對 X 進行零填充,否則將進行截取,使之長度爲 N ;DIM 表示要進行離散傅立葉變換。
A=fft2(X,MROWS,NCOLS)
其中,MROWS 和 NCOLS 指定對 X 進行零填充後的 X 大小。
A=fftn(X,SIZE)
其中,SIZE 是一個向量,它們每一個元素都將指定 X 相應維進行零填充後的長度。
函數 ifft、ifft2 和 ifftn的調用格式於對應的離散傅立葉變換函數一致。
例子:圖像的二維傅立葉頻譜
% 讀入原始圖像
I=imread('lena.bmp');
imshow(I)
% 求離散傅立葉頻譜
J=fftshift(fft2(I));
figure;
imshow(log(abs(J)),[8,10])
2. 離散餘弦變換的 Matlab 實現
2.1. dCT2 函數
功能:二維 DCT 變換
格式:B=idct2(A)
B=idct2(A,m,n)
B=idct2(A,[m,n])
說明:B=idct2(A) 計算 A 的 DCT 反變換 B ,A 與 B 的大小相同;B=idct2(A,m,n) 和 B=idct2(A,[m,n]) 通過對 A 補 0 或剪裁,使 B 的大小爲 m×n。
2.3. dctmtx函數
功能:計算 DCT 變換矩陣
格式:D=dctmtx(n)
說明:D=dctmtx(n) 返回一個 n×n 的 DCT 變換矩陣,輸出矩陣 D 爲 double 類型。
3. 圖像小波變換的 Matlab 實現
3.1 一維小波變換的 Matlab 實現
(1) dwt 函數
功能:一維離散小波變換
格式:[cA,cD]=dwt(X,'wname')
[cA,cD]=dwt(X,Lo_D,Hi_D)
說明:[cA,cD]=dwt(X,'wname') 使用指定的小波基函數 'wname' 對信號 X 進行分解,cA、cD 分別爲近似分量和細節分量;[cA,cD]=dwt(X,Lo_D,Hi_D) 使用指定的濾波器組 Lo_D、Hi_D 對信號進行分解。
(2) idwt 函數
功能:一維離散小波反變換
格式:X=idwt(cA,cD,'wname')
X=idwt(cA,cD,Lo_R,Hi_R)
X=idwt(cA,cD,'wname',L)
X=idwt(cA,cD,Lo_R,Hi_R,L)
說明:X=idwt(cA,cD,'wname') 由近似分量 cA 和細節分量 cD 經小波反變換重構原始信號 X 。
'wname' 爲所選的小波函數
X=idwt(cA,cD,Lo_R,Hi_R) 用指定的重構濾波器 Lo_R 和 Hi_R 經小波反變換重構原始信號 X 。
X=idwt(cA,cD,'wname',L) 和 X=idwt(cA,cD,Lo_R,Hi_R,L) 指定返回信號 X 中心附近的 L 個點。
3.2 二維小波變換的 Matlab 實現
二維小波變換的函數
-------------------------------------------------
函數名 函數功能
---------------------------------------------------
dwt2 二維離散小波變換
wavedec2 二維信號的多層小波分解
idwt2 二維離散小波反變換
waverec2 二維信號的多層小波重構
wrcoef2 由多層小波分解重構某一層的分解信號
upcoef2 由多層小波分解重構近似分量或細節分量
detcoef2 提取二維信號小波分解的細節分量
appcoef2 提取二維信號小波分解的近似分量
upwlev2 二維小波分解的單層重構
dwtpet2 二維週期小波變換
idwtper2 二維週期小波反變換
-------------------------------------------------------------
(1) wcodemat 函數
功能:對數據矩陣進行僞彩色編碼
格式:Y=wcodemat(X,NB,OPT,ABSOL)
Y=wcodemat(X,NB,OPT)
Y=wcodemat(X,NB)
Y=wcodemat(X)
說明:Y=wcodemat(X,NB,OPT,ABSOL) 返回數據矩陣 X 的編碼矩陣 Y ;NB 僞編碼的最大值,即編碼範圍爲 0~NB,缺省值 NB=16;
OPT 指定了編碼的方式(缺省值爲 'mat'),即:
OPT='row' ,按行編碼
OPT='col' ,按列編碼
OPT='mat' ,按整個矩陣編碼
ABSOL 是函數的控制參數(缺省值爲 '1'),即:
ABSOL=0 時,返回編碼矩陣
ABSOL=1 時,返回數據矩陣的絕對值 ABS(X)
(2) dwt2 函數
功能:二維離散小波變換
格式:[cA,cH,cV,cD]=dwt2(X,'wname')
[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 。
(3) wavedec2 函數
功能:二維信號的多層小波分解
格式:[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 。
(4) idwt2 函數
功能:二維離散小波反變換
格式:X=idwt2(cA,cH,cV,cD,'wname')
X=idwt2(cA,cH,cV,cD,Lo_R,Hi_R)
X=idwt2(cA,cH,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) 和 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 重構原信號。