linux桌面 h.264 编码,H.264视频压缩编码学习笔记

因此与RGB相对,另一种颜色空间为Y:Cr:Cb,这里Y为亮度分类,即一幅彩色图片的黑白版本,由RGB加权平均得出。Cr,Cb是R,B与Y之差,为色差信息,因Cr+Cb+Cg为常数,所以Cg无需传输。

RGB与Y:Cr:Cb转换公式

Y=0.299R+0.587G+0.114B Cb=0.564(B-Y) Cr=0.713(R-Y)

R=Y+1.402Cr G=Y-0.344Cb-0.714Cr B=Y+1.772Cb

利用人眼对亮度敏感的优势,在一幅彩色图片中,我们可以交叉地使一些点只有亮度分量没有色度分量,而不被人眼察觉。

4:2:2采样(YUY2):对于图像数组每隔一列只采样Y分量。

4:2:0采样(YV12):每隔一列和一行只采样Y分量。

因此4:2:0采样的图像只有1/4的像素是24位的,其余3/4的像素只有Y分量的8位,即平均每像素1/4×24+3/4×8=12位,这也是为什么它在FOURCC代码中的表示为YV12。

一个视频编码器的主要功能有:

1,滤波。消除视频源中的干扰信号。

2,源模型编码。把视频变换成一种易于压缩的格式。

3,熵编码。无损压缩上一步得到的数据。

最关键的是第二步了。在这里视频编码被分为帧内编码(Intra-frame Coding)和帧间编码(Inter-frame

coding),视频无非是一张张连续的图片,帧内编码就相当于压缩一张图片,因为组成一段视频的图片有一定的相似性,据此我们可以只完全编码压缩某一帧图片,该帧称为I帧,其后的帧只保存那一帧与I帧或基于I帧的某种运动预测后的图片的差别,如果是连续的场景,物体的运动预测又足够准确的话,这种差别是很小的,因此我们只需保存很小的数据量就能恢复出原图像。运动预测的一般方法:把当前帧的某个区块向各个方向移动几格,并与下一帧的对应区块进行比较(通过计算两个图像数组的均方差),保留均方差最小的那个方向做为运动矢量,用于解编码。这个过程会用到各种不同的搜索方式和大量的比较运算,是衡量一个编码器好坏的关键。

编码步骤

变换编码。因为一幅图像的各个部分的空间相关性很高,不利于直接压缩。变换编码就是把图像用一种各部分相关性弱的形式表示,这样就可以去掉一些不重要的点,来进行有损压缩。其实质就是一个24位二进制数的二维数组,从一个各值很平均的形式变到另一种各值落差很大的形式,当然这个过程应该是可逆的。通常落差很大意味着有很多值在零值附近,通过量化就可以变成一个有很多零值的稀疏矩阵。

量化过程可以理解为把数组中所有的值除以一个数N,这样小于N的数就变成了0,而那些大数需要被传输的位数也降低了,其恢复过程为整个数组乘以N,那些在除法过程中被舍弃的位数就成了不可恢复的误差了。

常见的变换编码有DCT和小波变换。

熵编码,根据统计信息将频繁出现的符号用较少的比特表示,不经常出现的符号用较多的比特表示,进而达到对数据压缩的目的,而在此之前往往会通过游程编码重新排列数组,以使更多的零排在一起。这些排在一起的零将通过(run,level)编码,用一个符号表示。

显然最直接的熵编码算法是哈夫曼编码,但实际应用中的熵编码会更加复杂。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值