详解DFT与DCT的联系与差别

目录

一、DFT原理及其Matlab实现

(一)1D-DFT

(二)2D-DFT

(三)1D-DFT和2D-DFT的频谱特点以及中心化思想

1.  1D-DFT的频谱特点

2.  2D-DFT的频谱特点

3.  在matlab中计算并可视化二维DFT

二、DCT变换

1.  1D-DCT

2.  2D-DCT

三、DCT的优点


一、DFT原理及其Matlab实现

(一)1D-DFT

先来看看1D-DFT,假如我们有长度为N的信号x(n),对其做DFT,得到

X(k)=\sum_{n=0}^{N-1}x[n]e^{-j2\pi \frac{nk}{N}}=\sum_{n=0}^{N-1}x[n]\left ( cos(\frac{2\pi kn}{N})-jsin(\frac{2\pi kn}{N}) \right )

将DFT的实部和虚部拆出来:

Re(X(k))=\sum_{n=0}^{N-1}x[n]cos(\frac{2\pi kn}{N})

Im(X(k))=\sum_{n=0}^{N-1}x[n]sin(\frac{2\pi kn}{N})

x(n)是实函数时,DFT的实部是偶函数,虚部是奇函数。

x(n)是实偶函数时,DFT的虚部就变成0了,结合图1进行理解。

图1

 所以,当时域信号是实偶信号时,我们就可以把DFT写成:

 X(k)=\sum_{n=0}^{N-1}x[n]e^{-j2\pi \frac{nk}{N}}=\sum_{n=0}^{N-1}x[n]cos(\frac{2\pi kn}{N})

其中,k=0, 1, 2, \cdots ,N-1

对于信号值全为正数的信号,其DFT在低频时能量最高,这里的能量并非物理意义上的能量,可以理解为某个频域处的信号对原始信号贡献的信息量最大。同时,显而易见,一维信号的N个频点上近似包含两个低频点,分别为k=0和k=N-1,包含一个高频点,对应k=N/2。

(二)2D-DFT

这里要提醒大家的是MN项可以放在DFT正变换的前面,也可以放在DFT逆变换的前面,但是为了与Matlab中的实现形式一致,我们将该项放置在逆变换公司前面。而且matlab中的数组索引是以1开始,MATLAB中的F(1,1)和f(1,1)就对应正变换和逆变换中的数学量F(0,0)和f(0,0)。

DFT在u方向和v方向上都是周期无穷的,周期由M和N决定。周期性也是DFT逆变换的一个重要属性,傅里叶逆变换得到的图像也是周期无穷的。

(三)1D-DFT和2D-DFT的频谱特点以及中心化思想

1.  1D-DFT的频谱特点

在数学域,[-Π,Π]表示一个完整的周期,但是在计算机中,[0,2Π]表示一个完整的周期,因为DFT本身的周期性,我们在[0,2Π]上真能观察到两个紧邻的半周期,无法观察到一个完整的周期,如果我们想在[0,2Π]看见完整且正确排序的周期,就需要对信号进行高低频转换,即令:f[n]=x[n]cos[\pi n]=(-1)^{n}x[n],然后对f[n]做DFT变换,转换前后频域变化的示意图如下:

2.  2D-DFT的频谱特点

 与1D-DFT同理,2D-DFT频谱图中就是四个紧邻的没有按顺序排列的四分之一周期,为了简化频谱的视觉分析,我们在2D-DFT之前将f(x,y)乘以(-1)^{x+y}

更直观的理解在这里,将1,3象限对调,2,4象限对调,就可以在得到一个完整且按顺序排列的频谱图。前面说过,1D-DFT有两个低频点(两端),那么对应到二维DFT就会产生四个低频点(四个角点),如图2左图,为了将低频信息集中在一起来观察,对DFT做中心化后就得到了图2右图所示的频谱图。

图2 2D-DFT中心换前后对比

 下面用真实的图片的DFT变换来说明频率中心化操作的影响,这里的DFT是没有做频率中心化的,可以看出,频谱图的四个角都有亮点,在u,v两个维度都错位半个周期频谱图亮点集中了。

图3 未中心化的2D-DFT

对DFT变化做中心化,频谱图如下图:

图4 中心化后的2D-DCT

3.  在matlab中计算并可视化二维DFT

实际应用中,DFT及其逆变换可以通过使用FFT算法来实现,而且我们对图像做DFT,一般都是对灰度图做FFT变换,如果是彩图,需要将图像先转化为灰度图,再做FFT变换。

clc;
close all;
RGB=imread('图片路径');
I = rgb2gray(RGB);
F = fft2(I)            % fft2()工具用来实现FFT变换
S = abs(F)             % 使用函数abs()计算傅里叶频谱(模值)
imshow(S, [])

Fc = fftshift(F);      % 频率中心化
% 举个简单的例子说明fftshift函数的作用
% a = [1 2; 3 4]        则 fftshift(a) = [4 3; 2 1]

% 对应的,去中心化
% F = ifftshift(Fc);


S2 = log(1+abs(Fc));    % 限制傅里叶系数的范围
imshow(S2, [])

二、DCT变换

1.  1D-DCT

DCT变换,DCT其实就是输入信号是实偶函数的DFT,现实应用中,没有那么多现成的实偶信号,而DCT的巧妙之处就是先将任何一个输入信号延拓为一个实偶信号,再做DFT变换,对一个长度为N的信号(信号在[0,N-1]上取值),将原信号关于N-1/2对称,以2N为周期将其周期延拓:

 

对2N个点的离散序列作DFT,有

  

与DFT相比,1D-DCT的低频点只有一个,就是当k=0的时候,在计算机中做DCT变换的时候, 为了保证变换基的规范正交性,引入常量C(k)

2.  2D-DCT

 因为一个周期内的1D-DCT只有一个低频点,一个周期内的2D-DCT也只有一个低频点。具体理解见下图:

 图5 2D-DCT的能量集中在左上角

三、DCT的优点

DCT继承了DFT的可分离特性,即在做2D-DCT的时候,可以分解为一个沿行和一个沿列的1D-DCT来实现,相比于DFT,DCT有更好的能量压缩特性,因为它是对信号先镜像,然后DFT,使得二维图像的频谱图中只有左上角一个低频点,即图像中的重要信息全集中在左上角。

  • 13
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值