离散余弦变换(DCT)详解

离散余弦变换(DCT)详解

目录

  1. 引言
  2. 背景知识:从傅里叶变换到余弦变换
  3. 为什么要用余弦?
  4. DCT的多种类型
  5. DCT-II公式详解
  6. 逆变换(DCT-III)
  7. 二维DCT
  8. DCT的快速算法简述
  9. DCT的性质与应用
  10. DCT计算示例(详细版)
  11. 实现代码(Python示例)
  12. 代码简要解读

引言

离散余弦变换(Discrete Cosine Transform,DCT)是一种在数字信号处理和图像处理领域具有重要地位的变换方式。它能够将信号从时域(或空间域)转化到以余弦基函数为核心的频域表达形式。DCT最大的特点之一是它只包含实数部分,没有虚部,计算结果往往比傅里叶变换更紧凑,在图像和音频压缩应用中极其常见。


背景知识:从傅里叶变换到余弦变换

  1. 连续傅里叶变换(CFT):对一个连续的函数 f ( t ) f(t) f(t),可以用无穷多的正弦波和余弦波的线性组合来表示,这就产生了傅里叶级数或傅里叶变换。
  2. 离散傅里叶变换(DFT):当信号是离散的(离散采样),我们可以使用离散傅里叶变换来将其表示为有限个复数频率分量。它常被快速算法(FFT)实现。
  3. 离散余弦变换(DCT):DFT得到的结果是复数,而在很多实际应用(如图像处理)里,信号本身通常是实值并且我们需要的数据也常常集中在余弦分量上。DCT正是专门用“余弦基函数”来对信号做正交分解的一种特殊形式,且结果均为实数。

从“傅里叶变换”到“离散傅里叶变换(DFT)”再到“离散余弦变换(DCT)”,我们可以简单理解为:

DCT是对某些特定边界条件下的DFT进行简化得出的,且只取余弦(实数)部分的一种变换。


为什么要用余弦?

  • 平滑性:许多自然信号(例如图像中的连续区域、音频中的平滑片段)在用余弦函数来进行逼近时会更容易展现出“能量集中在低频”这一特征。
  • 对称边界条件:DCT可以等效地看作原信号在边界处做了对称延拓,因此在边界过渡方面相对更“平滑”,不会像离散傅里叶变换那样在信号区间首尾可能出现明显的不连续跳变。

DCT的多种类型

根据变换公式中对信号边界条件、下标(索引)定义的不同,DCT有8种变体:DCT-I、DCT-II、DCT-III、DCT-IV、DCT-V、DCT-VI、DCT-VII、DCT-VIII。

  • DCT-II:应用最广泛,也被很多文献直接称为“DCT”。
  • DCT-III:DCT-II的逆变换。
  • DCT-IV:在某些滤波或特殊音频编码技术中会使用。

这里主要讨论最常用的DCT-II(与它的逆变换DCT-III),在JPEG、MP3等主流标准中都是对DCT-II做各种改进或变形(如MDCT)来实现高效压缩。


DCT-II公式详解

一维DCT-II

对于长度为 N N N 的离散序列 { x [ n ] } \{ x[n] \} { x[n]} n = 0 , 1 , … , N − 1 n=0,1,\ldots,N-1 n=0,1,,N1,其DCT-II系数 { X [ k ] } \{ X[k] \} { X[k]} 的一般定义为:

X [ k ] = α ( k ) ∑ n = 0 N − 1 x [ n ] ⋅ cos ⁡ [ π N ( n + 1 2 ) k ] , k = 0 , 1 , … , N − 1 X[k] = \alpha(k) \sum_{n=0}^{N-1} x[n] \cdot \cos \left[ \frac{\pi}{N} \left(n + \frac{1}{2}\right) k \right], \quad k=0,1,\ldots,N-1 X[k]=α(k)n=0N1x[n]cos[Nπ(n+21)k],k=0,1,,N1

其中,
α ( k ) = { 1 N , k = 0 , 2 N , k ≠ 0. \alpha(k) = \begin{cases} \sqrt{\frac{1}{N}}, & \quad k = 0, \\ \sqrt{\frac{2}{N}}, & \quad k \neq 0. \end{cases} α(k)= N1 ,N2 ,k=0,k=0.

  • α ( k ) \alpha(k) α(k) 是归一化因子(或缩放因子),它能够使DCT和逆DCT保持正交性和单位能量。
  • cos ⁡ [ π N ( n +
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DuHz

喜欢就支持一下 ~ 谢谢啦!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值