HEVC代码学习19:MV、MVD、MVP概念解析
来源:互联网 发布:施华蔻黑胶和银胶 知乎 编辑:程序博客网 时间:2024/05/29 08:06
在代码阅读中,可以看到MV、MVD、MVP三个概念,在开始学习的时候就很糊涂,一直买具体来看下,也找不到具体在哪里有讲解,现在来关注学习一下。
先来逗比一下,名词解析:
MVP——most valuable player,那MVD是什么呢?most valuable dog。好冷。。。。。算了开始正题吧。
概念
MV在之前已经详细学习过了,是通过当前帧和参考帧进行搜索求出的,是一个指示最佳匹配块位置的矢量。
对每一个块的MV都进行编码,那么将花费很多的比特数,特别是小尺寸块。空间相邻的块之间存在相关性,因此可以根据邻近已编码的块进行预测,预测得到的运动矢量即为MVP。时域上也是存在相关性的,因此也可以进行时域预测,可以得到时域MVP。
为了进一步减少编码比特数,采用了残差编码,即对当前MV和预测MV(MVP)的差值进行编码,这个差值即为MVD。
三者之间的关系:MV=MVP+MVD
MV的数据结构详见:
http://blog.csdn.net/lin453701006/article/details/73116271
MV通过xMotionEstimation得到。
http://blog.csdn.net/lin453701006/article/details/70860150
MVD的实际计算在predInterSearch完成。
http://blog.csdn.net/lin453701006/article/details/72458327
发展
在H.264中,使用当前块的左侧、上方、右上方的块的中值作为当前块的MV预测值,即MVP。
MVP= median(MV1,MV2,MV3)
在HEVC中增加了merge和AMVP。
merge下直接用候选块的MV作为当前块的MV,即当前块与候选块共用一个MV,从而节省了开销,此时不存在MVD。当MVD=0时会启动merge模式。merge模式下,编解码器会依照相同的规则建立候选列表,因此只需要传输候选列表的索引。
merge部分的代码目前我只看了getInterMergeCandidates,用于构建候选列表,见:
http://blog.csdn.net/lin453701006/article/details/71436116
AMVP是从时域和空域中选定多个候选块组成一个集合,在该集合中寻找最优的MV匹配,选出最优预测MV进行差分编码。AMVP模式下需要传输最优候选块的索引、参考帧下标、以及MVD。
AMVP相关函数见:
http://blog.csdn.net/lin453701006/article/details/72842344
代码中的位置
既然是运动矢量,必然是在帧间预测部分。而在上一部分提到,merge只是使用候选块MV来构建MV的候选列表,因此,在merge中是不需要计算MV的,也没有MVP和MVD。
在代码中,实际计算MV、MVP、MVD是在predInterSearch函数中(http://blog.csdn.net/lin453701006/article/details/72458327)。
首先会使用AMVP来计算MVP(http://blog.csdn.net/lin453701006/article/details/72842344),找到最优MVP作为运动估计的起点进行整像素和亚像素搜索就得到了MV(http://blog.csdn.net/lin453701006/article/details/70860150),最终通过MV-MVP计算MVD。
- HEVC代码学习19:MV、MVD、MVP概念解析
- MVP---MVD
- HEVC代码学习16:运动矢量MV的数据结构
- H264 MVD&MVP
- h.264 MVD MVP 解释
- MVD
- HEVC代码学习:HM使用方法
- 【HEVC学习与研究】15、HEVC解码中的SPS解析
- 【HEVC学习与研究】16、HEVC中的PPS解析
- 【HEVC学习与研究】18.HEVC的条带头解析
- HEVC代码学习2:TAppEncTop::encode函数
- HEVC代码学习3:TEncTop::encode函数
- HEVC代码学习7:xPatternSearchFracDIF函数
- HEVC代码学习8:xMotionEstimation函数
- HEVC代码学习9:getInterMergeCandidates函数
- HEVC代码学习11:xCompressCU函数
- HEVC代码学习12:xCheckRDCostInter函数
- HEVC代码学习13:predInterSearch函数
- JOZJ5185. 【NOIP2017提高组模拟6.30】tty's sequence
- HQL查询
- javase
- 百度地图申请AK
- 萌新报道,立贴为证
- HEVC代码学习19:MV、MVD、MVP概念解析
- Git错误non-fast-forward后的冲突解决
- SqEl基础2
- Python基础--列表类型
- 带重复元素的子集
- 牛顿迭代法应用
- mcisendString制作播放器
- eclipse更改字体和文档注释配色
- Leetcode 322. Coin Change