Matlab一探DCT/IDCT变换在图像压缩中的应用

绝大多数图像都有一个共同特征,平坦区域和内容缓慢变化的区域占据一幅图像的大部分,而细节区域和内容突变区域则占小部分。也可以说,图像中直流和低频区占大部分,高频区占小部分。这样,空间域的图像变换到频域,会产生一些相关性很小的一些变换系数,可以类比不同正交方向上的系数彼此独立,前提是得找到这样一组正交向量。如果对这些系数进行压缩编码,就是变换编码。

变换中有一类叫做正交变换,可用于图像编码。自1968年利用快速傅里叶变换(FFT)进行图像编码以来,出现的了多种正交变换编码方法,比如K-L变换,离散余弦变换(DCT)等。其中,编码性能以K-L变换最理想,但缺乏快速算法,且变换矩阵随图像而异,不同图像需计算不同的变换矩阵。因而只用来参考比较。DCT编码性能最接近于K-L变换,略次而已,但它具有快速算法,广泛应用于图像编码。

DCT主要用于将数据或图像压缩,它将空域的信号变为频域上,能够以数据无关的方式去除输入信号之间的相关性,DCT变换本身是无损的,但是给接下来的量化、哈弗曼编码等创造了很好的条件,同时,由于DCT变换是对称的,我们可以在量化编码后,利用DCT反变换,在接收端恢复原始的图像信息,DCT变换在当前的图像分析领域有着极为广泛的用途,我们常见的JPEG静态图像编码以及MJPEG、MPEG动态编码等标准中都使用了DCT变换。

DCT与DFT(离散傅里叶变换)是近似相等的, 后者更多的应用于信号处理领域,DCT相对简单并且在多媒体领域应用更加广泛。

典型的VPU编码解码数据处理流图:

jpeg图片编码

用mediainfo查看JPG图片信息,会发现其有一项是chorma downsampling参数,为YUV444/YUV420等等,之所以解码后的Render像素格式信息会写入编码压缩数据格式中,是因为再压缩前,其像素信息已经确定了,需要builtin到图片数据中。Y,U,V分量分别进行DCT编码。


DCT变换的数学基础

1.一维DCT变换

DCT正变换时,设

f(x)=[f(0), f(1), f(2),\cdots, f(N-1)]^T

对f变换后得:

F(u)=c(u)\sum_{i=0}^{N-1}f(i)cos\bigg[ \frac{(2i+1)\pi}{2N}\cdot u\bigg] \qquad u=0,1,2,\cdots

其中:

c(u)=\left\{\begin{matrix} \sqrt{\frac{1}{N}},\qquad \qquad \qquad \quad u=0 \\ \\ \sqrt{\frac{2}{N}}, \qquad \ \ \ \ \ \ \ \ u=1,2,\cdots \end{matrix}\right.

其中,f(i)为原始的信号,F(u)是经过DCT变换之后的系数,N为原始信号的点数,c(u)可以认为是一个补偿系数,可以使DCT变换矩阵为正交矩阵。

A=c(u)\sum_{i=0}^{N-1}cos\bigg[ \frac{(2i+1)\pi}{2N}\cdot u\bigg]\qquad u=0,1,2,\cdots

写成矩阵形式:

\boldsymbol{\vec{F}=A\cdot \vec{f}}

A=\sqrt{\frac{2}{N}}\cdot \begin{bmatrix} \frac{1}{\sqrt{2}}& \frac{1}{\sqrt{2}}& \cdots & \frac{1}{\sqrt{2}}\\ cos\frac{\pi}{2N}& cos\frac{3\pi}{2N}& \cdots & cos\frac{(2N-1)\pi}{2N}\\ \vdots & \vdots & \ddots & \vdots \\ cos\frac{(N-1)\pi}{2N}& cos\frac{3(N-1)\pi}{2N}& \cdots & cos\frac{(2N-1)(N-1)\pi}{2N} \end{bmatrix}

对应的,一维余弦反变换IDCT为:

  • 12
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

papaofdoudou

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值