介绍完QTMTT在VTM中的实现,相信很多人包括我也对QTMTT的最终划分结果很感兴趣,于是我尝试将最终的划分结果进行可视化显示。

xCompressCU中,将对CTU进行递归划分,用RDcost选择出最优的划分方式,因此在xCompressCU中很难提取到QTMTT的最优划分方式。因此,要得到最终划分结果,必须在xCompressCU之后。VTM提供了遍历每个CodingStructure中所有CU的函数traverseCUs(),因此只需要在xCompressCU之后,遍历CTU中每个CU就可以得到其位置和尺寸信息。

为了可视化显示CU,需要修改CU边界像素值,但是重建像素将会用作参考,直接修改重建值将会影响帧间预测的运动估计和运动补偿,因此不能直接修改CU的重建值。我用了最笨的方法,copy重建帧,在copy上进行可视化,并保存下来。

下面给出实现过程

// 遍历每帧图像中所有CTU,对每个CTU遍历所有CU
for (int y = 0; y < pcv.heightInCtus; y++){for (int x = 0; x < pcv.widthInCtus; x++){const UnitArea ctuArea(pcv.chrFormat, Area(x << pcv.maxCUWidthLog2, y << pcv.maxCUHeightLog2, pcv.maxCUWidth, pcv.maxCUWidth));//  CU-based paintingif (CS::isDualITree(cs)){for (auto &currCU : cs.traverseCUs(CS::getArea(cs, ctuArea, CH_L), CH_L)){xDrawCUIntraColor(currCU, Height, Width, pbufY, pbufU, pbufV);}}else{for (auto &currCU : cs.traverseCUs(CS::getArea(cs, ctuArea, CH_L), CH_L)){xDrawCUColor(currCU, Height, Width, pbufY, pbufU, pbufV);}}}}
// 这里根据每个CU的编码模式,选择了不同的显示颜色
void xDrawCUIntraColor(CodingUnit& cu, int orgHeight, int orgWidth, unsigned char* tempY, unsigned char* tempU, unsigned char* tempV)
{const CompArea&  lumaArea = cu.block(COMPONENT_Y);int cuX = lumaArea.x;int cuY = lumaArea.y;int cuH = lumaArea.height;int cuW = lumaArea.width;int chromaX = cuX >> 1;int chromaY = cuY >> 1;int chromaH = cuH >> 1;int chromaW = cuW >> 1;unsigned char y = 0, u = 0, v = 0;if (cu.firstPU->intraDir[CHANNEL_TYPE_LUMA] < 2){rgb2yuv(0, 0, 255, y, u, v);      // blue}else{rgb2yuv(255, 0, 0, y, u, v);      // red}int tempLumaIdx;for (int i = 0; i < cuH; i++){for (int j = 0; j < cuW; j++){tempLumaIdx = (i + cuY) * orgWidth + cuX + j;if (i == cuH - 1 || j == cuW - 1) //i == 0 || i == cuH - 1 || j == 0 || j == cuW - 1{tempY[tempLumaIdx] = y;}}}int tempChromaIdx;for (int i = 0; i < chromaH; i++){for (int j = 0; j < chromaW; j++){tempChromaIdx = (i + chromaY) * orgWidth / 2 + (chromaX + j);if (i == chromaH - 1|| j == chromaW - 1)  //i == 0 || i == chromaH - 1 || j == 0 || j == chromaW - 1{tempU[tempChromaIdx] = u;tempV[tempChromaIdx] = v;}}}
}

最终的效果如下:

帧内划分结果

帧间划分结果

VVC学习之二:VTM中CU划分结构QTMTT(3):打印QTMTT最终划分相关推荐

  1. VVC学习之四:VTM中的数据结构——CodingUnit、PredictionUnit、TransformUnit

    文章目录 CodingUnit PredictionUnit TransformUnit 基本单元的结构体中,只定义了CU.PU.TU的属性信息,其头文件为Unit.h,对基本单元的操作定义在Unit ...

  2. (转)SpringMVC学习(十二)——SpringMVC中的拦截器

    http://blog.csdn.net/yerenyuan_pku/article/details/72567761 SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter, ...

  3. VVC学习之五:VTM帧内预测工具详解

    文章目录 简介 1. 扩展角度帧内模式 1.1 MPM构建和模式编码 1.2 帧内广角预测(WAIP) 1.3 基于模式的参考样本平滑(MDIS) 2. 跨分量线性模型预测(CCLM) 3. 位置自适 ...

  4. JavaWeb学习总结(二)——JSP中的九个内置对象

    一.JSP运行原理 每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理.JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet ...

  5. 【theano-windows】学习笔记二——theano中的函数和共享参数

    前言 上一篇博客中学到了theano中的变量类型,也就是dscalar.dvector之类的, 然后还有一个theano.function和eval函数, 将我们所定义的操作转换成theano可执行的 ...

  6. CNS文章代码学习(二)Immunity 三级淋巴结构 文章学习

    前言:经典的文章值得反复学习,正好也有同学提问figure3的问题:因为我也不是专业的生信研究生,所以只能浅浅讲一讲我的想法和理解. Summary: 肿瘤内三级淋巴结构TLS的出现与良好的临床预后和 ...

  7. C++虚幻-密室逃脱学习总结(二)虚幻4文件夹结构及基本操作

    文件夹结构 打开你所下载的虚幻引擎 首先大致了解下目录结构,进入你存储的路径找到项目名文件夹下会有如下几个文件夹: 以下是官方文档中解释的目录存放内容 官方文档地址(建议保存):http://api. ...

  8. Python学习篇(五) Python中的循环

    文章目录 前言 一.range函数 二.while循环 2.1四步循环法 三.for in 循环 四.流程控制语句 4.1 break 4.2 continue 五.else语句 六.嵌套循环 七.二 ...

  9. storm目录结构及在zk中的目录结构

    storm目录结构及在zk中的目录结构 @(STORM)[storm] storm目录结构及在zk中的目录结构 一storm在磁盘中的内容 一nimbus中的目录结构 1inbox目录 2stormd ...

最新文章

  1. 北科院分子互作实战专题培训班(10月底/11月底班)(生物医药与营养健康协同创新中心)...
  2. 2432功率计使用说明_为什么说功率计是自行车开挂神器?
  3. Navicat连接Oracle数据库以及Oracle library is not loaded的解决方法
  4. Java枚举益智游戏
  5. cf1207解题报告
  6. 微型计算机用什么评价判断,环评中常用评价等级的判定
  7. python Requests登录GitHub
  8. librtmp分析(发送数据包处理)
  9. 【吐血整理】年度盘点 | 2019年Java面试题汇总篇——附答案
  10. 【视频】TFLearn深度学习库,20行Python代码实现情感分类
  11. __proto__VS。 JavaScript原型
  12. 理解Servlet及其对象
  13. android自定义软键盘-中文与英文大小切换
  14. 水晶报表教程:手把手教你制作基本报表
  15. 在windows 2003 中,启动SQL Server 2000 提示“没有找到MSVCR71.dll因此这个应用程序未能启动”
  16. 让Vim打造成强大的IDE,附_vimrc的配置和使用
  17. WM开发常用资源下载 (转自黎波老师博客)
  18. 计算机管理老是自动打开,win10系统打开设备管理器后一直自动刷新的设置方案...
  19. 使用SharePoint中的Move To功能将一个文档转移到其他位置
  20. vnc连接linux服务器实现与windows文件互传

热门文章

  1. 安装正版 Windows
  2. 中国图书分类法简表 潇湘博客
  3. 十六进制(H)转换为10进制
  4. 作为管理者的第6周工作感悟
  5. Windows Terminal修改背景美化
  6. ★[leetCode] 二叉树专题
  7. java计算机毕业设计-线上自助旅游报名网-源码+数据库+系统+lw文档+mybatis+运行部署
  8. 统信UOS+中望CAD,携手赋能中国制造
  9. iOS之UI组件整理
  10. 累积分布函数(CDF)