?? dct2d.m
字號:
function C=DCT2D(B)
%將圖像數據進行快速傅立葉變換,返回幅度和相位信息
a=length(B);
%依次對每一行進行FFT操作
C=zeros(a);
for b=1:a
C(b,:)=DCT1D(B(b,:));
end
%依次對每一列進行FFT操作
for b=1:a
T=C(:,b);
T1=DCT1D(T');
C(:,b)=T1';
end
%%%%---------SubFunction-------------
function B=DCT1D(A)
%一維離散余弦變換
n=length(A);
%對變換數組延拓
T=zeros(1,n);
C=[A,T];
C=FFT1D(C)*2*n;
T=C(1:n);
T(1)=T(1)/n^0.5;
for u=2:n
T(u)=(2/n)^0.5*T(u)*exp(-i*(u-1)*pi/2/n);
end
B=real(T);
%%%-------------Subfunction-------
function B1=FFT1D(A1)
%%---對A1中的數據進行奇偶分解排序-----
B=SortOE(A1);
n=length(B);m=log2(n);
for s=1:n
T(s)=double(B(s));%將圖像數據轉換為double型
end
for a=0:m-1
M=2^a;nb=n/M/2;%每一塊的半長度和分成的塊數
for j=0:nb-1 %對每一塊依次進行操作
for k=0:M-1%對每一塊中的一半的點依次操作
t1=double(T(1+k+j*2*M));t2=double(T(1+k+j*2*M+M))*exp(-i*pi*k/M);
T(1+k+j*2*M)=0.5*(t1+t2);
T(1+k+j*2*M+M)=0.5*(t1-t2);
end
end
end
B1=T;
%%--------------Subfunction------------
%奇偶分解排序函數
function B=SortOE(T)
n=length(T);m=log2(n/2);
for i=1:m
nb=2^i;lb=n/nb;%分成的塊數和每一塊的長度
lc=2*lb;%操作間隔
for j=0:nb/2-1 %進行排序操作的次數
t=T(2+j*lc:2:2*lb+j*lc);
T(1+j*lc:lb+j*lc)=T(1+j*lc:2:(2*lb-1)+j*lc);
T(lb+1+j*lc:2*lb+j*lc)=t;
end
end
B=T;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -