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

news2024/10/6 2:29:44

本文为新一代通用视频编码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.coloradmin.cn/o/1466863.html

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

相关文章

C语言-数组指针与指针数组

一、简介 对于使用C语言开发的人来说,指针,大家都是非常熟悉的。数组,大家也同样熟悉。但是这两个组合到一起的话,很多人就开始蒙圈了。这篇文章,就详细的介绍一下这两个概念。 指针数组和数组指针,听起来非…

Stable Diffusion 模型分享:Realisian(现实、亚洲人)

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八 下载地址 模型介绍 Realisian 是由多个模型合并而来,是一个现实模型,可以绘制美丽的亚…

HarmonyOS学习--三方库

文章目录 一、三方库获取二、常用的三方库1. UI库:2. 网络库:3. 动画库: 三、使用开源三方库1. 安装与卸载2. 使用 四、问题解决1. zsh: command not found: ohpm 一、三方库获取 在Gitee网站中获取 搜索OpenHarmony-TPC仓库,在t…

uniapp_微信小程序自定义顶部导航栏和右侧胶囊对齐(不对齐来打我)

一、想要的效果 思路首先开启自定义导航栏&#xff0c;取消自带的导航栏&#xff0c;然后计算胶囊的高度和标题对齐 二、成品代码 1、首先再你需要居中的代码添加以下style <view class"header":style"{paddingTop:navBarTop px,height:navBarHeight px,…

Excel 面试题及答案(2)

一、VLOOKUP+IF案例: A1 :根据左侧数据源,按姓名匹配《职级》,仅限用函数,不能做任何辅助A2 :根据左侧数据源,按姓名匹配《部门》,仅限用函数,不能做任何辅助A3 :根据右侧考核规则,匹配《绩效比例》,用函数完成(可适当做辅助的单元格区域) =VLOOKUP(F8,IF({1,0},…

【笔记】【开发方案】APN 配置参数 bitmask 数据转换(Android KaiOS)

一、参数说明 &#xff08;一&#xff09;APN配置结构对比 平台AndroidKaiOS文件类型xmljson结构每个<apn>标签是一条APN&#xff0c;包含完成的信息层级数组结构&#xff0c;使用JSON格式的数据。最外层是mcc&#xff0c;其次mnc&#xff0c;最后APN用数组形式配置&am…

VirtualBox+Vagrant快速搭建Centos7

目录 安装VirtualBox&#xff1a; 安装Vagrant&#xff1a; 创建Vagrant项目目录&#xff1a; 初始化Vagrant配置文件&#xff1a; 本地Vagrantfile中的镜像名称&#xff1a; 启动虚拟机&#xff1a; SSH登录虚拟机&#xff1a; 备注&#xff1a;安装镜像的另一种方式是…

【MATLAB】 EWT信号分解+FFT傅里叶频谱变换组合算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~ 展示出图效果 1 EWT分解算法 EWT分解算法是一种基于小波变换的信号分解算法&#xff0c;它可以将信号分解为一系列具有不同频率特性的小波分量。该算法的基本思想是将信号分解为多个不同尺度的小波分量&#xff0c;并对…

展锐S8000安卓核心板参数_紫光展锐5G核心板模块定制方案

展锐S8000核心板模块是基于八核S8000平台开发设计的&#xff0c;采用了先进的6nm EUV制程技术。搭载了全新的智能Android 13操作系统&#xff0c;展现出超强的画面解析能力和高性能双通道MIPI&#xff0c;拥有120Hz高刷新率&#xff0c;独立NPU和3.2TOPS Al算力&#xff0c;同时…

2024年数学建模美赛详细总结以及经验分享

前言&#xff1a; 本文记录与二零二四年二月六日&#xff0c;正好今天是数学建模结束&#xff0c;打算写篇文章记录一下整个过程&#xff0c;以及一些感受、还有经验分享。记录这个过程的原因就是我在赛前&#xff0c;在博客上找了很久&#xff0c;也没有像我这么类似记…

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

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

零基础备考PMP,需要多长时间?

PMP是一门专业性很强的项目管理知识&#xff0c;考试当然是有一定的难度&#xff0c;但是也没有难到让你怀疑人生的程度。 如果你在学习PMP之前&#xff0c;已经有一些经验&#xff0c;那么备考一个半月基本上是没多大问题的&#xff0c;如果你是零基础小白&#xff0c;那么备…

2024全国水科技大会暨流域水环境治理与水生态修复论坛(六)

论坛召集人 冯慧娟 中国环境科学研究院流域中心研究员 刘 春 河北科技大学环境与工程学院院长、教授 一、会议背景 为深入贯彻“山水林田湖是一个生命共同体”的重要指示精神&#xff0c;大力实施生态优先绿色发展战略&#xff0c;积极践行人、水、自然和谐共生理念&…

基于RK3399 Android11适配OV13850 MIPI摄像头

目录 1、原理图分析2、编写和配置设备树3、调试方法4、遇到的问题与解决5、补丁 1、原理图分析 从上图可看出&#xff0c;我们需要关心的&#xff0c;①MIPI数据和时钟接口使用的是MIPI_TX1/RX1 ②I2C使用的是I2C4总线 ③RST复位引脚使用的是GPIO2_D2 ④PWDN使用的是GPIO1_C7 ⑤…

洛谷 【算法1-6】二分查找与二分答案

【算法1-6】二分查找与二分答案 - 题单 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 鄙人不才&#xff0c;刷洛谷&#xff0c;迎蓝桥&#xff0c;【算法1-6】二分查找与二分答案 已刷&#xff0c;现将 AC 代码献上&#xff0c;望有助于各位 P2249 【深基13.例1】查找 - 洛谷…

MySQL数据库基础(十三):关系型数据库三范式介绍

文章目录 关系型数据库三范式介绍 一、什么是三范式 二、数据冗余 三、范式的划分 四、一范式 五、二范式 六、三范式 七、总结 关系型数据库三范式介绍 一、什么是三范式 设计关系数据库时&#xff0c;遵从不同的规范要求&#xff0c;设计出合理的关系型数据库&…

Clickhouse系列之连接工具连接、数据类型和数据库

基本操作 一、使用连接工具连接二、数据类型1、数字类型IntFloatDecimal 2、字符串类型StringFixedStringUUID 3、时间类型DateTimeDateTime64Date 4、复合类型ArrayEnum 5、特殊类型Nullable 三、数据库 一、使用连接工具连接 上一篇介绍了clickhouse的命令行登录&#xff0c…

数字滚动实现

介绍 vue-countup-v3 插件是一个基于 Vue3 的数字动画插件&#xff0c;用于在网站或应用程序中创建带有数字动画效果的计数器。通过该插件&#xff0c;我们可以轻松地实现数字的递增或递减动画&#xff0c;并自定义其样式和动画效果。该插件可以用于许多场景&#xff0c;例如展…

ELK介绍以及搭建

基础环境 hostnamectl set-hostname els01 hostnamectl set-hostname els02 hostnamectl set-hostname els03 hostnamectl set-hostname kbased -i s/SELINUXenforcing/SELINUXdisabled/ /etc/selinux/config systemctl stop firewalld & systemctl disable firewalld# 安…

pytest结合Allure生成测试报告

文章目录 1.Allure配置安装2.使用基本命令报告美化1.**前置条件**2.**用例步骤****3.标题和描述****4.用例优先级**3.进阶用法allure+parametrize参数化parametrize+idsparametrize+@allure.title()4.动态化参数5.环境信息**方式一****方式二**6.用例失败截图1.Allure配置安装 …