• 视频压缩编码的基本原理


    文章转自:http://www.cnblogs.com/CoderTian/p/8159481.html

    1.预测编码

    1.1.预测编码基本概念

    预测法是最简单和实用的视频压缩编码方法,这时压缩编码后传输的并不是像素本身的取样幅值,而是该取样的预测值和实际值之差。
    大量统计表明,同一副图像的临近像素之间有着相关性,或者说这些像素值相似。而且同帧图像中邻近行之间对应位置的像素之间也有较强的相关性。人们可以利用这些性质进行视频压缩编码。

    如图,同一帧内的临近像素中与 X 之间的距离近的像素,如 A 和 B 与 X 的相关性强,愈远相关性愈弱,如 C、 D、E、 F 等像素。以 P 作为预测值,按与 X 的距离不同给以不同的权值,把这些像素的加权和作为 X的预测值,与实际值相减,得到差值 q。由于临近像素之间相关性强, q 值非常小,达到压缩编码的目的。接收端把差值 q 与预测值(事先已定义好,比当前 X 早到达接收端像素,如A)相加,恢复原始值 X。归纳如下:

    编码端: X-A=q
    解码端: q+A=X

    按以上原理可得预测编码框图,这种预测编码也称为差分脉冲编码(DPCM)。

    其中, x(n)为当前像素的实际值, p(n)为其预测值, d(n)为差值或残差值。该差值经量化后得到残差量化值 q(n)。预测值 p(n)经预测器得到,预测器输入为已存储在预测器内前面的各像素和当前像素实际值,它们的加权和即为下一个预测器输出。
    解码输出 x’(n)与原始信号 x(n)之间有个因量化而产生的量化误差。

    1.2.帧内预测编码

    预测模型可以是一维的,也可以是二维或多维的;可以是线性的,也可是非线性的。下面先讨论一维线性预测方法
    1.一维最佳预测
    一维预测编码器的原理框图如下所示

    信号间相关性越大,预测误差方差越小于信号方差,压缩效率也就越高

    2.二维最佳预测
    二维预测编码器框图如下所示

    3.预测编码的量化器
    下图是图像差值信号的概率分布
    一般说图像中平坦区域比突变区域多得多,例如人脸中,只有眼睛、鼻子、嘴等少量地方细节出现,其余则为平坦或缓变区域。
    人眼视觉特性实验表明,在亮度突变部分或变化大的部分,量化误差大些不会使人眼敏感,可采取粗量化,量化节距可取大一些,这时虽然需多些比特数,但面积小总比特数不大;反之,在亮度变化缓慢区域,则应取细量化,但由于平坦区域 e(x,y)小,也不会增加很多比特数。总之,利用人眼这种掩盖效应采用非线性(不均匀)量化,可使总码率有所下降。
    由于量化,预测编码会产生过载、颗粒噪声、伪轮廓以及边沿忙乱等,它们都是由于量化值过小或不够小及像素变化过快等跟不上变化造成的
    4.二维预测编解码器框图
    编码器

    解码器

    1.3.帧间预测编码

    一般而言,帧间预测编码编码效率比帧内更高。
    1.单向预测
    运动矢量的概念

    单向预测帧间编码框图

    利用上一帧的图像经运动矢量位移作为预测值的方法称为单向预测或单向时间预测

    如何减小帧差和更精确预测当前像素是提高帧间压缩编码效率的关键之处
    上述原理以像素为单位进行预测,除了传送帧差外,还增加了每个像素的运动矢量,编码效率显著下降。实际上,两帧之差的物体运动一般是刚体的平移运动,位移量不大,因此往往把一帧图像分成若干 M×N 块,以块为单位分配运动矢量,大大降低总码率。
    2.双向预测
    有时,不只是利用前一帧像素预测,还需利用后一帧像素,即预测值为:
    前向参考帧预测当前帧称为前向运动补偿,利用后向参考帧预测当前帧称为后向运动补偿,利用前后向同时预测的就称为双向预测运动补偿。
    双向预测在实时通信中是不能应用的,例如会议电视、可视电话等,因为后向预测在当前帧之后进行,会引入编码时延。它可用在广播电视系统中,如采用 MPEG 标准的编码系统, 特别针对一些暴露区域,即 t-1 帧尚未暴露而 t+1 帧已呈现出来的区域。
    单项和双向预测举例
    双向预测编码可解决“暴露”问题, 即某物体在前一帧未显示出来,但在后一帧却“暴露”出来,双向预测能更准确地找出运动矢量,并只有在视频存储、 VOD 等非实时通信及数字广播电视中应用。 会议电视、可视电话等实时通信中不宜应用 B 图像,因为实时通信后一帧处在当前帧之后,当前帧编码时它尚未出现。
    3.运动估计
    在帧间预测编码中,由于活动图像邻近帧中的景物存在着一定的相关性。因此,可将活动图像分成若干块或宏块,并设法搜索出每个块或宏块在邻近帧图像中的位置,并得出两者之间的空间位置的相对偏移量,得到的相对偏移量就是通常所指的运动矢量,得到运动矢量的过程被称为运动估计。
    运动矢量和经过运动匹配后得到的预测误差共同发送到解码端,在解码端按照运动矢量指明的位置,从已经解码的邻近参考帧图像中找到相应的块或宏块,和预测误差相加后就得到了块或宏块在当前帧中的位置
    前向和后向运动估计
     

    H.264 编码标准和以往采用的视频压缩标准很大的不同在于,在运动估计过程中采用了多参考帧预测来提高预测精度,多参考帧预测就是在编解码端建一个存储 M 个重建帧的缓存,当前的待编码块可以在缓存内的所有重建帧中寻找最优的匹配块进行运动补偿,以便更好地去除时间域的冗余度

    2.变换编码

    2.1.变换编码的简单理解

     比如在一个坐标系中有A、B、C三个点,如果我们将坐标轴调整一下,A、B、C三个点的坐标值将会减小,达到压缩的目的

    2.2.变换编码的概念

    绝大多数图像都有一个共同的特征:平坦区域和内容缓慢变化区域占据一幅图像的大部分,而细节区域和内容突变区域则占小部分。也可以说,图像中直流和低频区占大部分,高频区占小部分。这样,空间域的图像变换到频域或所谓的变换域,会产生相关性很小的一些变换系数,并可对其进行压缩编码,即所谓的变换编码 。
    变换中有一类叫做正交变换,可用于图像编码。自 1968 年利用快速傅立叶变换(FFT)进行图像编码以来,出现了多种正交变换编码方法,如 K-L 变换、离散余弦变换(DCT) 等等。其中,编码编码性能以 K-L 变换最理想,但缺乏快速算法,且不同图像需计算不同的变换矩阵,因而只用来参考比较。 DCT 编码性能略次于 K-L 变换,且具有快速算法,广泛应用于图像编码。
    DCT变换可以将L*L的图像块从空间域变换为频率域
    一个实际8*8图像块
    图像块经过DCT变换后的系数
    信号经过DCT变换后需要进行量化。由于人的眼睛对图像的低频特性比如物体的总体亮度之类的信息很敏感,而对图像中的高频细节信息不敏感,因此在传送过程中可以少传或不传送高频信息,只传送低频部分。量化过程通过对低频区的系数进行细量化,高频区的系数进行粗量化,去除了人眼不敏感的高频信息,从而降低信息传送量。
    合理选择量化系数,对变换后的图像块进行量化后的结果如图所示
    DCT系数经过量化之后大部分经变为0,而只有很少一部分系数为非零值,此时只需将这些非0值进行压缩编码即可
    PS:是不是很像-_-!!!

    3.变换编码与预测编码的比较

    变换编码实现比较复杂,预测编码的实现相对容易,但预测编码的误差会扩散。现实中,往往采用混合编码方法,即对图像先进行带有运动补偿的帧间预测编码,再对预测后残差信号进行 DCT变换。这种混合编码方法已成为许多视频压缩编码国际标准的基本框架。
    纸上得来终觉浅,绝知此事要躬行。
  • 相关阅读:
    查询数据库表的列字段、字段类型、字段长度、是否为空
    AndroidManifest.xml配置文件详解(转载)
    SQL Server Profiler(转载)
    sql 临时表
    sql 全局查询
    react.js
    middleware
    el
    jade模板使用心得
    jade template
  • 原文地址:https://www.cnblogs.com/legendsun/p/9039616.html
Copyright © 2020-2023  润新知