当前位置: 首页 > news >正文

HEVC环路后处理核心介绍

介绍

为什么需要环路后处理技术

hevc采用基于快的混合编码框架,方块效应、振铃效应、颜色偏差、图像模糊等失真效应依旧存在,为了降低此类失真影响,需要进行环路滤波技术;

采用的技术

去方块滤波DF,为了降低块效应;

像素自适应补偿SAO,为了改善振铃效应;

经过滤波的重构像素为后续像素的参考使用,更有利于参考,进一步减少预测残差,提升主观质量;
在这里插入图片描述

去方块滤波

造成块效应的原因

各个块的变换量化编码过程相互独立,量化误差导致相邻块的边界不连续;

运动补偿预测中,相邻块的预测值可能来自不同图像的不同位置,导致预测残差信号在块的边界产生数值不连续;

时域预测技术使得参考图像中存在的边界不连续也会传递给后续编码图像;

hevc中去方块滤波技术优势技术点

亮度和色度均对8x8的块边界进行处理,且对色度仅当边界两侧至少有一个块采用帧内预测模式时,该边界才需要滤波,降低滤波次数;

每行像素边界两边最多修正3个像素值,使得8x8的块边界空间独立,可并行;

可以先处理垂直边界,再水平边界,而非h264的水平垂直穿插进行,使CTB解码顺序更加灵活;

关掉去方块滤波技术,同样质量带来1.83%~4.19%的比特率增加;

hevc去方块滤波技术

针对所有PU和TU中的8x8的块边界处理;

两个环节:滤波决策、滤波操作
■ 滤波决策得到边界的滤波强度及滤波参数;
● 三个步骤:获取边界强度、滤波开关决策、滤波强弱选择;
● 获取边界强度是根据边界块的编码参数初步判定边界是否需要滤波以及滤波参数;BS(Boundary Strength) = 0、1、2;
● 滤波开关决策进一步对视频内容进行分析,根据边界两侧块内像素的变化以及量化参数;人眼的空间掩盖效应,图像的平坦区域的不连续块边界更容易被观察到;
● 滤波强弱选择根据视频内容 (块边界及块内部像素值的变化)及编码参数 (量化参数)进一步判断边界是否需要滤波以及选择合适的滤波强度,因为边界的不连续也可能是视频自身内容所致。
■ 滤波操作根据滤波强度和参数对像素进行修正;

有自适应能力,针对不同视频内容以及不同编码参数具有自适应能力;

虽然以8x8的边界,实际是分成两部分独立进行处理,垂直边界以8x4为基本单位,水平边界以4x8为基本单位;

当BS=2时,色度分量需要进行滤波操作;

● 实现方法
○ 因滤波顺序可以有多种形式:以CTB为基本单位,按raster扫描(光栅扫描)处理、以整幅图划分成不重叠的8x8的块、以CU为基本单位,按Z扫描;
○ 整体遵循整幅图像先水平滤波、再垂直滤波,仅对8x8的块边界处理的原则;
○ Z扫描:(不同于zigzag扫描):对于任何一个边长为偶数的正方形来说,都先扫描左上角,再是右上角,然后是左下角,最后是右下角,如下图的数字增大顺序所示:
■ 在HEVC中CU采用的是递归划分的方式,Z字形扫描顺序保证了对于不同分割都能按照相同的遍历顺序进行寻址,有利于程序中的递归实现。
在这里插入图片描述在这里插入图片描述
○ zigzag扫描:
在这里插入图片描述
○ raster扫描:即从左到右,从上到下
在这里插入图片描述

SAO

h265采用基于块的DCT变换,并在频域对变换系数量化,因此对于图像的强边缘,由于高频交流系数的量化失真,解码后会在边缘周围产生波纹现象,就叫做振铃效应;根本原因就是高频信息的丢失;
在这里插入图片描述
样点自适应补偿技术SAO从像素域入手降低振铃效应,对重构曲线中出现的波峰像素添加负值进行补偿,波谷添加正直进行补偿;

SAO以CTB为基本单位,选择合适的分类起讲重建像素划分类别,对不同类别像素使用不同的补偿值;

包括两大类补偿形式:边界补偿EO、边带补偿BO,还有参数融合技术;

边界补偿

比较当前像素值域相邻像素值的大小对当前像素进行归类,对同类像素补偿相同数值;

4种模式:水平、垂直、135度、45度,在任意一种模式下,将重构像素归为5个不同种类,不属于前4种的都归为第5种,90%的补偿值,其符号与种类相匹配;
在这里插入图片描述

边带补偿

根据像素强度值进行归类,将像素范围等分32条边带;

在一定的像素区域内,像素值的波动范围很小,h265规定一个CTB只能选择4条连续的边带;

SAO参数融合

本CTB的SAO参数直接使用相邻块的SAO参数,只需要标识采用哪个相邻块的SAO参数即可;

想使用参数融合,一个CTU的亮度、色度分量必须同时使用左相邻块的补偿参数,或者同时使用自身上相邻块的补偿参数,否则采用非参数融合;

http://www.lryc.cn/news/91340.html

相关文章:

  • 从组件化角度聊聊设计工程化
  • apache的配置和应用
  • Buf 教程 - 使用 Protobuf 生成 Golang 代码和 Typescript 类型定义
  • Java 锁 面试题(ReentrantLock、synchronized)
  • Python中的缩进是什么意思?
  • 2023年9月数学建模:最小二乘优化、曲线拟合与函数逼近
  • java8内部调用无法引用值的问题
  • 《嵌入式系统》知识总结10:使用位带操作操纵GPIO
  • leetcode 2.两数相加(链表操作)
  • Jenkins是什么?以及Jenkins有哪些具体的应用呢?
  • 2023年数学建模:参数估计与假设检验:自助法(Bootstrap)详解
  • 华为OD机试真题 Java 实现【字符串通配符】【2022Q4 200分】
  • Android 11.0 user模式下解除系统进入recovery功能的限制
  • TDEngine3.0 环境安装、配置及使用经验总结
  • Redis7实战加面试题-高阶篇(Redlock算法和底层源码分析)
  • 保持Git历史提交整洁,解决冲突
  • CompletableFuture使用详解,多线程相关
  • (3)NUC980 kenerl编译
  • 华为OD机试真题 Java 实现【分奖金】【2022Q4 100分】
  • 迅为国产化RK3588开发板在安防前后端应用解决方案
  • Windows 安装 GCC
  • 下载安装LabVIEW
  • 从C语言到C++_14(vector的常用函数+相关选择题和OJ题)
  • Java NIO-非阻塞I/O(二)
  • PaaS平台iuap——数智底座支撑企业的全球化业务拓展
  • RK3318 android12 HEVC-1080P 4K VP9等格式视频播放不了
  • gpt技术简介以及具体应用领域
  • 【java】leetcode 二叉树展开为链表
  • windows环境, nginx https配置
  • git 命令