【视频编码\VVC】环路滤波基础知识

本文为新一代通用视频编码H.266\VVC原理、标准与实现的简化笔记。

定义:在视频编码过程中进行滤波,滤波后的图像用于后续编码。

目的:1、提升编码图像的质量。2、为后续编码图像提供高质量参考,获得更好的预测效果。

VVC中主要采取的技术有:色度与亮度缩放(Luma Mapping Chroma Scaling, LMCS)、去方块滤波(De-Blocking Filter, DBF)、样点自适应补偿(Sample Adaptive Offset, SAO)、自适应滤波(Adaptive Loop Filter, ALF)。

DBF用于降低方块效应、SAO用于改善振铃效应、ALF可以减少解码误差,在编码环路中,一般是先去方块滤波、样点自适应补偿和自适应环路滤波的顺序。LMCS一般对编码前的图像进行预处理。

亮度映射与色度缩放

包括两个部分:1、基于自适应分段线性模型的亮度映射;应用在像素级,利用亮度值范围及广电转换特性来提高视频的编码效率。2、基于亮度的色度残差缩放:应用在色度块级,通过补偿亮度信号映射对色度信号的影响。

解码端LMCS框架结构如下图所示:

LMCS技术

基本思想:在指定的位深下更好地使用允许的亮度值范围。

10bit视频亮度值范围为[64,940]。在编解码过程中,前向映射将范围[64,940]映射到[0,1023]中,再进行变换、量化等模块的处理。或者一个亮度范围较小的视频,没有充分利用允许的亮度值,因此LMCS就是将原始域亮度值映射到允许的亮度值范围。

基于分段线性模型的亮度映射

VVC中,前向映射函数FwdMap使用一个分段线性模型,反向映射函数InvMap为逆函数。

根据视频的位深将原始域的码值范围划分为16个相等的片段,每个片段的码字数量由OrgCW表示,变量InputPivot[i]表示原始域内各片段的边界点。

InputPivot[i] = i * OrgCW;

映射域内各片段的边界点表示MappedPivot[i],MappedPivot[i+1]-MappedPivot[i]的值就是映射域中第i个片段的亮度值个数,表示为SignalledCW[i]

色度缩放

前向缩放将原始域色度值转换到映射域,有

C_{Resscale} = C_{res}*C_{scale} = C_{res}/C_{Invscale}

色度缩放以TU为单位,同一个TU使用相同的缩放因子,也使用分段线性模型,同一个片段色度缩放因子相同。色度缩放偏移量deltaCRS由自适应参数集LMCS_APS标识。

LMCS的实现

介绍的是VTM中使用的LMCS模型参数的构建方法,对于SDR\HDR-PQ\HDR-HLG视频的特性不同,模型参数不同。对于SDR和HDR-HLG视频,基于局部亮度方差,针对PSNR指标进行优化。对于HDR-PQ视频,针对加权PSNR进行优化,基本思想为空间平滑区域分配相比复杂区域更多的码字。

  • SDR\HDR-HLG视频

1、统计分析视频内容,在原始域划分片段,分配初始码字

2、根据图像内容调整片段的码字数量

3、如果分配的码字总数大于允许的最大码字数,从第一个片段开始,每个片段减少相同的数量,知道妈祖条件,得到最终每个片段分配的码字数量SignalledCW[i].

4、根据亮度样本映射前后的相对值及平均局部方差,确定LMCS片类型、高码率自适应和色度调整自适应参数。

  • HDR-PQ视频

1、计算映射模型曲线的斜率

2、积分映射模型曲线的斜率

3、归一化

4、计算每个片段的码字数量。

LMCS的相关语法元素

SPS层

sps_lmcs_enabled_flag:为1的时候标识使用LMCS

PH层

ph_lmcs_enabled_flag:当前图像是否使用LMCS

ph_lmcs_aps_id:当前按图片中的slice所应用的LMCS APS的aps_adaptation_parameter_set_id

ph_chroma_residual_scale_flag:当前图片是否使用色度残差缩放

SH层

sh_lmcs_used_flag:当前slice是否使用LMCS

APS层

lmcs_min_bin_idx:LMCS过程中使用的最小bin索引

lmcs_delta_max_bin_idx:最大bin索引与15之间的差值

lmcs_delta_cw_prec_minus1:加1用于kmcs_delta_abs_cw[i]的比特数

lmcs_delta_abs_cw[i]:第i个区间的码字绝对增量值

lmcs_delta_sign_cw_flag[i]:标识变量LmcsDeltaCW[i]的符号

lmcs_delta_abs_crs:表示变量LmcsDeltaCrs的绝对码字值

lmcs_delta_sign_crs_flag:表示变量LmcsDeltaCrs的符号

去方块滤波

方块效应:图像中编码块边界的不连续性。因为各块的变换量化编码过程相互独立,导致相邻块边界的不连续性。因为在运动补偿的过程中,相邻块的预测值可能来自不同图像的不同位置,可能导致预测残差信号在块边界产生数值不连续的问题。会传递到后续编码图像。

H.264、H.265就采用了环路去块滤波,能够自适应的根据不同的视频内容、不同的编码方式选择不同强度的滤波参数,对其进行平滑处理。

H.266针对采用子块编码技术的子块边界进行滤波,针对大块亮度分量的长抽头滤波,针对色度分量的强滤波。去块滤波模块会对CU边界、变换子块边界(SBT\ISP模式及大尺寸CU隐式分割时引入的变换单元边界)及预测子块边界(SbTMVP模式和仿射模式引入的预测单元边界)进行滤波处理。

基本步骤:

  • 先确定带滤波的边界,确保去块滤波过程应用于所有的子块边界和CU边界。
  • 遵循先亮度分量后色度分量,先垂直方向后水平方向的原则对CU中含有的边界进行滤波。边界两侧采用滤波操作的像素数由边界两侧块的大小决定。

去块滤波包括两个环节:滤波决策和滤波操作。去块滤波算法对不同的视频内容及不同的编码参数具有自适应的能力,对不同的块边界自适应选择是否滤波、边界的滤波强度及最大滤波长度。

滤波决策

目的:对所有满足滤波尺寸条件的边界,根据视频内容及编码参数,确定最大滤波航长度、边界的滤波强度及滤波参数。

1、获取最大滤波长度

根据CU的大小、子块的大小、子块与CU边界的距离初步确定相邻块的每行最多可修改的像素个数。

2、获取边界的滤波强度(BS)

根据边界块的编码参数初步判断边界块是否需要滤波及其滤波参数。

3、滤波强度的选择

根据人眼的掩盖效应,只有平坦区域的不连续块边界才是滤波的对象,而滤波操作也会消除强纹理区域应有的纹理信息。需进一步对视频内容进行分析,根据边界两侧块内像素值的变化和编码参数确定。根据边界块内像素值的变化程度判断内容特性,也根据边界区域的内容特性判断。

滤波强度分为:不滤波、短抽头滤波(分为强滤波、弱滤波)、长抽头滤波。

会根据像素的变化率和平坦度计算出边界区域纹理度,值越大,表示区域越不平坦。纹理度大到一定程度,关闭滤波。阈值与量化参数设计有关。

H.266中新增了基于亮度分量强度的自适应去方块滤波(luma-adaptive de-blocking filter)。根据重建像素的平均亮度水平为QP添加偏移量去调整去方块滤波强度,用来补偿在线性光域使用非线性转换函数造成的失真。

对于色度分量,较为平坦,所以不需要计算平坦度。

滤波操作

滤波操作包括的类型

  • 亮度分量的长抽头滤波
  • 亮度分量的短抽头强滤波
  • 亮度分量的短抽头弱滤波
  • 色度分量的强滤波
  • 色度分量的弱滤波

长抽头滤波的目的是保留块边界处的斜面或线性信号,针对大块边界修改更多的像素值,滤波器与像素位置相关。

相关语法

sps层

sps_virtual_boundaries_enabled_flag是否允许环内滤波过程跨越虚拟边界

sps_virtual_boundaries_enabled_flag虚拟边界信息是否在SPS层中存在

pps层

pps_loop_filter_across_tiles_enabled_flag标识tile的边界处是否执行环路滤波操作

pps_loop_filer_across_slice_enabled_flag标识slice的左边界及上边界处是都执行环路滤波操作

pps_deblocking_filter_control_present_flag标识PPS层中是否存在控制去方块滤波的语法元素

pps_deblocking_filter_override_enabled_flag标识Slice头部是否存在语法元素pps_deblocking_filter_override_enabled_flag

pps_deblocking_filter_diabled_flag在pps_deblocking_filter_diabled_flag不存在的情况下,是否对各个slice执行去方块滤波

ph层

ph_luma_beta_offset_div&ph_luma_tc_offset_div2去方块滤波参数默认的补偿值

sh层

sh_deblocking_params_present_flag标识slice头部是否存在去方块滤波

sh_deblocking_filter_disabled_flag标识当前slice是否进行去方块滤波

sh_luma_beta_div2&sh_luma_tc_offset_div2当前slice的去方块滤波参数的补偿值

样点自适应补偿

H.266采用基于块的变换,并在频域对变换系数机型量化,由于高频变换系数的量化失真,解码后会在边缘周围产生波纹现象,称为振铃效应

样点自适应补偿技术:从像素域入手抑制振铃效应,对重建曲线中出现的波峰增加负值,对波谷增加正值。

SAO技术

H.2662中的SAO技术以CTB为基本单位,对不同类型的像素使用不同的补偿值。

补偿形式:边界补偿(EO)和边带补偿(BO)

边界补偿

通过比较当前像素与相邻像素的大小对当前像素进行归类,对同类像素补偿相同数值。使用一维3像素分类模式

边界补偿分为4种模式:水平方式、垂直方式、135°方向、、45°方向。在任意一种模式,将重建像素归为5个种类。对应谷状、凹角、凸角、峰状。

边带补偿

根据像素强度进行归类,将像素范围分为32条边带,同一边带使用相同的补偿值。一个CTB只能选4条连续的边带,只对这4条边带的像素进行补偿。

SAO参数融合

参数融合是指对于一个CTB,其SAO参数直接使用相邻块的SAO参数。

SAO实现

1、快速SAO模式判别

SAO最终的补偿模式可以从8种情况中选择:不补偿、EO_0模式、EO_1模式、EO_2模式、EO_3模式、BO模式、左相邻参数融合模式、上相邻块参数融合模式。对于非参数融合模式,像素又被分为很多类,每类有多个候选补偿值。

通常通过率失真性能选择最优的一组SAO参数(模式、补偿值、边带信息)

2、在VTM10.0种的实现

整体流程:信息统计、亮度分量CTB的SAO模式、色度分量CTB的SAO模式、CTU的最优SAO模式、CTU的SAO滤波。

自适应环路滤波

ALF技术包括亮度ALF、色度ALF、和分量间的ALF。基于维纳滤波原理,通过原始图像信息和重建图像信息建立维纳-霍夫方程求解一系列最小误差的滤波器系数。

维纳滤波

是一种使滤波输出与期望输出间均方无法最小的线性滤波器。求偏导求解线性方程组可以得到一组滤波系数使滤波输出与期望输出间的MSE最小。维纳滤波器系数与重建图像内容无关。有效权衡滤波器性能和滤波器系数数量需要进行考虑。

ALF技术

VVC中根据视频内容自适应地在有限个滤波系数集中选择一组滤波器,对重建视频进行滤波。

滤波系数集包含M个滤波器子集,每个滤波器子集包含与视频内容相关的N类滤波器。解码端针对每个CTU,ALF根据子集缩影确定滤波器子集,根据像素块的内容确定滤波器类,即可以确定该像素块使用的滤波器系数。编码端根据像素块内容确定滤波器类,然后哦利用率失真确定最优滤波器子类,并对子集索引进行编码。

滤波器系数集:包括固定子集和APS子集。

亮度ALF

滤波系数集包含16个固定子集和最多8个APS子集,每个子集包含25组滤波器类。

滤波器子集

VVC中,亮度ALF包含16个固定子集,共包含64组滤波系数。根据子集索引和类别,查表得到滤波器编号。再根据滤波器编号,查表得到对应相应滤波器的系数。

滤波器类

更具内容特性,选择一个滤波器类。

1、拉普拉斯梯度

2、方向性因子D:体现梯度方向

3、活动性因子A:体现梯度的强弱,查表获得

4、滤波器类:索引为filtIdx = 5D+A

滤波器模板

以中心对称的7x7菱形。每组滤波系数对应4种滤波器模板:不变换、对角线变换、垂直翻转、旋转变换。

利用4个梯度方向确定滤波器模板的变换方式。

滤波过程

根据之前得到的7x7滤波器模板,对4x4亮度块中的每个像素进行滤波处理。

滤波器构建

将slice分为4x4的块,根据梯度计算每个4x4块的方向性和活动度,进而得到每个块的滤波器类。针对每个滤波器类,将所采用该滤波器的4x4块作为一个整体,利用维纳-霍夫方程,求该滤波器类的系数。

优化方法

  • 不对所有的CTU进行ALF
  • APS滤波系数需要编码传输,合并减少25类滤波器可以提高压缩效率。

色度ALF

比较简单,只使用APS子集。对色度分量,每个APS子集都包含8组滤波器。采用中心对称的5x5菱形滤波器模板。不需要对滤波器模板进行变换。针对色度分量,将slice分为8个区域,每个区域内分别包含连续整数个CTU,为每个区域计算一组滤波器系数,得到8组滤波器。

分量间ALF

利用亮度值进行CCALF,对色度值进行补充和修正。可以通过亮度信息进行ALF补偿色度分量的细节,改善色度分量的重建质量。对于色度分量,每个APS子集包含4个滤波器,采用3x4的菱形滤波器模板。通过减弱CCALF在高QP编码区域的应用防止产生色度纹理过丰富的伪影。

参数过多,详见标准定义。

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

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

相关文章

使用LinkedList实现堆栈及Set集合特点、遍历方式、常见实现类

目录 一、使用LinkedList实现堆栈 堆栈 LinkedList实现堆栈 二、集合框架 三、Set集合 1.特点 2.遍历方式 3.常见实现类 HashSet LinkedHashSet TreeSet 一、使用LinkedList实现堆栈 堆栈 堆栈(stack)是一种常见的数据结构,一端…

后端程序员入门react笔记(五)ajax请求

常见的ajax Ajax 最原始的方式,基于原生的jsXmlHttpRequest 多个请求之间如果有先后关系,会存在很多层回调的问题,也是基于原生jsJquery Ajax 基于原生XHR封装,依赖Jquery框架,由jquery 框架去封装原生的XML(Xml)封装…

【高德地图】Android高德地图控件交互详细介绍

📖第5章 与地图控件交互 ✅控件交互🧊缩放按钮🧊指南针🧊定位按钮🧊地图Logo ✅手势交互🧊缩放手势🧊滑动手势🧊旋转手势🧊倾斜手势🧊指定屏幕中心点的手势操…

CSP-J 2023 T1 小苹果

文章目录 题目题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示 题目传送门题解思路总代码 提交结果尾声 题目 题目描述 小 Y 的桌子上放着 n n n 个苹果从左到右排成一列,编号为从 1 1 1 到 n n n。 小苞是小 Y 的好朋友,每天她都会从…

EXCEL 在列不同单元格之间插入N个空行

1、第一步数据,要求在每个数字之间之间插入3个空格 2、拿数据个数*(要插入空格数1) 19*4 3、填充 4、复制数据到D列 5、下拉数据,选择复制填充这样1-19就会重复4次 6、全选数据D列排序,这样即完成了插入空格 以…

MySQL问题记录

问题 Ubuntu2204 通过 apt 安装 mysql-server8.0.36 后,数次修改密码不生效,仍可无密码登录。 解决 mysql_native_password 是MySQL 5.7及之前版本使用的默认身份验证插件。在MySQL 8.0及更高版本中,默认的身份验证插件 caching_sha2_pass…

密评技术要求实施详解:每一步都关键

密评简介 密评定义:全称商用密码应用安全性评估, 是对采用商用密码技术、产品和服务集成建设的网络和信息系统密码应用的合规性、正确性、有效性进行评估的活动。 评测依据:GB/T 39786-2021《信息安全技术 信息系统密码应用基本要求》。 密评对象&…

新能源汽车PACK电池包的气密性测试需要用到哪些快速密封连接器

PACK电池包是新能源汽车的重要部件之一,在全部组装完成后需要对其壳体进行气密性测试,以确保壳体的密封性能,避免有雨水、灰尘等外界侵扰拒之门外,从而保证电池的使用寿命不受损害。 新能源汽车PACK电池包 在做气密性测试时需要用…

VoIP(Voice over Internet Protocol 基于IP的语音传输)介绍(网络电话、ip电话)

文章目录 VoIP(基于IP的语音传输)1. 引言2. VoIP基础2.1 VoIP工作原理2.2 VoIP协议 3. VoIP的优势和挑战3.1 优势3.2 挑战 4. VoIP的应用5. 总结 VoIP(基于IP的语音传输) 1. 引言 VoIP,全称Voice over Internet Prot…

更多闰年数

输入2 个正整数a和b,表示开始的年份和结束的年份,问从a年到b年有多少闰年? 输入格式 第一行2个整数a和b,范围在[1, 1,000,000,000]。 输出格式 只一个整数。 输入/输出例子1 输入: 1 10000 输出: …

Jmeter基础(3) 发起一次请求

目录 Jmeter 一次请求添加线程组添加HTTP请求添加监听器 Jmeter 一次请求 用Jmeter进行一次请求的过程,需要几个步骤呢? 1、添加线程组2、添加HTTP请求3、添加监听器,查看结果树 现在就打开jmeter看下如何创建一个请求吧 添加线程组 用来…

致CentOS 7普通用户之装机初始化说明

一:CentOS 7安装盘制作 1.准备:linux操作系统安装包,百度搜索下载:CentOS 7。(一般安装包,包含CentOS 7全系列版本,自己选择安装配置) 2.准备:rufus.exe安装盘制作软件…

CUDA自学笔记001 CUDA编程模型、CUDA线程模型及其管理、CUDA内存模型及其管理

CUDA编程模型 我们使用CUDA_C语言进行CUDA编程, 1,CUDA编程模型提供了线程抽象接口用于控制GPU中的线程 2,CUDA编程模型提供了内存访问控制,我们可以实现主机和GPU设备内存的控制,我们可以实现CPU和GPU之间内存的数据传…

yolov5-tracking-xxxsort yolov5融合六种跟踪算法(三)--目标跟踪

本次开源计划主要针对大学生无人机相关竞赛的视觉算法开发。 开源代码仓库链接:https://github.com/zzhmx/yolov5-tracking-xxxsort.git 先按照之前的博客配置好环境: yolov5-tracking-xxxsort yolov5融合六种跟踪算法(一)–环境配…

【论文阅读笔记】Revisiting RCAN: Improved Training for Image Super-Resolution

论文地址:https://arxiv.org/abs/2201.11279 代码地址:https://github.com/zudi-lin/rcan-it 论文小结 本文的工作,就是重新审视之前的RCAN,然后做实验来规范化SR任务的训练流程。 此外,作者得出一个结论:…

单片机51 输入和输出

一、IO口基本概念介绍 单片机的IO口(Input/Output口)是连接单片机与外部电路或设备的接口。单片机的IO口可以分为输入口和输出口两种,用于控制和监测外部设备的状态。 1. 输入口:单片机的输入口用于接收外部电路或设备的信号。输…

❤ hexo主题+Gitee搭建个人博客

Hexo的基本使用 ​官网 官网地址:https://hexo.io/zh-cn/ Hexo是一个快速、简洁且高效的博客框架。Hexo 使用 Markdown(或其他渲染引擎)解析文章,在几秒内,即可利用靓丽的主题生成静态网页。即把用户的markdown文件…

【Qt】鼠标拖拽修改控件尺寸---八个方位修改

前提 在开发一个类似qdesiger的项目中 使用QGraphicsProxyWidget将Qt基础控件作为item放在场景视图中显示和编辑 创建自定义类继承QGraphicsProxyWidget,管理控件 成员变量 有控件的xywh等,其中x、y坐标存储是基于最底层widgetitem的 坐标系 x轴以右为正…

MySQL基础面试问题(一)

MySQL面试问题的标准回答: 什么是数据库范式?MySQL中常见的范式有哪些? 标准回答:数据库范式是一组规则,用于设计关系型数据库的结构,以减少数据冗余和提高数据的一致性。常见的数据库范式包括第一范式&…

前端快速网格布局

直接进去CSS Grid Generator 真的好方便: