1、图图 像的离像的离 散余弦变换(散余弦变换( DCT)二二 维离散余弦变换维离散余弦变换 -数学公式数学公式二维离散余弦变换为二维离散余弦变换为 二维离散余弦反变换二维离散余弦反变换 为为二二 维离散余弦变换维离散余弦变换 -矩阵形式矩阵形式 矩阵形式矩阵形式正变换 :F=DfD反变换: f=DFD产生 DCT矩阵的 MATLAB函数 : D=dctmtx(N);图图 像像 DCT的的 MATLAB 实现实现1. dct2函数函数 功能:二维 DCT变换。 格式: B = dct2 (A)B = dct2 (A, m, n)B = dct2 (A, m n )说明: B = dct2 (A)计
2、算 A的 DCT变换 B, A与 B的大小相同; B = dct2 (A, m, n)和 B = dct2 (A, m n )通过对 A补 0或剪裁,使 B的大小为 mn。 离散余弦变换的离散余弦变换的 MATLAB 实现实现2. idct2函数函数 功能: DCT反变换。 格式: B = idct2 (A)B = idct2 (A, m, n)B = idct2 (A, m n )离散余弦变换的离散余弦变换的 MATLAB 实现实现3. dctmtx函数函数 功能:计算 DCT变换矩阵。 格式: D = dctmtx (n)说明: D = dctmtx (n)返回一个 nn的 DCT变换矩阵
3、,输出矩阵D 为 double类型。F=DfD离散余弦变换的离散余弦变换的 MATLAB 实现实现例 3.5 说明二维余弦正反变换在 Matlab中的实现。 RGB=imread(autumn.tif); I=rgb2gray(RGB); figure(1); imshow(I); figure(2); J=dct2(I); imshow(log(abs(J),); colormap(jet(64),colorbar; %彩色图表示 figure(3); J(abs(J)10)=0; %保留系数大于 10的值 K=idct2(J)/255; imshow(K);离散余弦变换的离散余弦变换的 M
4、ATLAB 实现实现图 3.12原始图像 图 3.13余弦变换系数图 3.14余弦反变换恢复图像离散余弦变换的一个重要应用离散余弦变换的一个重要应用 -图像压缩图像压缩DCT变换之后,系数的特点 :从左上角到右下角的,从低频到中频,再到高频,系数的绝对值逐渐变小,能量集中在低频成分。低频系数体现图像中目标的轮廓和灰度分布特性 ,高频系数体现了目标形状的细节。 离散余弦变换的一个重要应用离散余弦变换的一个重要应用 -数据压缩数据压缩 例: DCT作图像压缩 I=imread(cameraman.tif); I1=double(I)/255; T=dctmtx(8); B=blkproc(I1,8 8,P1*x*P2,T,T); mask=1 1 1 1 0 0 0 0 1 1 1 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0; B2=blkproc(B,8 8,P1.*x,mask); I2=blkproc(B2,8 8,P1*x*P2,T,T); imshow(I1),figure,imshow(I2);figure,imshow(mat2gray(I1-I2),)