详述HEVC编码过程中的不可逆信息损失

前言

在学习HEVC压缩编码过程时,总是对困惑与其中的一些冗杂又相似的信息损失,到底是什么导致了HEVC压缩的不可逆损失,它们的作用分别又是什么,接下来我将在本文中进行详细的描述。
在这里插入图片描述

舍入误差

是什么

在HEVC(High Efficiency Video Coding)编码过程中,舍入误差指的是在编码算法中进行整数运算时产生的小数部分被舍去或四舍五入到最近的整数所导致的误差。这种误差是由于编码过程中使用了整数近似代替原本可能需要浮点运算的步骤。由于整数运算比浮点运算在硬件上实现起来更简单、更高效,因此在视频压缩标准中被广泛采用。

哪个编码过程产生及其原因

在HEVC编码的不同阶段都可能产生舍入误差,尤其是在以下几个关键步骤:

整数变换(Integer Transform):HEVC使用整数变换来将像素值从时域转换到频域。这个变换过程通常涉及一系列乘法和加法操作,如果这些操作的结果不是整数,则需要进行舍入。

量化(Quantization):量化过程中,变换后的系数被缩放以减少它们的精度,以便于压缩。量化步骤通常会导致系数的精细信息丢失,并且在量化系数时通常需要舍入到最近的整数。

逆量化和逆变换(Inverse Quantization and Inverse Transform):这里我也一直在疑惑,为什么HEVC的逆向解码过程中也会造成舍入误差呢,从直觉上来说,量化后的值已经是整数,那量化步长是精心选择的,逆量化计算后应该确保乘法结果是整数才对。
其实不然,这里的舍入和截断误差其实是由于IDCT中的比例伸缩运算导致的:
在这里插入图片描述
这里反DCT的比例伸缩解释如下:
在视频编解码标准中,如HEVC(High Efficiency Video Coding)或其前身H.264/AVC,反离散余弦变换(Inverse Discrete Cosine Transform, IDCT)是重要的一步,它把编码过程中变换后的系数转换回空间域的像素值。由于变换通常在整数精度下进行,以便于硬件实现,因此在反变换(如反DCT)过程中会涉及到比例伸缩(scaling)和位移(shifting)操作,以确保变换是可逆的并保持数值精度。
在反DCT中的比例伸缩运算通常涉及到两个关键的变量:shiftscale

  1. shift
  • shift 通常用来进行位移操作,也就是说,通过右移(>>)操作来除以 2^shift。这个操作通常用于调整计算的精度,保持数值在合理的范围内,防止溢出,并在整数运算后逼近浮点运算的结果。
  • 在某些情况下,shift 也可以用来左移(<<),相当于乘以 2^shift,用于放大系数以进行后续的运算。
  1. scale
  • scale 是一个乘法因子,用于在反变换过程中调整系数的大小。由于DCT变换是线性的,逆变换需要保持这种线性关系,scale 因子确保在量化和反量化过程中保持正确的比例。
  • 在实际实现中,scale 可能是一个预先计算好的常数,用于与变换后的系数相乘,以便在反DCT后得到正确的幅度级别。
    这两个变量shiftscale的使用是为了确保反DCT操作是在整数域内完成的,同时尽量减少由于变换和量化步骤引入的误差。它们通常是根据变换的大小和系数的位深度预先定义好的,以确保反变换的准确性和高效性。
    因此,逆量化和逆变换也会导致舍入误差。

截断误差

是什么

在重压缩检测相关文献中,对于截断误差的定义往往是浮点型的逆离散余弦变换(IDCT)系数值超出[0, 255]范围时,与其截断后的整数值之间的差异。而在大多数情况下,对于编码过程的截断误差定义为由于数字表示的有限精度和算术运算中的近似造成的误差。这种误差发生在编码过程中的多个环节,尤其是在进行整数运算时,由于必须将结果适应到固定的位数表示,超出这个范围的信息会被截断,从而导致误差。我们按照前者的定义来进行介绍。

哪个编码过程产生及其原因

逆量化(Inverse Quantization):
按照定义,也就是哪些过程包含了类似IDCT的阶段操作,即:
在逆量化步骤中,量化系数被放大回原来的大小。如果逆量化的结果是浮点数,那么理论上这些系数可以超过表示像素值的典型范围[0, 255],因此会做截断操作。
逆变换(Inverse Transformation):

逆变换步骤将频域的系数转换回空间域(即像素值)。如果这些系数是浮点数,那么转换的结果同样可能超出[0, 255]的范围,因此会做截断操作。

截断和舍入之间的区别

截断误差和舍入误差是数字信号处理和数字计算中常见的两种误差,它们源于将连续值或高精度值转换为有限精度表示时的不精确性。以下是它们之间的异同点:

相同点:

  1. 来源:两者都是由于数值表示的限制而产生。在数字系统中,由于存储和处理的限制,不能表示无限精度的数值,因此当进行数值操作时必须对数字进行近似。

  2. 结果:无论是截断还是舍入,最终结果都是一个与原始值有所偏差的近似值。

不同点:

  1. 方法

    • 舍入误差:发生在四舍五入操作中,即当一个数值被舍入到最接近的指定精度的数值时产生的误差。例如,对于数字5.6,如果舍入到最近的整数,则结果为6,舍入误差为0.4。
    • 截断误差:发生在截断操作中,即直接丢弃数值的小数部分,只保留整数部分。例如,对于数字5.6,如果截断小数位,则结果为5,截断误差为0.6。
  2. 方向

    • 舍入误差:舍入可以是向上或向下,取决于被舍入的数值与最近整数的相对位置。
    • 截断误差:截断通常是单向的,对于正数总是向下舍弃小数部分,对于负数则向上舍弃小数部分。
  3. 大小

    • 舍入误差:舍入误差的最大值通常是舍入单位的一半。例如,如果舍入到最近的整数,则最大舍入误差为0.5。
    • 截断误差:截断误差的最大值通常是舍入单位的整数,例如,如果截断到整数,则最大截断误差为1(不包括)。

环路滤波误差

环路滤波(Loop Filtering)是HEVC中用于改善压缩视频质量的关键技术之一,它主要包括去块效应滤波(Deblocking Filter)和样本自适应偏移(Sample Adaptive Offset,SAO)。

在压缩视频时,由于量化和其他编码过程,会在图像中引入不同的误差。这些误差常常表现为块状效应(blockiness)和环带效应(ringing)。环路滤波就是为了减少这些编码引入的视觉伪影。

去块效应滤波(Deblocking Filter)
去块效应滤波是用来平滑图像块之间的边界,以减少块状伪影。在编码过程中,由于每个宏块或编码树单元(CTU)是独立编码的,所以在块边界处可能会出现明显的不连续性。去块滤波通过在块边界处应用一定的滤波算法来减少这种不连续性,从而改善视频质量。

样本自适应偏移(SAO)
SAO是HEVC中的另一种环路滤波技术,它旨在减少整个图像中的伪影,而不仅仅是块边界。SAO通过对像素值进行细微调整来减少伪影,这些调整是基于像素值的统计特性自适应进行的。

环路滤波误差
环路滤波误差指的是在去块效应滤波和SAO处理过程中可能引入的误差。这些误差通常是由于滤波算法的不完美,可能会导致细节的丢失或过度平滑。例如,过度的去块效应滤波可能会模糊图像中的细节,而SAO可能会导致局部区域亮度的不自然变化。

环路滤波是一种权衡的结果,设计者需要在去除编码伪影和保留图像细节之间找到平衡点。在HEVC标准中,环路滤波的参数可以根据编码的要求进行调整,以适应不同的视频内容和压缩需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值