H266/VVC 量化编码中 JCCR 技术

色度联合编码 JCCR

  1. VVC 支持色度分量联合编码(Joint Coding of Chroma Residual,JCCR), 两个色度残差联合编码。通过 TU 的标志位 tu_joint_cbcr_residual_flag 指定该工 具,并通过 CBF 来隐式传输所选的模式。仅当 TU 的至少一个色度分量的 CBF 为 1 时才需要传输 tu_joint_cbcr_residual_flag 标志位。在 PPS 和 slice header 中, JCCR 模式的 QP offset 和普通模式的色度 QP offset 不同。JCCR 有三个子模式, 当 TU 激活子模式 2 时,则在量化过程中色度 QP offset 和亮度生成的色度 QP 相加,当 TU 激活子模式 1 或 3 时,则色度 QP 的生成方式和普通的 Cb,Cr 相同。

  2. JCCR模式通过使用单一的联合残差块来描述同一变换单元中 Cb(蓝色分量)和Cr(红色分量)块的残差,从而可能提高编码效率。这种模式利用了Cb和Cr残差在实际过程中往往呈现一定的关系,通过编码一个联合残差信号,然后在解码端根据这个联合残差信号推导出原始的Cb和Cr残差信号,以此来提高编码效率。说白了,JCCR 技术实际就是对 Cb、Cr 的残差进行加权平均。

  3. 色度残差的重建过程如下表所示,tu_cbf_cb 和 tu_cbf_cr 分别是 Cb 和 Cr 的 CBF,mode 是子模式其可以通过 Cb 和 Cr 的 CBF 计算得到不需要在码流中传输。 且只对 I slice 才支持全部三种子模式,对于 P 和 B slice 只支持子模式 2。且对于 P 和 B slice 只 有 当 Cb 和 Cr 的 CBF 都等于 1 时才需要传输 tu_joint_cbcr_residual_flag 标志位。CSign 是符号位,在 slice header 中传输。 resJointC[ ][ ]是码流中传输的色度的残差值
    在这里插入图片描述

  4. resJointC[ ][ ]的生成过程如下:

    • 当激活子模式 2 时,
      在这里插入图片描述

    • 否则,当激活子模式 1 时,
      在这里插入图片描述

    • 否则,当激活子模式 3 时,
      在这里插入图片描述

  5. JCCR 和色度块的变换跳过模式(TS)可以配合使用。如果一个色度分量选择 DCT-II(或 TS)作为最优变换,另一个色度分量的变换系数全为 0,或者两个色 度分量都选择 DCT-II(或 TS)作为最优变换,则 JCCR 编码中仅考虑 DCT-II(或 TS)。如果一个色度分量选择 DCT-II 另一个选择 TS,则 JCCR 编码中需要考虑 DCT-II 和 TS。

  6. 在 2019 年 1 月的 JVET-M0305[CE7-related: Joint coding of chrominance residuals] 提案中介绍了 JCCR 工具原理和实验收益。
    在这里插入图片描述在这里插入图片描述

  7. 在 2020 年 1 月的 JVET-Q2002[Algorithm description for Versatile Video Coding and Test Model 8 (VTM 8)] 提案中对 JCCR 技术进行了总结描述。
    在这里插入图片描述在这里插入图片描述在这里插入图片描述

  8. 在 VVenC 编码器中 TrQuant.cpp 文件中fwdTransformCbCr 函数通过 Cb、Cr 的残差来计算resJointC 的值。

template<int signedMode> std::pair<int64_t,int64_t> fwdTransformCbCr( const PelBuf& resCb, const PelBuf& resCr, PelBuf& resC1, PelBuf& resC2 )
{const Pel*  cb  = resCb.buf;const Pel*  cr  = resCr.buf;Pel*        c1  = resC1.buf;Pel*        c2  = resC2.buf;int64_t     d1  = 0;int64_t     d2  = 0;for( SizeType y = 0; y < resCb.height; y++, cb += resCb.stride, cr += resCr.stride, c1 += resC1.stride, c2 += resC2.stride ){for( SizeType x = 0; x < resCb.width; x++ ){int cbx = cb[x], crx = cr[x];if      ( signedMode ==  1 ){c1[x] = Pel( ( 4*cbx + 2*crx ) / 5 );d1   += square( cbx - c1[x] ) + square( crx - (c1[x]>>1) );}else if ( signedMode == -1 ){c1[x] = Pel( ( 4*cbx - 2*crx ) / 5 );d1   += square( cbx - c1[x] ) + square( crx - (-c1[x]>>1) );}else if ( signedMode ==  2 ){c1[x] = Pel( ( cbx + crx ) / 2 );d1   += square( cbx - c1[x] ) + square( crx - c1[x] );}else if ( signedMode == -2 ){c1[x] = Pel( ( cbx - crx ) / 2 );d1   += square( cbx - c1[x] ) + square( crx + c1[x] );}else if ( signedMode ==  3 ){c2[x] = Pel( ( 4*crx + 2*cbx ) / 5 );d1   += square( cbx - (c2[x]>>1) ) + square( crx - c2[x] );}else if ( signedMode == -3 ){c2[x] = Pel( ( 4*crx - 2*cbx ) / 5 );d1   += square( cbx - (-c2[x]>>1) ) + square( crx - c2[x] );}else{d1   += square( cbx );d2   += square( crx );}}}return std::make_pair(d1,d2);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/893484.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ZooKeeper 数据模型

ZooKeeper 数据模型 ZooKeeper 拥有层次化的命名空间&#xff0c;类似分布式文件系统&#xff0c;但每个节点不仅能有子节点&#xff0c;还可关联数据。节点路径为规范的绝对路径&#xff0c;用斜杠分隔&#xff0c;无相对引用。路径命名有如下约束&#xff1a; 路径名不能包…

云原生时代,如何构建高效分布式监控系统

文章目录 一.监控现状二.Thanos原理分析SidecarQuerierStoreCompactor 三.Sidecar or ReceiverThanos Receiver工作原理 四.分布式运维架构 一.监控现状 Prometheus是CNCF基金会管理的一个开源监控项目&#xff0c;由于其良好的架构设计和完善的生态&#xff0c;迅速成为了监控…

关于扫雷的自动补空实现C语言

关于扫雷的自动补空实现C语言 相信很多朋友在用C语言实现扫雷功能时&#xff0c;都想实现扫雷里面的的自动补足功能&#xff0c;但总是难以实现&#xff0c;在这里我将分享一种方法——递归思想 先看代码&#xff01; 位置在game.c //判断附近雷区并过滤空白区&#xff08;…

图形化数据报文转换映射工具

目录 概要整体架构流程技术名词解释技术细节小结 概要 在当今数字化时代&#xff0c;数据的处理和分析是企业、科研机构以及各类组织日常运营的核心环节。数据来源广泛&#xff0c;格式多样&#xff0c;常见的数据格式包括XML&#xff08;可扩展标记语言&#xff09;和JSON&a…

LINUX下设置分离状态(Detached State)和未设置分离状态的主要区别在于线程资源的管理方式和线程的生命周期。以下是两种状态的对比:

1. 设置分离状态&#xff08;Detached State&#xff09; 资源管理&#xff1a; 线程终止时&#xff0c;系统会自动释放与线程相关的所有资源&#xff08;如线程栈、线程控制块&#xff09;。不需要其他线程显式回收&#xff08;pthread_join&#xff09;。 线程生命周期&…

微前端qiankun的基本使用(vue-element-admin作为项目模版)

微前端qiankun的基本使用(vue-element-admin作为项目模版) qiankun架构特点主应用netmoni_master改造工程项目目录结构子项目配置:子应用注册配置项container:子应用挂载节点配置项activeRule:子应用路由子应用netmoni_child1改造目录结构项目配置:src/settings中配置子应…

使用PHP函数 “is_object“ 检查变量是否为对象类型

在PHP中&#xff0c;变量可以保存不同类型的值&#xff0c;包括整数、字符串、数组、布尔值等等。其中&#xff0c;对象是一种特殊的数据类型&#xff0c;用于封装数据和方法。在处理PHP代码中&#xff0c;我们经常需要检查一个变量是否为对象类型&#xff0c;以便进行相应的处…

DAY3,模拟终端

题目 实现一个终端的功能&#xff0c;注意需要带有cd功能 思路 如何 C语言执行shell命令&#xff1f; 使用进程替换exec函数&#xff1b;&#xff1b;使用system函数。 如何 切换工作目录&#xff1f; 使用chdir函数切换工作目录。 其…

一键视频转文字/音频转文字,浏览器右键提取B站视频文案,不限时长免费无限次可用

上篇文章阿虚分享了自己的「短视频」笔记方案 短视频文件小&#xff0c;易存储&#xff0c;所以阿虚建议是直接将原视频插入到笔记当中 而长视频文件大&#xff0c;很难像短视频一样操作。阿虚之前的建议是提取重要部分视频转长截图&#xff0c;或者视频转GIF 但上述方案仔细…

【C++】详细讲解继承(上)

C面向对象的三大特性&#xff1a;封装&#xff0c;继承&#xff0c;多态。现在我们就介绍一下继承。 1.继承的概念及定义 1.1 继承的概念 继承机制是⾯向对象程序设计使代码可以 复⽤ 的最重要的⼿段。我们前面接触到的都是 函数 层次的复用&#xff0c;遇到过的 类 层次的复…

AIGC专栏18——EasyAnimateV5.1版本详解 应用Qwen2 VL作为文本编码器,支持轨迹控制与相机镜头控制

AIGC专栏18——EasyAnimateV5.1版本详解 应用Qwen2 VL作为文本编码器&#xff0c;支持轨迹控制与相机镜头控制 学习前言相关地址汇总源码下载地址HF测试链接MS测试链接 测试效果Image to VideoText to Video轨迹控制镜头控制 EasyAnimate详解技术储备Qwen2 VLStable Diffusion …

1905电影网中国地区电影数据分析(一) - 数据采集、清洗与存储

文章目录 前言一、数据采集步骤及python库使用版本1. python库使用版本2. 数据采集步骤 二、数据采集网页分析1. 分析采集的字段和URL1.1 分析要爬取的数据字段1.2 分析每部电影的URL1.2 分析每页的URL 2. 字段元素标签定位 三、数据采集代码实现1. 爬取1905电影网分类信息2. 爬…

【25】Word:林涵-科普文章❗

目录 题目​ NO1.2.3 NO4.5.6 NO7.8 NO9.10 NO11.12 不连续选择&#xff1a;按住ctrl按键&#xff0c;不连续选择连续选择&#xff1a;按住shift按键&#xff0c;选择第一个&#xff0c;选择最后一个。中间部分全部被选择 题目 NO1.2.3 布局→纸张方向&#xff1a;横向…

C语言二级

//请编写函数fun()&#xff0c;该函数的功能是&#xff1a;计算并输出给定整数n的所有因 //子&#xff08;不包括1和自身&#xff09;之和。规定n的值不大于1000。例如&#xff0c;在主函数 //中从键盘给n输入的值为856&#xff0c;则输出为&#xff1a;sum 763。 //注意&…

P6周:VGG-16算法-Pytorch实现人脸识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 我的环境 语言环境&#xff1a;Python 3.8.12 编译器&#xff1a;jupyter notebook 深度学习环境&#xff1a;torch 1.12.0cu113 一、前期准备 1.设置GPU im…

Mac下安装ADB环境的三种方式

参考网址&#xff1a; Mac下安装ADB环境的三种方式-百度开发者中心 ADB&#xff0c;即Android Debug Bridge&#xff0c;是Android开发过程中不可或缺的工具。通过ADB&#xff0c;开发者可以在计算机上管理设备或模拟器上的应用&#xff0c;提供了丰富的调试功能。然而&#…

WordPress Fancy Product Designer插件Sql注入漏洞复现(CVE-2024-51818)(附脚本)

免责申明: 本文所描述的漏洞及其复现步骤仅供网络安全研究与教育目的使用。任何人不得将本文提供的信息用于非法目的或未经授权的系统测试。作者不对任何由于使用本文信息而导致的直接或间接损害承担责任。如涉及侵权,请及时与我们联系,我们将尽快处理并删除相关内容。 0x0…

web速览

web速览 1. 前端开发 概述&#xff1a; 前端开发是构建网站用户界面的过程&#xff0c;主要关注网站的视觉效果和用户体验。又称为客户端 技术栈&#xff1a; HTML&#xff08;超文本标记语言&#xff09;&#xff1a;用于创建网页的结构和内容。CSS&#xff08;层叠样式表&a…

PHP常见正则表达式

一、校验数字的表达式 1 数字&#xff1a;^[0-9]*$ 2 n位的数字&#xff1a;^\d{n}$ 3 至少n位的数字&#xff1a;^\d{n,}$ 4 m-n位的数字&#xff1a;^\d{m,n}$ 5 零和非零开头的数字&#xff1a;^(0|[1-9][0-9]*)$ 6 非零开头的最多带两位小数的数字&#xff1a;^([1-9][0-…

0164__【GNU】gcc -O编译选项 -Og -O0 -O1 -O2 -O3 -Os

【GNU】gcc -O编译选项 -Og -O0 -O1 -O2 -O3 -Os_gcc -o0-CSDN博客