VVC帧间预测(五)SbTMVP和AMVR
基于子块的TMVP (SbTMVP)
VTM中提出的基于子块的TMVP(subblock-based temporal motion vector prediction ,SbTMVP)和HEVC中的TMVP类似。TMVP计算方法可以参考扩展的merge模式中1.2节时域候选列表构建。
SbTMVP和TMVP主要有以下两点不同:
TMVP在CU级预测运动而SbTMVP在sub-CU级预测运动。
TMVP直接使用同位图像的同位块计算时域MV,而SbTMVP在计算同位块前先进行一个运动偏移,这个运动偏移来自当前CU的空域相邻块的MV。
SbTMVP计算当前CU的子CU的MV分为两步:
1、如下图所示,检查当前CU的空域相邻块A1,如果A1的参考图像正好是当前图像的同位图像则用A1的MV作为运动偏移,否则运动偏移设为(0,0)。
2、使用第1步得到的运动偏移(将当前块的坐标加上运动偏移)从同位图像获得子CU的运动信息(MV和参考图像索引)。如下图所示,图中假设使用A1的MV作为运动偏移,然后对每个子CU获取其在同位图像中对应块的运动信息,然后按照TMVP的处理方法将获得的MV进行缩放得到子CU的MV。
在VTM5中,基于子块的merge list内既包含SbTMVP候选项也包含affine merge候选项。在序列参数集(sequence parameter set ,SPS)中有标志位表明是否使用SbTMVP模式,如果允许使用SbTMVP模式那么在基于子块的merge list中SbTMVP候选项在affine merge候选项前面。该list中候选项数量在SPS中指定,VTM5规定最多候选数量为5。
在SbTMVP中子CU的大小固定为8x8,且和affine merge模式一样只有当CU宽高都大于等于8时才使用SbTMVP模式。
Adaptive motion vector resolution (AMVR)
在HEVC中当slice header中use_integer_mv_flag=0时,MVD(CU的MV和MVP的差值)按照1/4亮度像素精度传输。VVC提出了CU级的AMVR,AMVR允许CU的MVD使用不同精度编码。
其中可选精度如下:
Normal AMVP模式:1/4亮度像素精度,整亮度像素精度,4倍亮度像素精度。
Affine AMVP模式:1/4亮度像素精度,整亮度像素精度,1/16亮度像素精度。.
在CU级,只有当MVD至少有一个非零分量时才需要传输其精度。如果所有MVD分量(水平分量和垂直分量)都是0,则MVD默认使用1/4亮度像素精度。
当一个CU至少有一个非零MVD分量时,有一个标志位表示该CU的MVD是否使用1/4亮度像素精度,如果该标志位为0则表示使用1/4亮度像素精度不需要再传其他标志位。否则,对于Normal AMVP模式的CU需要第二个标志位表示是否使用整亮度像素精度或4倍亮度像素精度。对于Affine AMVP模式的CU需要第二个标志位表示是否使用整亮度像素精度或1/16亮度像素精度。为了确保重建的MV有同样的精度MVP会四舍五入到和MVD同样的精度。MVP朝0进行四舍五入(也就是负MVP朝正无穷方向,正MVP朝负无穷方向)。
在VTM5中两种模式的像素精度定义如下:
const MvPrecision Mv::m_amvrPrecision[3] = { MV_PRECISION_QUARTER, MV_PRECISION_INT, MV_PRECISION_4PEL }; // for cu.imv=0, 1 and 2
const MvPrecision Mv::m_amvrPrecAffine[3] = { MV_PRECISION_QUARTER, MV_PRECISION_SIXTEENTH, MV_PRECISION_INT }; // for cu.imv=0, 1 and 2
精度转换代码如下:
void changePrecision(const MvPrecision& src, const MvPrecision& dst){const int shift = (int)dst - (int)src;if (shift >= 0){*this <<= shift;}else{const int rightShift = -shift;const int nOffset = 1 << (rightShift - 1);
#if JVET_N0335_N0085_MV_ROUNDINGhor = hor >= 0 ? (hor + nOffset - 1) >> rightShift : (hor + nOffset) >> rightShift;ver = ver >= 0 ? (ver + nOffset - 1) >> rightShift : (ver + nOffset) >> rightShift;
#elsehor = hor >= 0 ? (hor + nOffset) >> rightShift : -((-hor + nOffset) >> rightShift);ver = ver >= 0 ? (ver + nOffset) >> rightShift : -((-ver + nOffset) >> rightShift);
#endif}}
void roundToPrecision(const MvPrecision& src, const MvPrecision& dst){changePrecision(src, dst);changePrecision(dst, src);}
参考
JVET-N1002
JVET-M0246
JVET-M0165
感兴趣的请关注微信公众号Video Coding
VVC帧间预测(五)SbTMVP和AMVR相关推荐
- H.266/VVC帧间预测总结
一.帧间预测基本原理 帧间预测是利用视频帧与帧之间的相关性,去除视频帧间的时间冗余信息.统计表明,帧间差绝对值超过3的像素平均不到一帧像素的4%,因此,采用高效的帧间编码方式,可以很大程度上提高视频压 ...
- DCC2020:VVC帧间预测中的几何划分
本文来自DCC2020论文<Advanced Geometric-based Inter Prediction for Versatile Video Coding> 几何划分相较于三角划 ...
- VVC帧间预测(一)扩展的merge模式
VVC在HEVC的基础上增加了很多新的帧间预测工具,在VTM5里新增的帧间预测工具如下: Extended merge prediction Merge mode with MVD (MMVD) AM ...
- VVC帧间预测(十)帧间帧内联合预测CIIP
帧间帧内联合预测(Combined inter and intra prediction ,CIIP),在HEVC中一个CU在预测时要么使用帧内预测要么使用帧间预测,二者只能取其一.而VVC中提出的C ...
- H.266/VVC帧间预测技术学习:帧间和帧内联合预测(Combined inter and intra prediction, CIIP)
在HEVC中一个CU在预测时要么使用帧内预测要么使用帧间预测,二者只能取其一.而VVC中提出的CIIP技术,是将帧间预测信号与帧内预测信号相结合. 在VVC中,当CU以Merge模式编码时,且CU包含 ...
- H.266/VVC帧间预测技术学习:带有运动矢量差的Merge技术(Merge mode with MVD)
在VVC的扩展Merge模式当中,当前CU生成的Merge list中选择一个率失真代价值最小的候选项直接作为自己的运动信息.除了常规Merge模式,VVC还引入了带运动矢量差(Merge mode ...
- H.266/VVC帧间预测技术学习:几何划分模式(Geometric partitioning mode, GPM)
几何划分模式 (Geometric partitioning mode ,GPM)原理 针对图像中运动物体的边界部分,VVC采用了几何划分模式进行帧间预测.如下图所示,GPM模式在运动物体的边界处进行 ...
- 【十三】 H.266/VVC | 帧间预测技术 | 解码端运动向量修正技术(DMVR)
目的:为了提高merge模式下双向预测MV的准确性 基本思路:双向预测是在list0和list1中分别寻找一个运动向量,然后将MV0和MV1所指向的预测块进行加权得到最终预测块,而DMVR技术不是直接 ...
- H.266/VVC帧间预测技术学习:解码端运动矢量细化(Decoder side motion vector refinement, DMVR)
解码端运动矢量细化(Decoder side motion vector refinement, DMVR) 为了提高Merge模式的MV的准确性,在VVC中使用了基于双边匹配(BM)的解码端运动矢量 ...
- H.266/VVC帧间预测技术学习:CU级双向加权预测(Bi-prediction with CU-level weight)
CU级双向加权预测(Bi-prediction with CU-level weight ,BCW) 在HEVC中,通过对从两个不同参考图片获得的两个预测信号求平均和/或使用两个不同运动矢量来生成双向 ...
最新文章
- windows下把Apache加入系统服务
- Java RMI(远程方法调用) 实例与分析 (转)
- c++中std::set自定义去重和排序函数
- Codeforces Round #588 (Div. 2) F. Konrad and Company Evaluation 图论 + 建反图 好题
- html ul左侧浮动,UL里的LI元素左浮动层一行显示时使其居中的方法
- Qt编译错误:无法解析的外部符号 __imp__CloseServiceHandle __imp__OpenSCManager
- centos6 5从命令行进入图形界面
- pandas mysql index_Pandas从入门到精通(3)- Pandas多级索引MultiIndex
- spring + groovy 转
- 车rc陀螺仪测试软件,利用加速度计和陀螺仪测量车辆运动
- 戴尔台式机安装win 7系统
- 【编程基本功练习0】zoj 3486
- Python与Memcached交互
- 轻轻松松的记住Linux系统目录结构
- 《程序员》2012年4期精彩内容:创业
- 【报告分享】淘宝直播2021年度报告-淘榜单淘宝直播(附下载)
- 任务一: SpringMVC基本应用
- Ubuntu安装nvm
- 插画“城市景色”练习
- 义务教师 obligatory tutor
热门文章
- 怎样查看C语言的程序内容,什么手机软件能看c语言文件?
- linebreak_vue-cli构建的项目,eslint一直报CRLF/LF的linebreak错误
- 2019年 PMP认证
- javaweb sso_试驾SSO
- A Game of Thrones(59)
- 展望2010:3G的应用与服务年
- idea插件HttpClient插件如何使用?
- 问道图语言_GraphQL_v1.0.0
- c语言中 amp 是什么意思6,c语言中amp;amp;NBSP是什么意思
- 第一章--数据库系统基本概念(一)