HEVC帧间预测流程
前言:最近在琢磨hevc理论知识,看着那本书绕过去绕过来咋也没把流程想通,去找了师兄说耽误他一分钟,结果叭叭叭了六小时哈哈哈哈。 最后还是感谢师兄给我解答问题,我写这篇文章主要是为了帮自己梳理一次帧间预测的流程(防止自己以后忘记了)。
那么首先要明确几个基本概念:
- 运动矢量(MV):运动矢量是指当前块相较于自己的参考帧某个块所移动的距离大小, 分别是(Δx,Δy) (注:MV是单指运动的距离大小,并不包括其参考帧索引。)
- 运动数据(Motion Parameters):运动数据包含运动矢量以及参考帧索引,这个在看英文书时要注意理清楚,不然容易搞混。也就是说Motion Parameters = Motion Vector + reference index
- 运动矢量预测(MVP):是根据空域时域关系对当前块的运动矢量的预测,根据模式不同所得到的MVP也会有区别,这里下文会着重描述,这里仅需记住 MVP 不是 当前块的真实 MV,只是一个预测的结果。 (注:这里要注意的一点是 MVP不仅包含了运动距离,还包含了这个MV的参考帧索引,这段若还是不理解往后看到不同模式的处理过程就能明白了)
- 运动矢量残差(MVD):为了更进一步的节省比特流提高编码效率,引入运动矢量残差,残差可比运动矢量本身的数据量要小得多噢。(注:不是每个模式都会有MVD的)
- 运动估计(ME):利用块匹配算法,在参考帧中搜索与当前块最相似的块,搜索出来后会返回当前块的MV。
- 运动补偿(MCP):运动补偿做件什么事呢, 拿出刚刚做运动估计的参考帧, 根据刚刚得到的MV,找到对应的块,将这个块的像素赋给当前帧以得到预测图像, 由于这里的MV可能不是整数,HEVC中的方法是亮度1/4插值,色度1/8插值来得到像素值的。
这里多嘴提一句:为什么要进行帧间预测,是因为一个视频中,时域中帧之间的相关性很强,比如相邻帧长得都十分相似。而视频压缩的意义就在于去掉冗余来保证传输的数据量越小越好,所以若我们能从时域间找到关系,用已编码的帧的数据来预测出当前帧,那我们就能去掉极大程度的冗余量,直接传残差就行了。<