文章目录

  • 一、基本原理
  • 二、具体技术细节

一、基本原理

CIIP是帧内帧间联合技术,这属于Merge系列技术的一个分支。该技术需要计算当前预测块的帧内预测值,即用传统的帧内预测模式去预测当前块的像素值,并存储下来。然后利用帧间的预测方式去预测当前块的帧间预测值,最后将帧内和帧间的预测值,通过某种方式加权得到当前预测块的最终预测值。

二、具体技术细节

CIIP技术在亮度块的和色度块都要实现,在目前的版本当中,亮度和色度帧内预测都只用Planar模式进行预测,帧间预测模式就是用Merge列表中最优的MV进行帧间预测。在VTM8.0当中,当前CU满足使用merge模式编码,并且当前CU包括至少64个像素,W<128,H<128W<128,H<128W<128,H<128,的条件时,需要一个标志位表示当前CU是否使用CIIP模式。

具体的加权公式如下:
PCIIP=((4−wIntra)∗Pinter+wIntra∗Pintra+2)>>2P_{CIIP}=\left( \left( 4-wIntra \right) *P_{inter}+wIntra*P_{intra}+2 \right) >>2 PCIIP​=((4−wIntra)∗Pinter​+wIntra∗Pintra​+2)>>2
权值wIntrawIntrawIntra是由当前CU的上方和左侧相邻块的编码模式决定的,其中帧间预测值的权重大小的为4−wIntra4-wIntra4−wIntra,具体的权值计算过程如下:

  1. 如果上方的相邻块可用(已经编码),且使用的是帧内编码模式则isIntraTop=1isIntraTop=1isIntraTop=1,否则isIntraTop=0isIntraTop=0isIntraTop=0
  2. 如果左侧的相邻块可用,且使用的是帧内编码模式则isIntraLeft=1isIntraLeft=1isIntraLeft=1,否则isIntraLeft=0isIntraLeft=0isIntraLeft=0
  3. a、如果isIntraTop+isIntraLeft=2isIntraTop+isIntraLeft=2isIntraTop+isIntraLeft=2,则wIntra=3wIntra=3wIntra=3;
    b.、如果如果isIntraTop+isIntraLeft=1isIntraTop+isIntraLeft=1isIntraTop+isIntraLeft=1,则wIntra=2wIntra=2wIntra=2;
    c、 否则wIntra=1wIntra=1wIntra=1

权重计算的代码如下:

//CIIP模式的加权函数,帧内预测和帧间值的加权值的选取有三种情况
void IntraPrediction::geneWeightedPred(const ComponentID compId, PelBuf &pred, const PredictionUnit &pu, Pel *srcBuf)
{const int            width = pred.width;CHECK(width == 2, "Width of 2 is not supported");const int            height = pred.height;const int            srcStride = width;const int            dstStride = pred.stride;Pel*                 dstBuf = pred.buf;int wIntra, wMerge;  //帧内帧间的权重变量const Position posBL = pu.Y().bottomLeft(); //当前PU左下角的块const Position posTR = pu.Y().topRight();  //当前PU上方的块const PredictionUnit *neigh0 = pu.cs->getPURestricted(posBL.offset(-1, 0), pu, CHANNEL_TYPE_LUMA);  //左侧的块设置为邻居0const PredictionUnit *neigh1 = pu.cs->getPURestricted(posTR.offset(0, -1), pu, CHANNEL_TYPE_LUMA);  //上方的块设置为邻居1//判断左侧和上方的块是否可用以及是否采用帧内编码bool isNeigh0Intra = neigh0 && (CU::isIntra(*neigh0->cu));bool isNeigh1Intra = neigh1 && (CU::isIntra(*neigh1->cu));if (isNeigh0Intra && isNeigh1Intra){wIntra = 3; wMerge = 1;}else{if (!isNeigh0Intra && !isNeigh1Intra){wIntra = 1; wMerge = 3;}else{wIntra = 2; wMerge = 2;}}for (int y = 0; y < height; y++){for (int x = 0; x < width; x++){//帧内的预测值和帧间的预测值进行加权,得到最终预测值dstBuf[y*dstStride + x] = (wMerge * dstBuf[y*dstStride + x] + wIntra * srcBuf[y*srcStride + x] + 2) >> 2;}}
}

更多关于视频编码知识和资源的分享,更精致的文章排版,欢迎关注博主微信公众号,一起交流、学习、进步!!!

【十五】 VVC/H.266 | 帧内帧间联合预测技术CIIP详解相关推荐

  1. [Python从零到壹] 十五.文本挖掘之数据预处理、Jieba工具和文本聚类万字详解

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  2. 2021年广东工业大学第十五届文远知行杯程序设计竞赛(同步赛)详解

    传送门 A M形字符 题意: M形字符串指的是由两个相同的回文串拼接而成 给你一个串S,问有多少个前缀是M形字符串 思路: M形是有两个相同的回文串构成的,所以这个M形串本身就是回文串,我们只需要判断 ...

  3. [网络安全自学篇] 五十五.Windows系统安全之构建ROP链绕过DEP及原理详解

    这是作者的网络安全自学教程系列,主要是关于安全工具和实践操作的在线笔记,特分享出来与博友们学习,希望您们喜欢,一起进步.前文分享了基于SEH异常处理机制的栈溢出漏洞,利用一个恶意的请求头部(HEAD或 ...

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

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

  5. H.266/VVC相关技术学习笔记16:VTM6.0中的CIIP技术(帧内帧间联合预测)

    今天讲一下目前VTM6.0版本中的CIIP技术,CIIP即为帧内帧间联合预测技术,这属于Merge系列的一个分支. 该技术需要先计算当前预测块的帧内预测值,即用Planar.DC.角度预测等传统的帧内 ...

  6. [Python从零到壹] 六十四.图像识别及经典案例篇之图像傅里叶变换和傅里叶逆变换详解

    祝大家新年快乐,阖家幸福,健康快乐! 欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所 ...

  7. VVC/H.266代码阅读(VTM8.0)(三. Slice到CTU的处理 )

    本文是本系列的第三篇博客,内容是分析从Slice到CTU的处理代码. 该系列相关博客为: VVC/H.266代码阅读(VTM8.0)(一. NALU提取) VVC/H.266代码阅读(VTM8.0)( ...

  8. (十五)集成学习(下)——蒸汽量预测

    参考:DataWhale教程链接 集成学习(上)所有Task: (一)集成学习上--机器学习三大任务 (二)集成学习上--回归模型 (三)集成学习上--偏差与方差 (四)集成学习上--回归模型评估与超 ...

  9. python turtle库setpos_Python内置海龟(turtle)库绘图命令详解(二)

    继续谈利用海龟库(turtle库)做图.在这篇文章(Python内置海龟(turtle)库绘图命令详解(一))中已经介绍了turtle的一些基本画图命令,包括画布的设计.画笔属性与状态的设置以及画笔的 ...

最新文章

  1. iis7下站点日志默认位置
  2. H5 的getImageData造成的大量内存开销
  3. 设计——主观理想路径
  4. 贴吧小爬虫之爬取源码
  5. mybatis学习(39):动态sql片段
  6. ORACLE ORA-01000: 超出打开游标的最大数(解决及原因)
  7. 探码SaaS帮助企业开展数字化营销之路!
  8. 智慧应急 科学管理:打造园区安全智慧大脑
  9. 基于docker的redis4.0单机集群搭建
  10. Windows 回声消除 怎么外放音乐不让对方听到
  11. vivo手机如何隐藏应用 vivo手机隐藏应用方法
  12. 虚拟机配置文件vmx放置路径问题
  13. 24个国外优秀的网页页眉设计欣赏
  14. 压缩跟踪Compressive Tracking源码理解
  15. phpfilter的妙用
  16. 交互设计师必备的9种能力
  17. 数据库--循环语句:for循环
  18. html设置旋转中心兼容ie,IE中的CSS旋转属性
  19. 数据库的“读写分离”
  20. FFplay文档解读-45-视频过滤器二十

热门文章

  1. 数据可视化之matplotlib实战:plt.step() 绘制阶梯图
  2. delphi控件切图界面闪烁_「这个控件叫什么」系列之加载占位图+页面指示器
  3. Nacos集群部署方案
  4. 计算机专业术语大全,计算机专业名词总汇,计算机专业名词总汇
  5. ENC28J60学习
  6. windows10下Docker部署Kurento
  7. 非此即彼的逻辑错误_英语逻辑错误一览
  8. 游戏手柄计算机,电脑游戏手柄怎么设置 电脑游戏手柄设置步骤【图文】
  9. RayVentory updated
  10. 接口与抽象类的区别,为什么要用接口,抽象类不香吗?