⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dct2d.m

📁 IDCT JPEG中用到的 大家可以参考 呵呵 很好用
💻 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 + -