DCT 离散余弦变换及蝶形算法

离散余弦变换推导

discrete cosine transform
本文主要参考这篇知乎回答。

1974年,K. R. Rao、N. Ahmed、T. Natarajan三位教授创立了离散余弦变换(Discrete Cosine Transform, DCT)

(1)一维DCT

信号分析的课本上竟只讲了一维DCT,略有点失望呢
给一个序列/向量 s ( n ) , n = 0 , 1 , … , N − 1 s(n),n=0,1,\ldots,N-1 s(n),n=0,1,,N1,它的一维DCT:
{ S c o s ( 0 ) = 1 N ∑ n = 0 N − 1 x n S c o s ( k ) = 2 N ∑ n = 0 N − 1 x n cos ⁡ [ ( 2 n + 1 ) k π 2 N ] , k = 1 , 2 , … , N − 1 \left\{ \begin{array}{c} S_{cos}(0)=\frac{1}{\sqrt{N}}\sum_{n=0}^{N-1}x_n \\ S_{cos}(k)=\frac{2}{\sqrt{N}}\sum_{n=0}^{N-1}x_n\cos[\frac{(2n+1)k\pi}{2N}],k=1,2,\ldots,N-1 \\ \end{array}\right. {Scos(0)=N 1n=0N1xnScos(k)=N 2n=0N1xncos[2N(2n+1)kπ],k=1,2,,N1

变换核函数为实函数:
φ c o s ( k , n ) = 2 N g k cos ⁡ [ ( 2 n + 1 ) k π 2 N ] , k , n = 0 , 1 , 2 , … , N − 1 \varphi_{cos}(k,n)=\sqrt{\frac2N}g_k\cos[\frac{(2n+1)k\pi}{2N}],k,n=0,1,2,\ldots,N-1 φcos(k,n)=N2 gkcos[2N(2n+1)kπ],k,n=0,1,2,,N1
这个常系数是保证变换是正交矩阵的归一化系数。

(2)二维DCT

重要结论

  1. 离散余弦变换的效果能够接近理论上的最佳变换——Kahunen-Loeve变换(K-L变换)。
  2. 在给定区间内满足狄利赫里条件的连续实对称函数,可以展开成仅含有余弦项的傅里叶级数。
  3. 余弦变换CT来源于傅里叶变换FT,但后者有复数,运算复杂度和存储长度都更大,基于第2条结论,把普通实函数经过偶延拓变成实对称函数再进行二维DFT,就得到了二维DCT。
  4. DCT是H.26X系列视频编码的基础,虽然各种视频编码方式经过几十年的发展,但以DCT为核心是没有变的
  5. DCT在计算复杂度上较小波变换更有优势
  6. DCT常被信号处理和图像处理使用,用于对信号和图像(包括静止图像和运动图像)进行有损压缩。在压缩算法中,将输入图像划分为88或1616的图像块,对每个图像块作DCT变换(分块后,每个块较小,运算时间更短);然后舍弃高频的系数,并对余下的系数进行量化以进一步减少数据量;最后使用无失真编码来完成压缩任务。解压缩时首先对每个图像块作DCT反变换,然后将图像拼接成一副完整的图像。
  7. 大多数自然信号(包括声音和图像)的能量都集中在余弦变换后的低频部分。由于人眼对于细节信息不是很敏感,因此信息含量更少的高频部分可以直接去掉,从而在后续的压缩操作中获得较高的压缩比。
  8. 变换后DCT系数能量主要集中在左上角,其余大部分系数接近于零,DCT具有适用于图像压缩的特性。将变换后的DCT系数进行门限操作,将小于一定值得系数归零,这就是图像压缩中的量化过程,然后进行逆DCT运算,可以得到压缩后的图像。

延拓方法:

二维离散函数 f ( x , y ) ( x , y = 0 , 1 , … , N − 1 ) f(x,y)(x,y=0,1,\ldots,N-1) f(x,y)(x,y=0,1,,N1)

若序列不包含零点 f ( 0 , 0 ) f(0,0) f(0,0),则 f ( − 1 , 0 ) = f ( 1 , 0 ) , f ( 0 , − 1 ) = f ( 0 , 1 ) , 对 称 中 心 : f ( 0 , 0 ) f(-1,0)=f(1,0),f(0,-1)=f(0,1),对称中心:f(0,0) f(1,0)=f(1,0),f(0,1)=f(0,1),f(0,0)

若序列包含零点 f ( 0 , 0 ) f(0,0) f(0,0),则 f ( − 1 , 0 ) = f ( 0 , 0 ) , f ( 0 , − 1 ) = f ( 0 , 0 ) , f(-1,0)=f(0,0),f(0,-1)=f(0,0), f(1,0)=f(0,0),f(0,1)=f(0,0),对称中心: f ( − 1 2 , − 1 2 ) f(-\frac12,-\frac12) f(21,21)

偶延拓后,归一化的二维DCT:
w h e n ( x , y ) o r ( u , v ) = ( 0 , 0 ) when (x,y) or (u,v)=(0,0) when(x,y)or(u,v)=(0,0)

F ( u , v ) = 1 N ∑ x = 0 N − 1 ∑ y = 0 N − 1 f ( x , y ) cos ⁡ [ π N u ( x + 1 2 ) ] cos ⁡ [ π N v ( y + 1 2 ) ] F(u,v)=\frac1N\sum_{x=0}^{N-1}\sum_{y=0}^{N-1}f(x,y)\cos[\frac{\pi}{N}u(x+\frac12)]\cos[\frac{\pi}{N}v(y+\frac12)] F(u,v)=N1x=0N1y=0N1f(x,y)cos[Nπu(x+21)]cos[Nπv(y+21)]

f ( x , y ) = 1 N ∑ u = 0 N − 1 ∑ v = 0 N − 1 F ( u , v ) cos ⁡ [ π N u ( x + 1 2 ) ] cos ⁡ [ π N v ( y + 1 2 ) ] f(x,y)=\frac1N\sum_{u=0}^{N-1}\sum_{v=0}^{N-1}F(u,v)\cos[\frac{\pi}{N}u(x+\frac12)]\cos[\frac{\pi}{N}v(y+\frac12)] f(x,y)=N1u=0N1v=0N1F(u,v)cos[Nπu(x+21)]cos[Nπv(y+21)]

w h e n ( x , y ) o r ( u , v ) ̸ = ( 0 , 0 ) when (x,y) or (u,v)\not=(0,0) when(x,y)or(u,v)̸=(0,0)

F ( u , v ) = 1 2 N ∑ x = 0 N − 1 ∑ y = 0 N − 1 f ( x , y ) cos ⁡ [ π N u ( x + 1 2 ) ] cos ⁡ [ π N v ( y + 1 2 ) ] F(u,v)=\frac{1}{2N}\sum_{x=0}^{N-1}\sum_{y=0}^{N-1}f(x,y)\cos[\frac{\pi}{N}u(x+\frac12)]\cos[\frac{\pi}{N}v(y+\frac12)] F(u,v)=2N1x=0N1y=0N1f(x,y)cos[Nπu(x+21)]cos[Nπv(y+21)]

f ( x , y ) = 1 2 N ∑ u = 0 N − 1 ∑ v = 0 N − 1 F ( u , v ) cos ⁡ [ π N u ( x + 1 2 ) ] cos ⁡ [ π N v ( y + 1 2 ) ] f(x,y)=\frac{1}{2N}\sum_{u=0}^{N-1}\sum_{v=0}^{N-1}F(u,v)\cos[\frac{\pi}{N}u(x+\frac12)]\cos[\frac{\pi}{N}v(y+\frac12)] f(x,y)=2N1u=0N1v=0N1F(u,v)cos[Nπu(x+21)]cos[Nπv(y+21)]

正逆变换的核函数均为 cos ⁡ [ π N u ( x + 1 2 ) ] cos ⁡ [ π N v ( y + 1 2 ) ] \cos[\frac{\pi}{N}u(x+\frac12)]\cos[\frac{\pi}{N}v(y+\frac12)] cos[Nπu(x+21)]cos[Nπv(y+21)]

从H.261开始,离散余弦变换就被应用于视频编码中。当技术发展到H.264与H.265,就具体的数学计算而言,H.261创立的分块编码被后续标准沿用,H.264在亮度平面上的基本分块为8x8像素块,于是离散余弦变换是这个样子(代入N=8):

F ( u , v ) = 1 16 ∑ x = 0 15 ∑ y = 0 15 f ( x , y ) cos ⁡ [ π 8 u ( x + 1 2 ) ] cos ⁡ [ π 8 v ( y + 1 2 ) ] F(u,v)=\frac{1}{16}\sum_{x=0}^{15}\sum_{y=0}^{15}f(x,y)\cos[\frac{\pi}{8}u(x+\frac12)]\cos[\frac{\pi}{8}v(y+\frac12)] F(u,v)=161x=015y=015f(x,y)cos[8πu(x+21)]cos[8πv(y+21)]

f ( x , y ) = 1 16 ∑ u = 0 15 ∑ v = 0 15 F ( u , v ) cos ⁡ [ π 8 u ( x + 1 2 ) ] cos ⁡ [ π 8 v ( y + 1 2 ) ] f(x,y)=\frac{1}{16}\sum_{u=0}^{15}\sum_{v=0}^{15}F(u,v)\cos[\frac{\pi}{8}u(x+\frac12)]\cos[\frac{\pi}{8}v(y+\frac12)] f(x,y)=161u=015v=015F(u,v)cos[8πu(x+21)]cos[8πv(y+21)]

(3)蝶形算法butterfly algorithm

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DCT离散余弦变换)是一种常用的图像压缩和加密算法,其设计原理是将图像从时域转换到频域进行处理,以减少图像数据的冗余度和杂度,实现图像压缩和加密等功能。 D的数学原理是将与DFT离散傅里变换)相似的公式推广到实数序列上进行计算。DCT使用的是实数系数,而DFT使用的是复数系数。DCT的基本公式可以写作: ![DCT公式](https://latex.codecogs.com/gif.latex?X%28k%29%20%3D%20%5Csum_%7Bn%3D0%7D%5E%7BN-1%7D%20x%28n%29%20%5Ccos%20%5Cleft%28%20%5Cfrac%7B%5Cpi%7D%7BN%7D%20%5Cleft%28%20n%20+%20%5Cfrac%7B1%7D%7B2%7D%20%5Cright%29%20%5Cleft%28%20k%20+%20%5Cfrac%7B1%7D%7B2%7D%20%5Cright%29%20%5Cright%29%2C%20%5Cquad%200%20%5Cleq%20k%20%3C%20N) 其中,![X(k)](https://latex.codecogs.com/gif.latex?X%28k%29)是DCT变换后的频域系数,![x(n)](https://latex.codecogs.com/gif.latex?x%28n%29)是原始时域序列,![N](https://latex.codecogs.com/gif.latex?N)是序列的长度。 DCT的基本思想是将图像分成若干个小块,对每个小块进行DCT变换,然后保留部分重要的频域系数,将其它系数置零,再进行逆DCT变换,得到压缩后的图像。这样可以减少图像数据的冗余度,实现图像的压缩。 DCT还可以用于图像加密。通过对图像进行DCT变换,将图像转换到频域,然后对频域系数进行加密处理,再进行逆DCT变换,得到加密后的图像。只有知道加密密钥的人才能够正确解密图像。 总结来说,DCT离散余弦变换的设计原理是将图像从时域转换到频域进行处理,以减少图像数据的冗余度和复杂度,实现图像压缩和加密等功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值