Combined inter and intra prediction (CIIP)

CIIP,顾名思义,就是说对编码块进行帧间预测Pred_inter和帧内预测Pred_intra,将两个预测块加权组合得到最终预测块。

  • 当CU用Merge模式进行编码,且至少有64个亮度样点时(W∗H>=64W*H>=64W∗H>=64),编码器用一个附加的flag标识当前CU是否使用CIIP。
  • 如果当前CU使用CIIP,则首先跟军帧内预测模式(用2个语法元素表示:DC, planar, horizontal和vertical中的一种)获得帧内预测块Pred_intra,然后获取Merge模式下得到的帧间预测块Pred_inter;最后将两者加权组合得到最终预测块Pred。

获取帧内预测模式

CIIP共允许4种帧内预测模式:DC, PLANAR, HORIZONTAL和VERTICAL;但是,如果CU很宽(W>2H)则禁止HORIZONTAL模式,如果CU很长(H>2W)则禁止VERTICAL模式,即这两种情况下只允许3种模式。

CIIP与传统帧内相似,设置3MPM(most probable modes),MPM列表根据以下规则构建:

  • 左方和上方相邻块分别设置为块A和块B;

  • A和B的帧内模式分别表示为intraModeA和intraModeB

    • X为块A或块B;
    • 若满足以下任一条件,则将intraModeX设置为DC模式,1)块X不存在;2)块X不是CIIP或帧内模式;3)块X不在当前CTU内;
    • 否则,intraModeX设置规则如下:1)如果块X是DC或PLANAR模式,则设置为DC或PLANAR;2)如果块X是类似于垂直形状的块,则设置为VERTICAL;3)如果块X是类似于水平形状的块,则设置为HORIZONTAL。
  • 如果intraModeA和intraModeB相同,如果intraModeA为PLANAR或DC,则MPMs设置为{PLANAR, DC, VERTICAL} ;

  • intraModeA和intraModeB不同

    • MPMs前两个设置为{intraModeA, intraModeB};
    • 按照 PLANAR, DC and VERTICAL的顺序与MPMs中的前两者检查重复性,若不相同,则作为MPM中。

如果CU如上面所述的很长或很宽,则MPM flag默认为1,无需传输;否则,传输MPM flag用来说明CIIP中的帧内模式是否是MPM列表中的一个。

如果MPM flag为1,则继续传输MPM idx表示CIIP帧内模式为MPM中的第几个;否则,MPM flag为0,则CIIP帧内模式不在MPM列表中,总共4个模式,MPM中包含3个模式,则另外一个模式为CIIP帧内模式。

对于色度分量,默认使用与亮度分量相同的帧内模式。
与传统帧内相同,CIIP的帧内预测模式还会被用来预测后续的周边CU。

加权组合帧内帧间预测块

CIIP帧间预测块PinterP_{inter}Pinter​通过正常的merge模式获取,帧内预测块PintraP_{intra}Pintra​通过帧内预测获取,将两者按照如下规则进行加权组合得到最终预测块:

  • 如果帧内预测模式为DC或PLANAR模式,或W或H小于4,则使用1/2,1/2的加权组合;
  • 否则,此时帧内预测模式为HORIZONTAL或VERTICAL模式,根据样点在块中的位置确定权值。以HORIZONTAL为例, W表示为块的宽度,H表示为块的高度。 首先将编码块分成四个相等面积的部分,每个部分的尺寸W/4×HW / 4×HW/4×H。 从最接近帧内预测参考样本的部分开始并且在距帧内预测参考样本最远的部分处结束,4个区域中的每一个的权重wt分别被设置为6,5,3和2。 使用以下方法导出最终的CIIP预测信号:


分析:CIIP同时利用了时域信息和空域信息,前者主要是基本亮度或基本色度值,后者主要是纹理信息。

代码详解:VVC/VTM:帧间预测——Combined inter and intra prediction (CIIP)代码详解

VVC/VTM:帧间预测——Combined inter and intra prediction (CIIP)相关推荐

  1. H.266/VVC帧间预测技术学习:帧间和帧内联合预测(Combined inter and intra prediction, CIIP)

    在HEVC中一个CU在预测时要么使用帧内预测要么使用帧间预测,二者只能取其一.而VVC中提出的CIIP技术,是将帧间预测信号与帧内预测信号相结合. 在VVC中,当CU以Merge模式编码时,且CU包含 ...

  2. 【十六】 H.266/VVC | VVC中帧间预测技术详细总结 | 所有帧间预测技术代码汇总

    前言 ​ 帧间预测是影响视频编码性能的关键环节之一,H.266/VVC帧间预测在传统只能应对简单的平移运动的基础上,采用了仿射运动模型,可以描述更加复杂的缩放.旋转等运动.为了更好的发挥合并模式(Me ...

  3. VVC帧间预测(十)帧间帧内联合预测CIIP

    帧间帧内联合预测(Combined inter and intra prediction ,CIIP),在HEVC中一个CU在预测时要么使用帧内预测要么使用帧间预测,二者只能取其一.而VVC中提出的C ...

  4. H.266/VVC帧间预测总结

    一.帧间预测基本原理 帧间预测是利用视频帧与帧之间的相关性,去除视频帧间的时间冗余信息.统计表明,帧间差绝对值超过3的像素平均不到一帧像素的4%,因此,采用高效的帧间编码方式,可以很大程度上提高视频压 ...

  5. VVC帧间预测(一)扩展的merge模式

    VVC在HEVC的基础上增加了很多新的帧间预测工具,在VTM5里新增的帧间预测工具如下: Extended merge prediction Merge mode with MVD (MMVD) AM ...

  6. 视频编码(结构、帧内预测、帧间预测)参考自公众号Video Coding

    编码结构 H.265/HEVC(高效视频编码)提出了编码树单元CTU(Coding Tree Unit),CTU按四叉树方式向下划分成CU(Coding Unit).VCC允许的最大CTU尺寸为128 ...

  7. HEVC代码学习:帧间预测——MVP过程中MV的获取、传递及存储

    作为一个视频编码小白,最近开始着手啃HEVC帧间预测的代码,想用博客记录一下自己的学习过程,也想与大家分享.交流一下. HEVC代码的学习主要是参考两位大神岳麓吹雪.NB_vol_1的博客以及HM参考 ...

  8. DCC2020:VVC帧间预测中的几何划分

    本文来自DCC2020论文<Advanced Geometric-based Inter Prediction for Versatile Video Coding> 几何划分相较于三角划 ...

  9. H.266/VVC帧间预测技术学习:带有运动矢量差的Merge技术(Merge mode with MVD)

    在VVC的扩展Merge模式当中,当前CU生成的Merge list中选择一个率失真代价值最小的候选项直接作为自己的运动信息.除了常规Merge模式,VVC还引入了带运动矢量差(Merge mode ...

最新文章

  1. python【数据结构与算法】搜索初探
  2. golang使用iota
  3. mysql 5.6安装 linux_linux下MySQL5.6安装记录
  4. 华为S5700交换机开启telnet远程登陆配置(推荐)
  5. 浪潮服务器系统套件,浪潮服务器随机套件版本列表
  6. php做上位机,开发过usb上位机驱动的大虾请看一下(附图)
  7. windows访问mysql57_windows下 Mysql5.5升级5.7(其实就是安装了两个版本的mysql)
  8. [零基础学JAVA]Java SE面向对象部分-17.面向对象高级(05)
  9. 段错误之 memset 对类对象的误用
  10. Windows通用文件关联错误恢复
  11. 阿里面试整个流程(已OC)
  12. Java 输出三角形
  13. python hist bins_python – matplotlib中的Hist:Bins不居中,轴上的比例不正确
  14. 计算机大赛算法,计算机经典算法——锦标赛排序算法
  15. Jquery-canvas动态粒子背景动画-适用于登陆注册页面背景
  16. 深度学习实战——CNN+LSTM+Attention预测股票
  17. Java方法excel文件转换成xml文件
  18. linux系统有哪些版本 linux系统哪个版本好用
  19. Word中单倍行间距是多少磅
  20. Visual Studio 2022环境中C语言的使用——一维数组和二维数组

热门文章

  1. Android设置按钮不可点击
  2. 苏州大学计算机专业2018年复试上机真题
  3. 全国计算机程序员等级,计算机等级考试程序员级考试之四大经验
  4. 编写Java程序时的一些经验总结
  5. java实现如何定时给微信群中发送消息
  6. Python图像增强
  7. Kotlin sealed class 的使用
  8. Ubuntu安装Elasticsearch集群及Kibana
  9. Java基础 第二天
  10. 接口和抽象类的区别是什么?抽象类必须要有抽象方法吗?抽象类能使用 final 修饰吗?