视频编码概念
无损压缩:解压视频数据与延时视频数据完全一致。
有损压缩:解压视频数据与原始视频数据不完全一致。有损压缩虽然不能完全恢复视频数据,但是能极大的提高压缩率。
时域模型
消除连续帧之间的时域冗余。
基于块的运动补偿和估计
1. 运动估计 (Motion Estimation)
- 搜索匹配块:在参考帧(即已经编码并传输完成的,位于当前帧之前或之后的图像帧)中搜索 尺寸的匹配块。
- 比较过程:将当前的 块,与参考帧搜索区域(通常是以当前块位置为中心的区域)中的部分或全部 块进行比较。
- 匹配准则:为了找出“最佳匹配块”,通常采用的准则是计算当前块与比较块相减后的残差块能量。使残差块能量降到最低的比较块,即为最佳匹配块。
2. 运动补偿 (Motion Compensation)
- 计算残差:将上一步找到的最佳匹配块作为当前块的“预测块”。
- 生成残差块:用当前块减去预测块,即可得到相对应的 残差块。
3. 编码与传输
- 传输残差:对上一步得到的残差块进行编码并传输。
- 传输运动矢量:同时,预测块与当前块之间的相对位置差(即运动矢量,Motion Vector)也会被一起传输给解码器,以便解码端能够准确还原图像。
基于宏块的运动补偿和估计
宏块16x16像素区域是运动预测的基本运算单位
当 前 帧 减 去 参 考 帧 后 所 得 到 的 残 差 图 像 能 量 ( 对 所 有 像 素 点 的 差 值 的 绝 对 值 取 和 , ⼜ 称 S A E ) S A E 越 低 就 说 明 运 动 补 偿 的 效 果 越 好
视频编码(视频压缩)本质是消除数据冗余,减少数据量。
原始视频数据 ---> 编码器 encoder ---> 传输或保存 ---> 解码器 decoder ---> 解压缩视频数据
编码器和解码器统称为CODEC。
视频压缩冗余角度:
- (1)时间冗余 (Temporal Redundancy):
- 定义: 在一段连续的视频中,相邻几帧的场景往往是相同或基本相同的(例如静止的背景)。
- 原理: 帧与帧之间存在大量重复数据,编码时只需记录“变化的部分”(运动矢量和残差),无需重复记录相同的背景。
- (2)空间冗余 (Spatial Redundancy):
- 定义: 在单张图像中,相邻的像素通常颜色相近或完全相同(例如一大片蓝天或白墙)。
- 原理: 可以用更少的数据来表达这些成片的相同像素(如“连续100个蓝色像素”),而不是逐个记录。
- (3)结构冗余 (Structural Redundancy):
- 定义: 从宏观上看,图像中存在重复出现的纹理或规则的几何结构(例如砖墙、棋盘格、重复的矩形图案)。
- 原理: 编码器可以提取这种结构的规律,通过一定的数学模型或预设图案来生成,从而减少数据量。
- (4)视觉冗余 (Vision/Perceptual Redundancy):
- 定义: 人类的视觉系统(眼睛和大脑)存在生理局限性:对亮度极度敏感,但对色彩细节不敏感;对平缓区域的噪声敏感,但对剧烈变化边缘的噪声不敏感。
- 原理: 传统的录制设备会100%记录所有数据,但压缩算法可以大胆丢弃那些“人眼根本看不出差别”的细节数据(例如色度抽样),这被称为视觉冗余。
- (5)知识冗余 (Knowledge Redundancy):
- 定义: 图像中包含某些人类社会普遍共识的“先验知识”。例如:人的脸部结构必然是眼睛在上方、鼻子在中间、嘴巴在下方。
- 原理: 既然结构固定,就可以利用现成的“人脸模型库”来替代逐个像素的记录,只需传输特征参数即可恢复图像。
- (6)数据/编码冗余 (Data/Coding Redundancy):
- 定义: 当上述冗余都被去除后,留下的纯粹的数字符号本身在编码方式上依然存在优化空间。
- 原理: 出现频率高的数据用较短的编码表示,出现频率低的数据用较长的编码表示(如哈夫曼编码),从而进一步压缩总体文件大小。
预测编码
帧内预测编码
帧间预测编码
光流矢量
视频帧之间的变化可能来自于物体的运动,如行驶的汽车。
可以估计每个像素在相邻帧之间的轨迹,从而建立像素轨迹场,称为光流。
计算量大,数据量大,运动补偿算法不采用。
基于块的运动估计和补偿
运动估计
宏块的运动估计过程,是在参考帧中寻找与当前宏块最匹配的 16×16 像素区域。参考帧来自视频序列中已经编码的图像帧,在播放顺序上可以位于当前帧之前,也可以位于当前帧之后。
搜索区域通常以当前宏块的位置为中心。在该搜索区域内,根据一定的匹配准则进行比较,使匹配误差达到最小值的 16×16 像素区域 即为最佳匹配块
运动补偿
运动补偿过程中,用当前宏块减去其最佳匹配宏块,得到残差宏块,包括亮度残差和色度残差。同时,描述最佳匹配块位置的运动矢量,即该匹配块相对于当前宏块位 置的位移,也会与残差宏块一起进行编码和传输。
在编码器内部,残差宏块不仅被编码,还会被立即解码。解码后的残差宏块与预测宏块相加,重建出当前宏块。该重建宏块进一步组成重建帧,用作后续运动补偿预测的参考帧。
这种方法可以保证编码器和解码器使用相同的重建参考帧,从而避免预测误差在编码端和解码端之间不断累积。