编码压缩带来的几种效应和原因

article/2025/5/14 6:37:59

吉布斯效应

先来简要回顾一下吉布斯效应。

对于Gibbs现象,百度百科解释为:吉布斯现象(又叫吉布斯效应):将具有不连续点的周期函数(如矩形脉冲)进行傅立叶级数展开后,选取有限项进行合成。当选取的项数越多,在所合成的波形中出现的峰起越靠近原信号的不连续点。当选取的项数很大时,该峰起值趋于一个常数,大约等于总跳变值的9%。

下面是百度百科配的图。

个人感觉不够直观,所以引用了另一篇博文的图:

这个比较明显,也就是说,用纯粹的傅里叶变换(有限多个正弦和余弦)去逼近带有棱角的曲线,会在频率剧烈变化处产生吉布斯效应,也就是产生了一个凸起。

 

对于二维的情况,振铃效应在百度百科上引用的图如下:

比较明显的是红色圈圈的地方,这种现象是发生在一张图像内灰度变化剧烈的地方,在使用大的量化步长后,图像的低频分量被完全保存,高频分量被完全移去,经过反变换后,会有很多类似于sinc函数那样的周期震荡在空间域内,因此会低通滤波器在模糊图像的同时,会将灰度剧烈变化的那些震荡铺满整个恢复的图像。
 

通过自己做的一个图像,演示一下振铃现象和块效应:

先将图像分为4*4的小块,在各个子图像的边沿,认为是像素跳变,类似于然后每块子图像过滤掉95%的高频分量,恢复后发现,红色区域,脸部有明显的震荡细纹,这些震荡细纹来自右侧的横向灰度剧烈变化的头发。而黄色的圆圈,在子图像的边缘,由于两个子图像的频谱不相同,因此滤波后恢复出的子图像边沿无法保持一致,因此出现块效应。


块效应:

(1)概念:

主要是由视频图像采用基于块的编码方式和量化造成相邻块之间存在明显差异的现象,在视频编码中人眼察觉到的小块边界处的不连续。

(2)产生原因:

1、编码过程中对残差进行DCT变换是基于块的,使得块与块之间的相关性被忽略了;

2、对DCT系数进行量化,不同的图像块做了不同的处理。

(3)解决方案:

在视频编码中,为了解决或减小块效应,很多视频编码标准(H264,H265,SVAC)中采用了去块滤波Deblock的方案。

振铃效应:

(1)概念:

图像处理中,对一幅图像进行滤波处理,若选用的频域滤波器具有陡峭的变化,则会使滤波图像产生“振铃”,所谓“振铃”,就是指输出图像的灰度剧烈变化处产生的震荡,就好像钟被敲击后产生的空气震荡。

(2)产生原因:

主要是由于DCT变换后对高频分量进行滤波操作导致。产生振铃效应的原因就在于,理想低通滤波器在频率域下的分布十分线性(在D0处呈现出一条垂直的线,在其他频率处呈现出一条水平的线),那么不难想象出对应的h(x,y)将会有类似于sinc函数那样周期震荡的空间分布特性。正是由于理想低通滤波器的空间域表示有类似于sinc函数的形状,位于正中央的突起使得理想低通滤波器有模糊图像的功能,而外层的其他突起则导致理想低通滤波器会产生振铃效应。

(3)解决方案:

在视频编码中,为了解决或减小振铃效应,H265和SVAC2中采用了SAO样点滤波偏移的方案。

呼吸效应:

(1)概念:

视频编码中的呼吸效应是指由于I帧的插入造成图像质量忽然变好,切换到P帧后又忽然变差。

一般情况下,我们都会将I帧调的比较大,一个GOP内,离I帧越远的P帧,编码误差越大,图像降质也越严重,当下一个I帧出现时,图像又立即变得清楚起来,纵观整个视频流,就会周期性出现清楚到模糊的突变,我们称这种现象为呼吸效应。

呼吸效应在静止的场景下比较容易观察出来,运动场景中,大部分的图像内容都在变化,不容易发现。

(2)分析:

呼吸效应在静止的场景下比较容易观察出来,运动场景中,大部分的图像内容都在变化,不容易发现。尤其在低码率的视频监控场景下,呼吸效应比较明显。

产生的主要原因:I帧和P帧的编码模式和编码质量的不同,导致视觉上图像不连续。

(3)解决方案:

一般情况下,CBR(固定码率)码控方式比CQP(固定QP)的呼吸效应更加严重。因此将码控模式修改为CQP方式在一定程度上可以减弱呼吸效应。
H264/5可以调节I帧P帧直接qp的偏差,控制I帧和P帧的大小比例关系,I帧的qp越小,I帧越大,图像越清楚,在一定程度上提升了整体图像质量,呼吸效应在一定程度上可以得到缓解;但是I帧也不能调的过大,在CBR模式下,I帧把全部带宽都吃掉了,P帧就只能编的更模糊一些,反而加重了呼吸效应;在实际调节过程中,就是通过调整intraQpDelta/intraQpOffset这类的参数来调节I帧大小;在ISP中,如果有3DSR功能,针对静止场景,可以有效改善呼吸效应。该解决方案参考:https://blog.csdn.net/szfhy/article/details/79882903
HISI提出了前滤波编码的方案,基于HISI编码器的硬件实现,对I帧的编码数据进行滤波操作然后再编码,可以改善呼吸效应,对应MPI接口为HI_MPI_VENC_GetDeBreathEffect和HI_MPI_VENC_SetDeBreathEffect。


http://chatgpt.dhexx.cn/article/C8ZA924b.shtml

相关文章

21.失真/低高通/振铃效应/旁瓣泄漏效应/频域滤波/图像深度/频带/线性滤波源码分析 -- OpenCV从零开始到图像(人脸 + 物体)识别系列

本文作者:小嗷 微信公众号:aoxiaoji 吹比QQ群:736854977 简书链接:https://www.jianshu.com/u/45da1fbce7d0 本文你会找到以下问题的答案: 失真/低高通/振铃效应和旁瓣泄漏效应/图片深度/频带/图像细节/线性滤波源码分析 失…

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

三 其他BC 1.Repeated BC Xu Zhou等人在《A boundary condition based deconvolution framework for image deblurring》提及,由于原文写的公式比较复杂不好理解,所以就不赘述了,其实核心就是外部边界区域内的某个像素点的灰度等于距离其最近…

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

SAO(Sample Adaptive Offset,自适应样点补偿)原理分析 这里写目录标题 SAO(Sample Adaptive Offset,自适应样点补偿)原理分析1. H265压缩原理2. SAO的作用3. SAO原理简介4. SAO的分类--BO5. SAO的分类--EO6…

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

一 介绍 传统的图像复原方法可能会给复原图像引入振铃效应,并且以边界振铃为主;产生这种现象的原因简单地来讲主要是由于模糊核的 不精确或者信息丢失。 [图片来自论文《光学合成孔径系统成像性能优化与分析》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)时间分辨率频谱分辨率我们到底想要什么东西 信号…