FFmpeg音视频开发基础与实战
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.3.3 常见的图像压缩编码格式

1.BMP格式

BMP格式是在Windows等操作系统中最常用的位图格式之一,其命名取自位图Bitmap的缩写。BMP格式的图像可以保存位深为1 bit、4 bit、8 bit、16 bit、24 bit或32 bit的图像,图像数据可以使用未压缩的RGB格式。

2.JPEG格式

JPEG格式是一种基于离散余弦变换(Discrete Cosine Transform,DCT)的有损压缩编码格式,可以通过较小的数据损失获得较小的数据体积。离散余弦变换具有以下特点。

◎ 变换后的频域能量分布与实际的图像信号更加吻合。

◎ 更容易兼容硬件计算,运算更高效。

离散余弦变换

离散余弦变换类似于一种实数类型的离散傅里叶变换(DFT),其定义有多种形式。通常来说,最常用的离散余弦变换是一个正交变换,变换的计算公式如下:

把一幅未压缩的图像压缩成JPEG格式的图像的主要流程如下。

(1)把像素格式的图像数据转换为YUV格式,并对两个亮度分量进行亚像素采样,最终生成4∶2∶0格式的图像数据。

(2)针对每个YUV格式的图像数据分别进行处理,将每个分量的图像等分为8像素×8像素的像素块。

(3)对于每个8像素×8像素的像素块,都使用离散余弦变换将像素数据变换为值频域,并根据给定的量化表将变换系数量化为特定值。

(4)对于某个分量图像的所有像素块,对其变换量化后的直流分量系数通过DPCM编码,在交流分量系数通过“之”字型扫描转换为一维数据后,再通过游程编码进行处理。“之”字形遍历顺序如图2-9所示。

图2-9

(5)对于处理后的变换系数,使用熵编码(如哈夫曼编码等)生成压缩码流输出。

根据大量实践得知,通常情况下,尺寸为8像素×8像素的像素块为最优选择。如果像素块的尺寸小于8像素×8像素(如4像素×4像素),则一幅图像在分割后像素块数量容易过多;若尺寸大于8像素×8像素,则在图像尺寸较小的情况下,像素块内各个像素之间的关联性会降低,每个像素块将残留过多的变换系数,导致压缩率降低。

JPEG编码的整体流程如图2-10所示。

图2-10