【视频编码\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编码区域的应用防止产生色度纹理过丰富的伪影。

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计算机组成原理(11)----指令流水线

目录 一.指令流水的定义 二.流水线的表示方式 1.指令执行过程图 2.时空图 三.流水线的性能指标 1.吞吐率 2.加速比 3.效率 四.指令流水线影响因素分类 (1)结构相关(资源冲突) (2)数据相关&#…

阿里巴巴中国站获得淘口令真实url API(1688.item_password)

阿里巴巴(1688.com)是一个B2B电商平台,而淘口令(或称为淘宝口令)是一种在阿里巴巴集团旗下的淘宝和天猫平台中分享商品或活动链接的特殊形式。淘口令通常包含一串字符,用户可以复制这串字符并在淘宝或天猫的…

Vue3项目结构分析

node_modules: 是项目npm install下载的node依赖库。 public: favicon.ico: 网页图标logo图片。index.html: 入口html。是一个基础的html页面,其中进行网页最基础的设置,并且设置了id为app的div盒子。该页面即为Vue单页面应用的基础页面。后…

Kafka:kafka的技术架构? ①

一、Kafka的优势 Apache Kafka是一个开放源代码的分布式事件流平台,成千上万的公司使用它来实现高性 能数据管道,流分析,数据集成和关键任务等相关的应用程序。 二、技术架构 0)partition分区可以设置备份数,也可以设…

Ps:原色通道直方图(RGB)

在 RGB 颜色模式下,Photoshop 的“通道”面板中有红、绿、蓝三个原色通道。 默认情况下,原色通道以灰度图像的形式呈现,分别记录着各原色色光发光的程度。 比如,在 8 位/通道时,某个像素的 RGB 值为 (43,12…

vscode与vue环境配置

一、下载并安装VScode 安装VScode 官网下载 二、配置node.js环境 安装node.js 官网下载 会自动配置环境变量和安装npm包(npm的作用就是对Node.js依赖的包进行管理),此时可以执行 node -v 和 npm -v 分别查看node和npm的版本号: 配置系统变量 因为在执…

总结一下最近几个主界面

目前展示了用Avalonia做几个主要流行的主界面,演示了一下组件的使用。用不同的实现方式实现一些方法。 1、独立大屏展示,类似一个实时监控,这是一种目前很方便的大屏效果。 主要涉及的内内容: (1)窗标题实…

Samba文件夹有的能访问,有的不能解决办法(samba无法访问、samba文件夹打不开)需要把selinux设置为Permissive宽容模式

文章目录 如果有的目录能访问有的不能访问大概率是selinux设置了Enforcing强制模式需要把selinux设置为Permissive宽容模式或者Disabled禁用参考文章 如果有的目录能访问 有的不能访问 大概率是selinux设置了Enforcing强制模式 需要把selinux设置为Permissive宽容模式或者Di…

Project_Euler-03 题解

Project_Euler-03 题解 题目 思路 首先排除掉暴力求解,虽然也可以得出答案,但是我在我仅仅只有二颗核心的服务器上跑了很久很久… 尝试另一种方法: 首先要知道一个知识,所有的数都可以拆解成为素数因子平方连乘的形式&#xff…

kubernetes负载均衡部署

目录 1.新master节点的搭建 对master02进行初始化配置(192.168.88.31) 将master01的配置移植到master02 修改master02配置文件 2.负载均衡的部署 两台负载均衡器配置nginx 部署keepalived服务 所有node节点操作 总结 实验准备: k8s…

《Python 语音转换简易速速上手小册》第2章 Python 编程基础(2024 最新版)

文章目录 2.1 Python 语言基础2.1.1 基础知识深入基础总结2.1.2 主要案例:数据分析脚本案例介绍案例 Demo案例分析2.1.3 扩展案例 1:自动化邮件发送案例介绍案例 Demo案例分析2.1.4 扩展案例 2:网页数据抓取

基于ssm的校园帮系统设计与实现(源码+调试)

项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。今天给大家介绍一篇基于ssm的校园帮系统设计…

10:部署Dashboard|部署Prometheus|HPA集群

部署Dashboard|部署Prometheus|HPA集群 Dashboard部署Dashboard上传镜像到私有仓库安装服务发布服务创建管理用户查看登录的Token信息 Prometheus步骤一:导入所有后续需要的镜像到私有镜像仓库(在master主机操作操作)步…

Vue 2.0 中的 Vuex Store 状态管理器核心概念和组成部分

Vue 2.0 中的 Vuex Store 状态管理器核心概念和组成部分 State(状态): Vuex Store 的核心就是集中式存储应用的所有组件的状态。它是一个单一状态树,所有的组件都从这个状态树中读取数据并可以响应状态的变化。 const state {c…

Java设计模式 | 简介

设计模式的重要性: 软件工程中,设计模式(design pattern)是对软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案。 这个术语由埃里希 伽玛(Erich Gamma)等人在1…

2024,中国零售行业数字化走到哪了?

对于如今的中国零售业数字化而言,仍有许多亟待解决的问题,其像一根根“鱼刺”,卡在零售企业增长的“喉咙”中。 作者|斗斗 编辑|皮爷 出品|产业家 熙熙攘攘的人群,琳琅满目年货,一张张喜庆的春联、福字、窗花……

爬虫基本库的使用(requests库的详细解析)

注:本文一共4万多字,希望读者能耐心读完!!! 前面,我们了解了urllib库的基本用法(爬虫基本库的使用(urllib库的详细解析)-CSDN博客)。其中,确实又不方便的地方。例如处理网页验证…

【初中生讲机器学习】11. 回归算法中常用的模型评价指标有哪些?here!

创建时间:2024-02-19 最后编辑时间:2024-02-23 作者:Geeker_LStar 你好呀~这里是 Geeker_LStar 的人工智能学习专栏,很高兴遇见你~ 我是 Geeker_LStar,一名初三学生,热爱计算机和数学,我们一起加…

【LeetCode每日一题】 单调栈的案例 42. 接雨水

这道题是困难,但是可以使用单调栈,非常简洁通俗。 关于单调栈可以参考单调栈总结以及Leetcode案例解读与复盘 42. 接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 …

TensorFlow2.x 精选笔记(1)数据基本操作与线性代数

学习参考: 动手学深度学习2.0Deep-Learning-with-TensorFlow-bookpytorchlightning 一、数组与张量 虽然张量看起来是复杂的对象,但它们可以理解为向量和矩阵的集合。理解向量和矩阵对于理解张量至关重要。 向量是元素的一维列表,向量是一…