振铃效应与样点自适应补偿(Sample Adaptive Offset,SAO)技术

article/2025/4/21 11:00:38

SAO(Sample Adaptive Offset,自适应样点补偿)原理分析

这里写目录标题

  • SAO(Sample Adaptive Offset,自适应样点补偿)原理分析
  • 1. H265压缩原理
  • 2. SAO的作用
  • 3. SAO原理简介
  • 4. SAO的分类--BO
  • 5. SAO的分类--EO
  • 6. Not APPlied和merge模式
  • 7. 最终补偿模式的选择
  • 8. 总结
  • 9. 参考资料

🐋 🐬 🐶 🐳 🐰 🦀

1. H265压缩原理

🐋 SAO是H265视频压缩协议中用于补偿重建图像的一种技术。而H265压缩可以简单理解为对图像的一些特征的提取,解码端可以根据这些特征信息来恢复图像。

🐋 假设原始图像为x,压缩后的图像为y。 令 y = f ( x ) y = f(x) y=f(x),但是 x ! = f − 1 ( y ) x != f^{-1}(y) x!=f1(y), 比如 y = f ( x ) = x > 0 ? 1 : 0 y = f(x) = x>0 ? 1 : 0 y=f(x)=x>0?1:0; 我们无法根据压缩后的图像y,来完整的还原原始图像x,两张图像总是有些误差的,而SAO就是为了在一定程度上弥补这个误差。

2. SAO的作用

🐬 Sao简单来说就是对图像里的像素点进行分类,选取某类的像素点进行补偿(加一个offset)。怎么分类,和对哪一类像素点进行补偿,offset的值怎么确定,就是SAO了
🐬 上一节提到过, x ! = f − 1 ( y ) x != f^{-1}(y) x!=f1(y),SAO就是对重建图像 f − 1 ( y ) f^{-1}(y) f1(y)进行补偿,使其更接近原始图像x;也就是说,SAO的作用就是在一定程度上弥补两个图像的误差

3. SAO原理简介

上节提到过,sao主要就三个问题。

  • 🐶1. 怎么分类;
  • 🐶2. 需要对哪一类像素点进行补偿(不需要每个像素点都补偿,既浪费资源,意义也不大,人眼也捕捉不到这细微的差别);
  • 🐶3. 需要补偿的那几个分类的像素点的offset怎么确定。

SAO有两种方式进行分类,一种是EO模式(Edge offset),一种是BO(Band offset)模式

4. SAO的分类–BO

BO模式比较好理解,就是根据像素点数值来进行分类;比如像素点的取值范围为0-255(8bit);

  • 🐳 将值在[0 - 7]的像素点记为 B O 0 BO_0 BO0分类,[8 - 15] 的像素点记为 B O 1 BO_1 BO1分类;依次类推,可以得到32个分类 B O 0 BO_0 BO0, B O 1 BO_1 BO1, … B O 3 1 BO_31 BO31;
  • 🐳统计每个分类的像素点个数N0, N1,… N31, 以及每个分类像素点,和原始图像对应的误差之和E0, E1, E2.。。E31;
  • 🐳之后可以确定每个分类的补偿值的取值范围,比如B0分类的取值范围为【0, E0/N0】;
  • 🐳采用这个offset进行补偿时,原始图像x和重建图像y的差异,我们用 δ d \delta_d δd表示,计算公式为: δ d = N ∗ o f f s e t 2 − 2 o f f s e t ∗ E \delta_d=N*offset^{2}-2offset*E δd=Noffset22offsetE
  • 🐳采用这种编码方式所需要的存储资源(牵扯到cabac熵编码)记为R; SAO选取代价函数 δ j \delta_j δj来衡量 δ d \delta_d δd和R这两个指标, δ j = δ d + λ R \delta_j=\delta_d+\lambda R δj=δd+λR, 其中lambda取值越大,SAO越倾向于压缩后的数据R更小, lambda取值越小,SAO更倾向于使图像失真更小;
  • 🐳则对 B O 0 BO_0 BO0分类,计算取值范围内的每一个值对应的代价函数,得到代价函数最小的offse,依次类推;我们能得到32个分类的offset;
  • 🐳一般H265处理时,将图像划分成多个ctb块,一个ctb最大64*64个像素点;而一般情况下,一个ctb的像素点取值大多在连续4个的BO分类里,比如 B O 0 BO_0 BO0 ~ B O 3 BO~3 BO 3; 因此我们只需要对32个分类里的某个连续4个的分类进行补偿即可;
  • 🐳如果对 B O 0 BO_0 BO0~ B O 3 BO_3 BO3进行补偿,代价函数为 δ j 0 \delta_{j0} δj0+ δ j 1 \delta_{j1} δj1+ δ j 2 \delta_{j2} δj2+ δ j 3 \delta_{j3} δj3
  • 🐳依次类推,可以得到29组代价函数;我们选取最小的一组代价函数,就完成BO补偿;

例如我们最终选择BO2 - BO5代价函数最小,SAO输出的值是
Mode : 1; (BO模式)
Band_position: 2; (起始位置为2)
Offset:【0, 2, 2, 5】

最终恢复图像时,

  • 我们将图像像素点大小在【16,23】之间的,全部加0,
  • 【24,31】之间的全部加2,
  • 【32,39】之间的全部加2,
  • 【40,47】之间的全部加5;

5. SAO的分类–EO

EO分类的分类依据是,由于sao模块输入的图像存在振铃效应,这是由H265中其他模块(deblock)导致的,如图所示:
请添加图片描述

因此sao中提出了四种角度分类方式,记为EO0, EO1, EO2,EO3,
请添加图片描述

根据四种分类方式,对图像的各个像素点进行分类;
请添加图片描述

  • 🦀如果使用EO0方式进行分类,需要补偿的点为EO0_0, EO0_1, EO0_2, EO0_3;
  • 🦀这四种方式的offset值的选取与上节的BO一样,其代价函数之和记为ΔJ_eo0;
  • 🦀同理,使用EO1,EO2, EO3方式进行分类,分别可得另外3种分类补偿方式的代价函数ΔJeo0,….
  • 🦀选取最小的代价函数的补偿方式;

例如我们最终选择delta_j_2_23 代价函数最小,SAO输出的值就是
Mode : 2;
EO_class: 2;
Offset:【0, 2, 2, 5】

最终恢复图像时,我们将图像像素点以EO2的角度进行划分,及每个像素点c分别和左上角a,右下角b的相邻像素点进行比较分类;

  • 🦀大小关系为上图的种类1的,全部加0;
  • 🦀大小关系为上图的种类2的,全部加2,
  • 🦀大小关系为上图的种类3的,全部加2,
  • 🦀大小关系为上图的种类5的,全部加5,

6. Not APPlied和merge模式

Not applied就是不做补偿的意思;不做补偿的offset就是0,那么ΔD也是0,但是 mode信息还是需要编码的,因此代价函数 δ J = λ R \delta_J =\lambda R δJ=λR,,此外sao还提供了merge模式,即,直接使用上方或者左边块的sao补偿方式。

7. 最终补偿模式的选择

H265在压缩图片时,将一帧视频的图片分割成许多64*64或者其他大小的碎片(CTU),而SAO是以CTU为单位的进行分类的。SAO大概可分为以下5种类型:

  • 🐰 Not Applied : 表示该CTU不需要进行补偿;
  • 🐰 Merge Up : 表示该CTU和他上面那块的CTU采用同样的补偿方式;
  • 🐰 Merge Left : 表示该CTU和他左面那块的CTU采用同样的补偿方式;
  • 🐰 Edge Offset (EO): 根据每个像素点和他附近像素点的关系,将其分为5类,其中4类需要补偿,为每类设置一个合适的offset。
  • 🐰 Band offset(BO): 根据每个像素点的大小进行分类,分为32个区间,为每个区间选择一个合适的offset。

EO,BO, Not applied , merge_up, merge——left,这五种方式,SAO会选择代价函数 δ j \delta_j δj最小的方式进行补偿。

8. 总结

SAO是根据H265中,重建图像和原始图像差异的特性,来尽可能的弥补这个差距,使得重建图像更接近原始图像。
对各个需要补偿的点(与原始图像有偏差)进行分类,为每个分类设置一个合适的偏移值(offset),这样解码端就能根据编码端传输过来的几个offset值和分类方式来恢复图像了。

9. 参考资料

【1】CSDN博客: H.265/HEVC编码原理及其处理流程的分析
【2】.新一代高效视频编码H.265/HEVC:原理、标准与实现,作者:万帅、杨付正;


http://chatgpt.dhexx.cn/article/6yd16F6b.shtml

相关文章

几种常用的假设图像边界条件用于抑制振铃效应及实现(上)

一 介绍 传统的图像复原方法可能会给复原图像引入振铃效应,并且以边界振铃为主;产生这种现象的原因简单地来讲主要是由于模糊核的 不精确或者信息丢失。 [图片来自论文《光学合成孔径系统成像性能优化与分析》P79 魏小峰] Renting liu、Jiaya J…

rpm包的卸载

两个步骤: 1、查询 即查询Linux中安装的完整包名 命令【rpm -qa | grep xxx】 例如:rpm -qa | grep unzip 2、卸载 命令:rpm -e RPM包的完整名称 例如:rpm -e unzip-6.0-19.el7.x86_64 卸载之后检查发现已经不存在 - - -…

linux卸载命令6,小编为你叙述linux卸载命令【操作流程】

大家应该都知道我们在使用电脑的时候,会发现linux卸载命令【操作流程】的问题,如今还有很多用户不知道如何处理linux卸载命令【操作流程】的情况,于是我就给大家整理总结了linux卸载命令【操作流程】的具体处理方案,就是按照1&…

Linux常见命令 25 - RPM包安装、升级、卸载、查询、校验、提取

目录 1. 包名与包全名 2. RPM安装 3. RPM包升级 4. RPM包卸载 5. 查询是否安装RPM包 6. RPM包校验 7. RPM包中文件提取 1. 包名与包全名 包全名:操作的包是没有安装的软件包时,使用包全名,而且要注意路径包名:操作已经安…

linuxrpm命令卸载python_Linux RPM包安装、卸载、升级命令讲解

一个 RPM 包包含了已压缩的软件文件集以及该软件的内容信息,通常表现为以 .rpm 扩展名结尾的文件,例如 samba.rpm 。如果需要对RPM包进行操作则需要使用rpm命令。 一、RPM包的来源 所有RPM包都在系统光盘的Packages目录中,那么我们如何获取包…

rpm卸载包的命令

可以先用rpm -q xxx 或者 rpm -qf xxx/bin/xxxx.xx 来查询一下所属的rpm包的名字。然后用rpm -e xxxxxx 来删之。xxx/bin/xxxx.xx 是一个包中任意的文件xxxxxx 是查询得到的rpm包的名称 rpm -e的时候后面的文件名不用加版本号 安全地卸载 RPM卸载软件包,并不是简单地将原来安…

linux的rpm卸载,linux rpm卸载参数

linux rpm卸载参数 本站整理 发布时间:2009-03-10 15:38:48 作者:jb51.net 我要评论 rpm卸载参数--test : 卸载测试 --nodeps : 不检查依赖 --noscripts : 不执行脚本程序 --notriggers : 不执行触发程序 --justdb : 仅修改数据库 --force 强制 RPM卸载软件包,并不是…

rpm卸载命令

可以先用rpm -q xxx 或者 rpm -qf xxx/bin/xxxx.xx 来查询一下所属的rpm包的名字。 然后用rpm -e xxxxxx 来删之。 xxx/bin/xxxx.xx 是一个包中任意的文件 xxxxxx 是查询得到的rpm包的名称 rpm -e的时候后面的文件名不用加版本号 安全地卸载 RPM卸载软件包,并不是简单…

关于传递函数的双边线性Z变换+差分方程

下午查了一下午资料,翻看了一些书籍,看了一些视频学习!!!抛开这些,进入整体。 双边线性Z变换: 将S域虚轴和实轴改为Z域单位圆,由连续变为离散。 线性公式:(如…

基于深度学习的视频预测研究综述

原址:http://html.rhhz.net/tis/html/201707032.htm (收集材料ing,为论文做准备)[综述性文章,,,可以做背景资料] 莫凌飞, 蒋红亮, 李煊鹏 摘要:近年来,深度学习算法在众多有监…

【数字信号处理】傅里叶变换性质 ( 傅里叶变换频移性质示例 | PCM 音频信号处理 | 使用 matlab 进行频移操作 )

文章目录 一、PCM 音频信号处理二、要点说明 一、PCM 音频信号处理 给定一段 PCM 音频数据 , 封装到 .WAV 文件 中 , 此时的信号 是 实信号 , 每个 PCM 音频采样都是一个 实数值 , 绘制该 音频数据 实信号 的 " 幅频特性 " , 将该 PCM 音频的 频率 移动 6 k H z 6…

Three.js视频教程

Threejs引擎 Threejs是WebGL多款3D引擎之一,threejs相比较babylonjs、cesiumjs等引擎在国内使用的更广泛,中文资料更多,相关招聘更多。所以对于WebGL工程师来说,学习threejs是很有必要的。 视频教程发布地址 案例欣赏 下面一些…

AV1视频编解码器核心编码工具概述

一、介绍 在过去的十年里,基于网络的视频应用变得非常普遍,现代设备和网络基础设施推动了高分辨率、高质量内容消费的快速增长。因此,占主导地位的带宽消费者,如视频点播(VoD)、实时流媒体和会话视频&…

Android平台上基于OpenGl渲染yuv视频

本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 更多音视频开发文章,请看:音视频开发专栏 介绍一个自己刚出炉的音视频播放录制开源项目 前言 这是我音视频专栏的第一篇实例解析,也算是入门篇,重…

视频编码基本原理

原博客地址:https://blog.csdn.net/leixiaohua1020/article/details/28114081 视频编码基本原理 1.视频编码基本原理 (1) 视频信号的冗余信息 以记录数字视频的YUV分量格式为例,YUV分别代表亮度与两个色差信号。例如对于现有的…

从零开始傅里叶变换

1.前言 傅里叶变换是很多领域的基础工具&#xff0c;常用来做频域变换。但凭什么傅里叶变换可以转换至频域&#xff0c;又什么是频域。看门见山。 连续傅里叶变换公式: F ( w ) < f ( t ) , e i w t > ∫ − ∞ ∞ f ( t ) e − i w t d t (1.1) F(w) <f(t),…

小波变换(一)

小波变换(一) 由于项目可能会用到的原因,学一下,感觉已有的通俗易懂教程不够相应的学术性. 教程:《数字信号处理》陈后金著 视频教程:中国大学mooc-数字信号处理 文章目录 小波变换(一)傅里叶变换的局限性短时傅里叶变换(STFT)时间分辨率频谱分辨率我们到底想要什么东西 信号…

360视频:旋转球面投影RSP

旋转球面投影&#xff08;Rotated sphere projection&#xff0c;RSP&#xff09;将球体分为两个相同的部分&#xff0c;然后投影到平面上&#xff0c;宽高比3&#xff1a;2。 图1 RSP投影 球面上两部分的分割线类似于图2中网球上的分割线。 图2 网球分割示意图 Frame Packin…

视频防抖技术的实现

1. 介绍 视频防抖是指用于减少摄像机运动对最终视频的影响的一系列方法。摄像机的运动可以是平移&#xff08;比如沿着x、y、z方向上的运动&#xff09;或旋转&#xff08;偏航、俯仰、翻滚&#xff09;。 对视频防抖的需求在许多领域都有。 这在消费者和专业摄像中是极其重…

音视频基础:视频的编码

本文主要参考《图像通信技术与应用》作者陈柘 陈川 记录了数字图像的模型、图像变换的数学原理、图像编码的基本思想、H.26x等视频标准、以及视频的传输模型等概念&#xff0c;只介绍思想&#xff0c;无数学推导&#xff0c;无代码实践&#xff0c;属于音视频入门知识 视频的编…