离散余弦变换原理特点及程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1 离散余弦变换(Discrete Cosine Transform ,DCT)原理
1)离散余弦变换定义
(1)一维离散余弦变换的定义由下式表示:
式中F(u)是第u 个余弦变换系数,u 是广义频率变量,u=1,2,3.....N-1,f(x)是时域N 点序列,x=0,1,2...N-1
(2)一维离散余弦反变换由下式表示:
(3)二维离散余弦变换的定义由下式表示:
最后的式子是正变换公式。其中f(x,y)是空间域二维向量之元素,其中x,y=0,1,2...N-1, F(u,v)是变换系数阵列之元素。式∑-==10)(1)0(N x x f N F N u x x f N u F N x 2)12(cos )(2)(10π+=∑-=N u x u F N F N x f N u 2)12(cos )(2)0(1)(11π++=∑-=N
v y N u x y x f N v u F N
u x y x f N u F N v y y x f N v F y x f N F N x N y N y N x N x N y N x N y 2)12(cos 2)12(cos ),(2),(2)12(cos ),(2)0,(2)12(cos ),(2),0(),(1)0,0(1010101010101010ππππ+⋅+=+=+⋅==∑∑∑∑∑∑∑∑-=-=-=-=-=-=-=-=
中表示的阵列为N ×N 。
(4)二维离散余弦反变换由下式表示:
2) 性质: (1)余弦变换是实数、正交。
(2)离散余弦变换可由傅里叶变换的实部求得
(3)对高度相关数据,DCT 有非常好的能量紧凑性
(4)对于具有一阶马尔可夫过程的随机信号,DCT 是K-L 变换的最好近似
2 离散余弦变换Matlab 实现
(1)二维离散余弦变换
f=imread('trees.tif');
f=im2double(f);
F=dct2(f);
subplot(121),imshow(f,[]);
subplot(122),imshow(log(1+20*abs(F)),[])
N
v y N u x v u F N N u x u F N N v y v F N F N y x f N u N v N u N v 2)12(cos 2)12(cos ),(2
2)12(cos )0,(22)12(cos ),0(2)0,0(1),(11111111ππππ+⋅++++++=∑∑∑∑-=-=-=-=
图1 原图以及进行离散变换后图对比再进行逆变换:
I=idct2(F);
subplot(121),imshow(f);
subplot(122),imshow(I)
图2 原图与恢复后的图对比
将数据进行压缩再逆变换:
CLF
f=imread('cameraman.tif');
F=dct2(f);
F(abs(F)<50)=0;
k=idct2(F);
subplot(121),imshow(f,[]);
subplot(122),imshow(k,[])
图3 对比图
(2)将输入图像分解成8×8的图像块,然后对每个图像块进行DCT 变换,保留64个DCT系数部分,然后通过压缩保存数据。还原时,进行DCT逆变换重构图像。
I1=im2double(imread('moon.tif'));
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); subplot(121),imshow(I1,[]);
subplot(122),imshow(I2,[])
图4 原始图像与压缩图像
4 讨论分析
离散余弦变换是傅里叶变换的实数部分,比傅里叶变换有更强的信息集中能力。对于大多数自然图像,离散余弦变换能将大多数的信息放到较少的系数上去,提高编码的效率。在图像的变换编码中有着非常成功的应用。
图像进行DCT变换后,在频域中矩阵左上角低频的幅值大而右下角高频幅值小,经过量化处理后产生大量的零值系数,在编码时可以压缩数据,因此DCT被广泛用于视频编码图像压缩。