视频 --- 压缩基础

2017-07-25  本文已影响142人  vedon_fu

压缩方式

** 为什么会存在有失真的压缩?**
主要是因为人的眼睛和耳朵灵敏度不高,一张图片少掉一些高频的内容,人眼无法感知,因此并不影响图片的展示。又例如音乐,音乐高频部分超过人耳可以识别的范围,这部分数据可以去掉。因此有了mp3 等音频压缩算法。

色域

视频压缩的时候,用的色域是YCbCr 。 YCbCr其中Y是指亮度分量,Cb指蓝色色度分量,而Cr指红色色度分量。查看更多

它们之间的关系是:

Y = 0.257*R+0.564*G+0.098*B+16
Cb = -0.148*R-0.291*G+0.439*B+128
Cr = 0.439*R-0.368*G-0.071*B+128

** 不是有RGB了吗?什么还用YCbCr ?**
人眼对亮度是比较敏感的,对彩度的敏感度不高。因此,亮度的压缩率可以降低,彩度的压缩率可以提高。人眼对压缩后的图片与原图,在感官上差异就会大大减少。

另外它将亮度信息(Y)与色彩信息(UV)分离,没有UV信息一样可以显示完整的图像,只不过是黑白的,这样的设计很好地解决了彩色电视机与黑白电视的兼容问题。并且,YUV不像RGB那样要求三个独立的视频信号同时传输,所以用YUV方式传送占用极少的频宽。


图片压缩

要恢复图片只需要执行的反操作,得到的图片与原图是有区别的,只要人眼无感知就好。

下面看一下每一步的是怎样的一个过程:

DCT

DCT 可以理解为一个坐标轴转换,是一种Transform Coding。

上图是一个8 * 8的block,每一个格子相当于一个pixel。经过DCT后,仍然是一个8 * 8 的block ,但是不同的是,原本表示的是空间维度的值,转换后表示的是频率维度的值。

高频部分集中在右下角,低频部分集中在左上角。高频部分表示不是很重要的数据,接着把高频部分的数据变成0,就会有一个不错的压缩效果。这就是Quantization要做的事情。

Quantization Matrix 表示每一个DCT的数据要除以一个怎样的数。可以看到Matrix 左上角是比较小的,右下角是比较大的数。

因为在DCT左上角是比较重要的数据,所以除以比较小的数,让失真没那么严重。右下角的数相对来说没那么重要,所以可以除以一个比较大的数。

下图中的左图就是经过Quantization 后的DCT数据,可以看到右下角的数基本上都变为0。数据为0 的部分的压缩率将为变得非常高!

接着把数据从二维变为一维。

最后就是做Entropy encode ,得到的最终图片的数据。

上一篇下一篇

猜你喜欢

热点阅读