您的位置:首页 > 其它

视频压缩知识介绍(一)——评价标准及算法原理

2012-12-27 16:17 429 查看
1.1 视频压缩评价标准

评价视频压缩算法的压缩效果,信噪比是一个非常有效的指标,它非常客观。一般来说,同等码率下,解码后图像与原始图像的信噪比高的那个码流,图像效果更好些。

不过,视频压缩的效果也不能只关注信噪比,它还需要考虑人眼的一些视觉特性,毕竟,人是通过眼睛在看图象,而人眼不是仅仅在计算信噪比。对于视频压缩的这一特性,我取了个名字,叫做“骗眼睛”。关于视觉特性在编码中的应用,最现成的例子就是所谓的YUV420格式数据。从数据量来说,YUV420是 YUV444的一半,但是,实际上人在看这两组图像的时候,视觉感受其实相差不大。究其原因,是因为人眼对颜色不是太敏感,而对亮度却很敏感。420和 444数据在亮度上完全一下,而颜色数据相差却很大,可是,人眼的感觉却并不明显。我们采用420的数据来存储图像数据,仅此一项,就节省了一半的存储空间!

1.2 视频压缩算法原理

视频压缩是有损压缩,一般说来,视频压缩的压缩率都很高,能够做到这么高的压缩率是因为视频图像有着非常大的时间和空间的冗余度。所谓的时间冗余度指的是两帧相邻的图像他们相同位置的像素值比较类似,具有很大的相关性,尤其是静止图像,甚至两帧图像完全相同,对运动图像,通过某种运算(运动估计),应该说他们也具有很高的相关性;而空间相关性指的是同一帧图像,相邻的两个像素也具备一定的相关性。这些相关性是视频压缩算法的初始假设,换句话说,如果不满足这两个条件(全白噪声图像,场景频繁切换图像等),视频压缩的效果是会很差的。

去除时间相关性的关键算法是运动估计,它找出当前图像宏块在上一帧图像中最匹配的位置,很多时候,我们只需要把这个相对坐标记录下来,就够了,这样就节省了大量码字,提高了压缩率。视频压缩算法中,运动估计永远是最关键最核心的部分。

去除空间相关性是通过DCT变换来实现的,把时域上的数据映射到频域上,然后对DCT系数进行量化处理,基本上,所有的有损压缩,都会有量化,它提高压缩率最明显,模数转换也是靠量化吧?。

当然,一些在无损压缩中非常好用的压缩算法,视频压缩里面也有采用,比如霍夫曼编码等。

基本上视频压缩的核心就这些,当然,这些里面的具体实现还非常复杂,也有很多学问,但是大的方面基本上就是去除相关性了。抓住这两点,再去理解压缩标准中的具体算法就不难了。

1.3 H.261 简要介绍

H.261 协议又被称为p64,是第一个视频压缩标准,主要应用于视频会议行业。从压缩技术上来说,与后来的压缩技术相比,它的算法最简单,自然,压缩的效果也比较差。对于研究视频压缩技术的工程师而言,从H.261开始研究,有种事半功倍的感觉,因为后来的压缩算法基本思想都和H.261差不多,只是在细节上更加高效了。

前面介绍过了,视频压缩的关键就是运动估计、DCT变换、量化和反量化。H.261除了这些,还有一个环路滤波器,用来消除块效应。下面,我们一一介绍。

运动估计(ME)

我们经常可以碰到这样的情况,两个不同的产商,他们都支持H.261,设置的码率也一样,可是实际跑起来的时候,两个产商的编码效果差别却很大,这里面,主要的原因就是运动估计算法不同。

最简单的运动估计算法是所谓的全搜索,可是实际的产品中,几乎没有采用这种算法的,为什么?因为全搜索太慢了,对视频编码的算法选择而言,永远是在编码效率和算法性能上找平衡点。事实上,有很多算法在性能上可能是全搜索的10%左右,但是,编码效率可能只比全搜索稍差,对于实时应用的编码器而言,选择一个适合CPU运算特点的优化算法是关键。这里插一句,如果是非实时应用的话,采用全搜索是个非常好的注意。

H.261协议里面其实并没有定义如何运动估计,因为,协议一般只定义解码器,它不管你如何编码,只要你最后得到的码流符合它的协议就够了。与运动估计对应的解码过程叫运动补偿(MC),H.261运动补偿主要特点有:1 它的搜索范围是 -16到15;2 只支持整像素搜索;3 每个宏块只有一个运动向量,并不支持到块级运动估计;4 只支持P帧,并不支持双向预测帧(B帧)。

与后来的协议相比较,个人的看法,运动估计的范围-16到15基本上是够用了,再大的话,一方面性能可能做不到,另一方面,实际应用中,运动超过这个范围的宏块还是很少的。与整像素搜索对应的是半像素、四分之一像素等搜索精度,这个算法应该说非常有效,个人感觉H.263比H.261算法好的最关键因素就是这里。运动向量只到宏块一级其实差不多,不过支持4mv的话,有些场合码率可能可以节省5%到15%,这是我以前mpeg-4编码器测试的结论,当然,为了追求这10%左右的效率,性能上运动估计大约要增加30%以上的运算量(看选择的算法)。B帧也是很重要的算法,以前的测试结论大约是可以节省15% 左右,不过H.261也不支持。

在H.261的编码帧中,分为I帧和P帧。I帧也被称为关键帧,而P帧则被称为预测帧。I帧里的宏块全部由帧内编码宏块组成,并没有运动估计。实际上I帧的编码算法和jpeg压缩算法很类似,可以说就是使用了jpeg压缩技术。I帧的压缩效果比P帧差很多,同等图像质量的话,I帧的码率可能是P帧的十倍,从这里可以看出来运动估计对于视频压缩的巨大作用。也正是因为I帧压缩效果差,因此,很多编码器算法都有一个叫做关键帧间隔的参数,这个值比较流行设置为 100,也就是大概4秒钟出现一次I帧。很多实时编码的算法,经常会过几秒,画面给人的感觉是刷了一下,这就是关键帧在刷新。

对本文有任何疑问可以加QQ:2256985656
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  视频 知识