美文网首页
H264系列七 JPEG DCT JPEG2000 DWT

H264系列七 JPEG DCT JPEG2000 DWT

作者: 合肥黑 | 来源:发表于2018-09-14 15:05 被阅读26次

参考
概述·离散余弦变换(DCT)及其实现过程
基于DCT变换的JPEG图像压缩原理
能不能通俗的讲解下傅立叶分析和小波分析之间的关系?

DFT离散傅里叶变换(discrete Fourier transform)
DCT离散余弦变换(DCT for Discrete Cosine Transform)
DWT离散小波变换(Discrete Wavelet Transformation)
DCT是DFT的一种形式。所谓“余弦变换”,是在DTFT傅立叶级数展开式中,如果被展开的函数是实偶函数,那么其傅立叶级数中只包含余弦项,再将其离散化(DFT)可导出余弦变换,因此称之为离散余弦变换(DCT)。其实DCT属于DFT的一个子集。DCT用于语音和图像处理比较多。
MPEG-4视频标准中同时支持DCT和DWT变换,H.264支持DCT变换的一种变形。

这里参考韦易笑 试简介视频编码技术?

要彻底理解视频编码原理,看书都是虚的,需要实际动手,实现一个简单的视频编码器:

知识准备:基本图像处理知识,信号的时域和频域问题,熟练掌握傅立叶正反变换,一维、二维傅立叶变换,以及其变种,dct变换,快速dct变换。

第一步:实现有损图像压缩和解压参考 JPEG原理,将RGB->YUV,然后Y/U/V看成三张不同的图片,将其中一张图片分为 8x8的block进行 dct变换(可以直接进行二维dct变换,或者按一定顺序将8x8的二维数组整理成一个64字节的一维数组),还是得到一个8x8的整数频率数据。于是表示图像大轮廓的低频信号(人眼敏感的信号)集中在 8x8的左上角;表示图像细节的高频信号集中在右下角。

接着将其量化,所谓量化,就是信号采样的步长,8x8的整数频率数据块,每个数据都要除以对应位置的步长,左上角相对重要的低频信号步长是1,也就是说0-255,是多少就是多少。而右下角是不太重要的高频信号,比如步长取10,那么这些位置的数据都要/10,实际解码的时候再将他们10恢复出来,这样经过编码的时候/10和解码的时候10,那么步长为10的信号1, 13, 25, 37就会变成规矩的:0, 10, 20, 30, 对小于步长10的部分我们直接丢弃了,因为高频不太重要。也可以用四舍五入进行量化。由于无法恢复原始数据的精确 值,这个过程是有损的。很显然,步长大,量化值 范围就小,压缩效率高;步长小,反量化值能够更好地近似原始值,但压缩效率降低。

经过量化以后,8x8的数据块左上角的数据由于步长小,都是比较离散的,而靠近右下角的高频数据,都比较统一,或者是一串0,因此图像大量的细节被我们丢弃了,这时候,我们用无损压缩方式,比如lzma2算法(jpeg是rle + huffman)将这64个byte压缩起来,由于后面高频数据步长大,做了除法以后,这些值都比较小,而且比较靠近,甚至右下部分都是一串0,十分便于压缩。

JPEG图像有个问题就是低码率时 block边界比较严重,现代图片压缩技术往往要配合一些de-block算法,比如最简单的就是边界部分几个像素点和周围插值模糊一下。

做到这里我们实现了一个同 jpeg类似的静态图片有损压缩算法。在视频里面用来保存I帧数据。

相关文章

网友评论

      本文标题:H264系列七 JPEG DCT JPEG2000 DWT

      本文链接:https://www.haomeiwen.com/subject/cquogftx.html