压缩伪影的探讨

2023-11-09

1.压缩伪影的由来

常用的视频编码器中,在一个框架中使用了多种编码方法:
01.预测编码:
不编码预测值,而是编码预测值与实际值的差值
02.变换编码:
对信号的样本值进行某种形式的函数变换,从一种空间变换到另一种空间,然后再根据信号在另一个空间域的特征来对信号进行编码压缩
想要达到码率压缩的目的,可根据频谱因素分配比特数:图像中低频部分信息量大,高频部分信息量小,因此对低频部分给予更多的比特,对高频部分给予更少的比特。但是这一切需要在低熵(每个数据出现的概率差别大)的前提下,因此通过变换编码来使视频数据熵值降低(让信源从像素值变为频率值)
变换本身并不压缩数据,其使变换后的信号样值更独立和有序,真正其压缩作用的是量化
03.熵编码:
对于同一个信源,其总的信息量是不变的,通过熵编码后使其信源尽量等概分布,则每个输出符号携带的信息量增大(根据最大离散熵定理:给定离散无记忆信源输出n个不同的信息符号,离散信源的n个概率分量p1,p2,…pn,当且仅当各个符号出现概率相等时熵最大,平均到每个符号的信息量也最大),那么传送相同信息量所需要的序列长度就越短
变长编码基本定理:如果码字长度严格按照符号概率的大小的相反顺序排列,则平均码字长度一定小于按任何其他符号顺序排列方式得到的码字长度。

一般用“残差”Dn 来表示当前块和参考块之间的误差。将残差 Dn 进一步进行离散余弦变换 DCT后对变换系数进行量化可以进一步压缩数据量。其中该压缩过程是有损的,一般地随着量化参数QP的扩大,图像的损失将变大。解码过程需要进行一次反量化-反变换IDCT 还原残差,后再根据参考宏块还原原始图像。应用量化-反量化的过程将导致数据丢失和失真。 因此,原始数据和重构数据之间的差称作“量化噪声”。视频压缩过程中的量化噪声导致称作“伪影” 的特定视觉误差。在伪影当中有块状、环状以及飞蚊噪声,其中块状、环状是块中的竖线和横线, 飞蚊噪声看起来像图像强边缘周围的一团昆虫。

2.压缩伪影分类及原因

参考:https://zhuanlan.zhihu.com/p/141689819
https://blog.csdn.net/u014470361/article/details/94641124
https://arxiv.org/abs/1903.00473
压缩伪影整体上分为两类:
基于空域(temporal)往往图像处理中也会遇到。
基于时域 (Spatial)视频特有的
着重讨论块效应和振铃效应和呼吸效应
在这里插入图片描述

3.空域上的伪影

基于块的视频编码方案由于块的划分和量化而产生各种空间伪影

Basis Pattern (Spatial)基模式效应
基模式效应的名称来自于所有压缩算法特有的基函数(数学变换)。基模式造成的伪影看起来类似于振铃效应。然而,尽管振铃效应仅限于尖锐的边缘或线条,但基模式却不是。它通常发生在有纹理的区域,如树木、草地、海浪等。通常情况下,如果观众注意到一个基模式,它会对感知视频质量产生强烈的负面影响。
在这里插入图片描述

Blocking(Spatial)块效应

什么是块效应:块效应是在视频编码中人眼察觉到的小块边界处的不连续,只要是以块为单位进行的视频编码就会出现块效应,当以低码率传输时更为明显。

为什么会造成块效应:DCT变换不是将一整张图进行dct变换,而是切成16X16,8X8,4X4的块进行变换,不同的图像块进行了不同的处理,有时是量化步长不同,有时是舍去的高频分量不同,这将导致图像块之间的相关性被破坏。当量化时采用的步长越大,或者相邻块的量化步长之差不同时更为明显(低码率时往往量化步长比较大,块效应更明显)。

表现形式:
梯形噪声:dct的高频系数被量化为0,使得强边缘在跨界处出现锯齿状。
格形噪声:经常出现在平坦区域,由于量化取整的四舍五入,导致本来平缓变化的亮度块的DC系数发生跳跃,造成重建图像相邻块的亮度突变,这种称为格形噪声

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

Blurring(Spatial)模糊效应
模糊是空域高频图像细节损失的结果,通常在锐利的边缘。针对较高的压缩比,HEVC编码器离散量化变换后的残差。当视频信号被重建时,高频能量可能会严重丢失,从而导致视觉模糊。从感知上看,模糊通常表现为空间细节的丢失或图像中边缘或纹理区域的锐度
在这里插入图片描述
Color Bleeding (Spatial)出血效应
颜色出血,顾名思义,当图像中一种颜色的边缘无意中出血或重叠成另一种颜色时发生。假设源视频没有过饱和,这个伪影是由低色度亚采样造成的。

原图
原图
出血效应
在这里插入图片描述
可以看到,小女孩手中的绿色不明物的顶端颜色由黄色变成了绿色

色度信息被粗量化,从而导致颜色出血。这与压缩图像中存在的强色度变化导致的虚假的颜色边缘有关。这可能是跨亮度和彩色通道的图像渲染不一致的结果。在上图中,它在渲染结果中显示了色失真和额外的不一致的颜色扩散。

Ringing (Spatial)振铃效应
什么是振铃效应:振铃效应也被称为回声或鬼影,在尖锐的边缘附近以“光晕”、“环”的形式出现。比较明显的是红色圈圈的地方,这种现象是发生在一张图像内灰度变化剧烈的地方。
在这里插入图片描述

振铃效应的原因:由于在频域滤波使用理想的低通滤波器,图像的低频分量被完全保存,高频分量被完全移去,
在这里插入图片描述

众所周知,图像在频域与低通滤波器乘积相当于图像在时域与低通滤波器的时域对应形式sinc函数进行卷积,此时会有很多类似于sinc函数那样的周期震荡在空间域内,因此低通滤波器在模糊图像的同时,会将灰度剧烈变化的那些震荡铺满整个恢复的图像。

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

4.时域上的伪影

Flickering (Temporal)闪烁效应
原图
在这里插入图片描述
振铃效应
在这里插入图片描述

闪烁一般是指亮度或色度随时间的频繁变化(类似于蜡烛的火焰),通常分为细粒忽明忽暗和粗粒忽明忽暗。细粒闪烁通常出现在具有大运动或纹理细节的慢动作序列中,通常出现在高频率闪烁。它可以非常吸引眼球,让观众感到厌烦。粗粒度闪烁是指视频大面积亮度的突然变化。这种类型的闪烁最可能的原因是在压缩中不同图片组(GoP)使用了不同的亮度。
上图水面上频繁的亮度变化会产生闪烁的伪影。

Mosquito noise (Temporal)蚊式噪音效应
蚊式噪音,或“边缘忙碌”,得名于它的形状像一只蚊子在一个人的头和肩膀周围飞。它是闪烁的一种变体,其典型特征是围绕高频内容(前景实体和背景之间的尖锐过渡或硬边)出现的模糊和/或闪烁,蚊子噪声是高频失真,是时域编码效应的体现。它和蚊子一样随着图像上的物体一起移动。这可能是由于振铃效应导致的错误匹配导致预测误差和运动补偿造成的。

Floating (Temporal)漂浮效应
原图
在这里插入图片描述
漂浮效应
在这里插入图片描述

如上图出现了漂浮效应,从视觉上看,这些区域产生了一种强烈的错觉,就好像它们漂浮在叶子上。
漂浮是指某些区域的虚幻运动,而周围区域保持静止。从视觉上看,这些区域似乎漂浮在周围的背景之上。可能是由于视频编码中的跳过模式,它只是简单地将一个块从一帧复制到另一帧,而无需进一步更新图像细节。有两种类型的浮动:纹理浮动和边缘浮动。纹理浮动处理大面积的纹理,如水面或树木,而边缘浮动涉及大面积纹理区域的边界,如湖泊的海岸线。

Jerkiness (Temporal)抖动效应
抖动是由于帧采样而感知到的不均匀或摇摆的运动。它通常是由24帧电影转换成30或60帧视频格式造成的。这个过程被称为“3分2秒下拉”或“2分3秒下拉”,并不能完美复制原版电影,因为《24小时》并没有均匀地分成30或60份。由于物体在帧与帧之间的运动减少,在较高的帧速率下,对抖动的感知减弱。传统上,不稳定被认为是真正的压缩产物。

Staircase noise (Spatial)梯式噪音效应
梯式噪音是沿对角线或弯曲边阻塞的一种特殊情况。而不是渲染为平滑,它采取的外观楼梯台阶,因此得名。根据根本原因,楼梯可以被归类为压缩伪影(采样率不足)或标量伪影(空间分辨率太低)。

breath((Temporal))呼吸效应:
(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

对于压缩伪影的解决方法

传统方法:
参考:一种基于深度学习的视频压缩伪影自适应去除方法
S .Oguz等人提出可使用线性或非线性的各向同性滤波器,消除视频中的振铃伪影。为了减缓闪烁效应
——S .Oguz,Y .Hu,and T .Nguyen,“Image Coding Ringing Artifact Reduction
using Morphological Post-filtering,”Proc .IEEE Int .Work .Multimedia Signal
Proc .,pp .628–633,1998 .

X .Fan等人将量化误差作为影响因素,以获取最佳的帧内预测模式。
——X .Fan,W .Gao,Y .Lu,and D .Zhao,“Flicking Reduction in All Intra Frame
Coding,”Joint Video Team of ISO/IEC MPEG and ITU-T VCEG,JVT-E070,2002 .

HEVC/H .2 6 5 采用了以下两种内嵌式滤波器减少伪影:
第一,使用去块滤波器
(Deblocking Filter,DF),该滤波器主要是为了减少受损视频的块状效应。第二,使用样点
自适应补偿(Sample Adaptive Offset,SAO),该方式会根据样本的类型和应用区域来决定
偏移量,并将偏移量传递给解码器,这种方式能够有效的减轻振铃效应并提升画质。

这些传统的视频去压缩伪影方法存在以下几个问题:第一,需要手工去设计滤波器,这类滤波器通常只针对某一种伪影,通用性较差。第二,需要根据经验设定滤波器的阈值,阈值的设定通常会对滤波结果产生较大的影响,鲁棒性较弱。第三,使用内嵌式滤波器缓解视频的压缩伪影,增加了编码复杂度,影响了编码算法的实时性。

基于深度学习的方法:
又分为环内滤波和环外滤波
环内滤波:能够有效地提升视频的编码质量。但是,这种做法会严重影响编码的速度,实时性相对较差。
比如:
W .S .Park and M .Kim,“Cnn-based in-loop filtering for coding
efficiency improvement,”in Image,Video,and Multidimensional Signal Processing
Workshop(IVMSP),2016IEEE 12th .IEEE,2016,pp .1–5 .[0057]
Y .Dai,D .Liu,and F .Wu,“A convolutional neural network approach for
post-processing in hevc intra cod-ing,”in International Conference on
Multimedia Model-ing .Springer,2017,pp .28–39 .
环外滤波:不会影响原有的视频编解码框架,能够适用于不同的压缩算法,具有较好的通用性和实时性。
比如MFQE,MFQE2.0,STDF等等

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

压缩伪影的探讨 的相关文章

随机推荐

  • matlab 两个球面三维图合并于同一坐标系

    clc clear R1 3 球半径 n1 30 网格大小 n 2 2 n 1 theta1 n1 2 n1 n1 pi phi1 0 0 2 n1 n1 pi 2 cosphi1 cos phi1 cosphi1 1 0 cosphi1
  • [MySQL]并发执行事物的时候, 都发生了什么?

    文章目录 1 目标 2 MySQL中事物的四大基本特性 2 1 原子性 2 2 一致性 2 3 持久性 2 4 隔离性 3 并发执行事物出现的问题及解决方案 3 1 什么是并发行为 3 2 并发执行事物出现的问题 3 2 1 问题一 脏读问
  • 使用 Python 进行深度学习以进行裂纹检测

    使用 Python 进行深度学习以进行裂纹检测 问题陈述 数据集准备 训练模型 结论 参考 问题陈述 虽然新技术已经改变了我们生活的方方面面 在建筑领域似乎牛逼 正在努力追赶 目前 建筑物的结构状况仍然主要是人工检查 简单来说 即使现在需要
  • 计数dp

    给一个数n n lt 1000 问将这个n分解成n1 n2 n3 nk的解法有多少 k gt 1 且 n1 gt n2 gt n3 gt nk gt 1 由于答案可能过大 因此答案对1e9 7取模 1 背包问题解决 这里可看作 结果恰好为n
  • 著名人物的博客

    经济学界 Gary Becker Richard Posner 世界著名经济学家 Gary Becker为诺贝尔经济学奖得主 http becker posner blog com Gregory Mankiw 哈佛大学经济学教授 http
  • 基于C++的QT实现贪吃蛇小游戏

    文章目录 一 效果演示 二 实现思路 三 代码实现 widget h widget cpp main cpp 一 效果演示 效果图 代码下载 二 实现思路 通过按键控制蛇的移动 每吃一个商品蛇身就会加长 如果蛇身头尾相碰就结束游戏 声明渲染
  • TSI系统测量参数之:转速和零转速

    一 TSI系统测量参数 1 轴向位移 2 盖振或瓦振 3 偏心 4 键相 5 零转速 6 轴向振动 7 相对热膨胀 胀差 8 绝对热膨胀 缸胀 二 各参数作用 1 零转速与转速 1 零转速 主要用在汽机转速到零时投盘车的连锁以及对大机转速的
  • mac下的各种sed、grep、ag命令查看日志好用

    sed命令 删除文件的前100行 注意mac上要加个空字符串 sed i 1 100d 404 log 查看文件若干行 输出文件的5 8行 sed n 5 8p 1156 success txt 输出文件的5 8行至11 txt sed n
  • 动态DPC算法学习

    造成坏点的原因 感光元件芯片自身工艺技术瑕疵造成 光线采集存在缺陷 制造商产品差异 坏点分类 hot pixel 固定保持较高的像素值 一般呈现为画面高亮的点 dead pixel 固定保持较低的像素值 一般在画面中呈现为暗点 noise
  • 华为OD机试-磁盘容量排序

    题目描述 磁盘的容量单位常用的有M G T 他们之间的换算关系为 1T 1024G 1G 1024M 现在给定n块磁盘的容量 请对他们按从小到大的顺序进行稳定排序 例如给定5块盘的容量 5 1T 20M 3G 10G6T 3M12G9M 排
  • CSS基础学习——动画

    一 CSS3 2D变形 利用Transfrom方法 1 rotate angle 元素顺时针旋转给定的角度 允许负值 元素将逆时针旋转
  • Winner Winner【模拟、位运算】

    Winner Winner 题目链接 点击 题目描述 The FZU Code Carnival is a programming competetion hosted by the ACM ICPC Training Center of
  • python爬虫是干嘛的?python爬虫能做什么?

    Python爬虫是什么 Python爬虫是由Python程序开发的网络爬虫 webspider webrobot 是按照一定规则自动抓取万维网信息的程序或脚本 其实一般是通过程序在网页上获取你想要的数据 也就是自动抓取数据 爬虫又被称为网络
  • golang 详解协程——errgroup

    为什么要有sync errgroup go支持并发 一般采用的是 channel sync WaitGroup context 来实现各个协程之间的流程控制和消息传递 但是对于开启的成千上万的协程 如果在每个协程内都自行去打印 错误日志的话
  • 关于K-means的通俗理解

    机器学习通俗理解系列 关于knn的通俗理解 文章目录 前言 一 什么是K means 二 什么原理 三 重点 1 K值的选定 2 样本之间的距离 四 优缺点 五 优化进阶 总结 前言 刚学习机器学习的时候免不了百度 问什么是K means
  • vue3运行npm run serve报错ERROR Error: Cannot find module ‘babel-plugin-import‘ Require stack:

    1 完整报错 gt ims support demo 0 1 0 serve Users yizhikaixinya Desktop charmplus ims gt vue cli service serve ERROR Error Ca
  • 实验SparkSQL编程初级实践

    实验SparkSQL编程初级实践 实践环境 Oracle VM VirtualBox 6 1 12 Ubuntu 16 04 Hadoop3 1 3 JDK1 8 0 162 spark2 4 0 python3 5 Windows11系统
  • 领域建模

    忙碌的过着周末 一边思考如何建设自己知识体系 另外一遍白板的各种算法在脑袋互相争抢时间 低音炮单曲循环的的Ava Max Salt 心 静下来 环境燥起来 思绪继续飞行 前期读了一半的书 重新拿起 在建模方式上理解场景方法的研究 之前分享的
  • asp.net zero 8.2 学习-3-添加实体,并迁移到数据库

    系列目录 asp net zero 8 2 学习 1 安装 asp net zero 8 2 学习 2 创建一个页面 asp net zero 8 2 学习 3 添加实体 并迁移到数据库 asp net zero 8 2 学习 4 创建接口
  • 压缩伪影的探讨

    1 压缩伪影的由来 常用的视频编码器中 在一个框架中使用了多种编码方法 01 预测编码 不编码预测值 而是编码预测值与实际值的差值 02 变换编码 对信号的样本值进行某种形式的函数变换 从一种空间变换到另一种空间 然后再根据信号在另一个空间