关于图像/视频编码技术的发展

本文内容整理自《小波编码与网络视频传输》(沈兰荪 卓力编著)第三章。

传统的压缩编码技术

传统的压缩编码技术包括熵编码、变换编码、预测编码、矢量量化以及运动补偿等。

熵编码是基于信号统计特性的无损编码技术,用于压缩编码冗余(或称信息熵冗余),其基本原理是用短码字表示出现概率较大的符号,用长码字表示出现概率较小的符号,从而使最终的平均码字很小。
常用的熵编码方法有游程编码、霍夫曼编码和算术编码等三种。例如,H.264里的CAVLC(基于上下文自适应的变长编码)就是基于游程编码提出的改进方法。H.264里的CABAC(基于上下文自适应的算术二进制编码)也是算术编码的改进方法。霍夫曼编码是一种不等长的最佳编码方法,理论上其平均码长可以任意接近于信源的熵,但它必须预先知道信源的概率分布,在实际应用中难以实现,通常用对大量数据进行统计后得到的近似分布来代替。研究数据表明,在未知信源概率分布的大多数情况下,算术编码要优于霍夫曼编码。

变换编码是基于信号变换的可以消除图像数据空间相关性的编码技术,用于压缩空间冗余,它将空间域相关的像素点通过正交变换映射到变换域中,降低变换后的系数之间的相关性。变换域应满足的条件是:所有的系数互相独立;能力集中于少数几个系数上;能量集中于较小的区域内。
压缩原理:变换编码将信号映射到变换域中,减少了相关性,编码bit数会减少。此外,由于人眼对高频信号不敏感,还可以通过基于人眼特性的量化表进一步压缩信息。
变换编码采用的变换方式均为正交变换。正交变换能把图像与视频中的能量集中在低频部分,可用低频部分来近似代替原信号,恢复后的信号误差不明显。最佳的正交变换是K-L (Karhunen-Loeve)变换。它是用数据本身的相关矩阵对角化后构成的,可产生完全不相关的变换系数。K-L变换的变换矩阵是由图像数据本身求得的,变换矩阵和反变换矩阵都不唯一,实现难度大,通常用作评价其他线性变换的比较基准。目前性能仅次于K-L变换且已得到广泛应用的正交变换是DCT变换(离散余弦变换)。先前已有两篇文章做了详细介绍,此处不再赘述。

预测编码可分为帧内预测和帧间预测,用于压缩空间和时间冗余。它用相邻的已知像素(或图像块)来预测当前像素(或图像块)的取值,然后再对预测误差进行量化和编码。
对于帧内预测,相邻像素或图像块可以是同行扫描或前几行的,相应的预测编码被称为一维和二维预测。帧内预测编码一般采用像素预测形式的DPCM(差分脉冲调制),其算法简单,易于硬件实现,但是它对信道噪声及误码很敏感,容易产生误码扩散。使用时一般结合其他编码方法,例如变换编码DCT。
对于帧间预测,相邻像素或图像块可以是前几帧的。它主要利用视频序列相邻帧间的相关性,即压缩时间冗余,压缩比相对帧内预测要高得多。帧间预测编码一般针对图像块的预测编码,采用的技术有帧重复法、阈值法、运动补偿法和自适应交替帧内/帧间编码法等。目前得到广泛应用的是运动补偿预测编码,它的主要缺点是预测性能不均,在快运动区的预测效率很差,为了降低运算复杂度和提高预测精度进行分块处理会导致分块边缘的不连续。

矢量量化利用相邻图像数据之间的高度相关性,将输入的图像数据序列分组,以矢量为单位进行量化,从而压缩图像。其关键技术是最佳矢量量化码本的设计和快速的搜索算法。矢量量化编码一般用在低比特率的场合,分为随机型矢量量化和格型矢量量化。随机型矢量量化广泛用于语音和图像压缩编码中(例如语音编码技术CELP里的固定码本),包括变换域适量量化、有限状态矢量量化、增益波形矢量量化、地址矢量量化、预测矢量量化和分类矢量量化等。格型矢量量化的码本小,编码复杂度低,具有快速算法,失真小,码本具有较好的鲁棒性,但压缩比不如随机型矢量量化。
关于矢量量化的内容可以参考博客:https://blog.csdn.net/lishuiwang/article/details/78483547

新型图像/视频编码技术

第二代图像编码包括分形编码、模型编码和小波编码。传统编码方法以信息论和数字信号处理技术为理论基础,其压缩图像数据的能力已接近极限。新型编码方法希望通过充分利用人眼视觉系统的生理和心理特性以及信源的各种性质来获得高压缩比。
按处理方法的不同,新型编码方法可分为基于分裂合并的方法和基于各向异性滤波器的方法。前者提取图像的纹理和边缘轮廓信息,各自采用不同的方法编码;后者对图像进行方向性滤波,得到不同方向的图像信息,再根据人眼的方向敏感性对各通道采用特定的方法单独编码。值得注意的是,这些方法都需要对人眼视觉特性的足够了解。

分形编码根据图像的自相似性对信号进行压缩,其关键在于寻找图像的IFS码,即迭代运算算子W(W运算包括比例、旋转、镜像和移位)。分形编码可用于消除图像的几何冗余度,和人眼视觉特性的关联不大,适合编码静止图像。分形编码压缩的是结构冗余。

基于模型的编码在编、解码两端分别建立相同的模型,通过传递模型参数调整模型。例如编解码端均构建相同的头肩模型,通过传递的参数让头肩模型实现眨眼、扭头等动作。已经提出的模型包括图像模型和视觉模型,前者解决目标图像如何被模型化才有效的问题,是模型法主要研究的问题;后者意图在编码过程中引入人眼视觉特性以便得到更好的图像质量。模型法的固有缺陷使其应用场合受限,走向实用还有一段时间(此书写于2005年,随着科技的进步和运算能力的不断提高,模型法可能已经进入实用阶段了)。基于模型的编码压缩的是知识冗余。

小波变换的本质是多分辨率或多尺度地分析信号,非常适合人眼视觉系统对频率感知的对数特性。利用小波变换对图像进行压缩的原理与子带编码方法十分相似,都是将原图像信号分解成不同的频率区域(在对原图像进行多次分解时,总的数据量与原数据量一样,不增不减),后续的压缩编码方法根据人眼视觉特性及原图像的统计特性,对不同的频率区域采取不同的压缩编码手段,从而使数据量减小。值得一提的是,小波变换是不同领域科学家的共同贡献,数学家、地质学家、物理学家即信号处理专家都对小波变换的建立作出了贡献。
关于小波变换的内容可参考:https://www.zhihu.com/question/22864189

总之,可将图像/视频编码方法分为两代:第一代是基于像素的方法,去掉的是数据冗余,这是底层压缩编码方法;第二代是基于内容的方法,去掉的是内容冗余,其中基于对象的方法称为中层压缩编码方法,基于语义的方法称为高层压缩编码方法。
个人觉得,这种升级换代可类比于编程语言的发展,一开始是穿孔纸带和机器语言,后来出现了C语言,在C语言的基础上又衍生出更多人性化的高级语言,譬如Python。编程开发的难度逐步降低,不再需要费劲儿理解硬件是如何具体地实现算法了。基于语义的编码类似于高级语言,其底层仍然是处理像素,但是开发者不需要再去理解具体是如何实现的。

猜你喜欢

转载自blog.csdn.net/allen_sdz/article/details/86624273