音视频基础_5_图像压缩技术简介

图像压缩技术简介

人眼和相机的成像原理

初中时我们都学过凸透镜成像,人眼和相机本质上都是凸透镜成像原理。人眼的晶状体和相机的镜头焦距,都可以调节焦距,从而看到远近不同的物体。有一点需要注意,凸透镜成像形成的是倒立的像,人的大脑会将其纠正为正立的像,而相机则需要通过特殊的元器件进行翻转,例如五棱镜等。

早期的相机都是使用胶片作为成像设备,光线打在胶片上,发生化学反应,形成底片,之后再洗出照片。而现在的相机一般都是感光元件将光信号转为电信号,然后电信号转为数字信号,图像的原始数据可直接写入存储设备,方便计算机进行处理。

当然,实际上相机的原理远比这要复杂的多,那是另一个领域,这里不再做过多的介绍。

RAW 格式图片

计算机中的图片是从哪来的?计算机中的图片来源,本质上只有两个:照相机/摄像机拍摄到图片,或者计算机内部使用图形图像代码库生成的图片(如游戏画面)。这里我们不讨论后者,主要介绍照相机拍摄到的图片。

前面我们讲过,现在的相机可将光信号转为数字信号写入存储设备,这就是最原始的图像数据。这种图像数据一般被称为 RAW 格式图片。RAW 格式图片中包含原始图像的RGB信息,以及快门速度、光圈值、白平衡等相机元数据。可以说,图像领域的 RAW 格式的图片就相当于声音领域的 PCM 数据。PS. 不同相机导出的 RAW 格式图片,其文件的后缀名可能不同。

图片中的每个像素的信息是RGB三色光信息混合而成。RGB三色光有时被称为三个通道,三个通道各有自己的值。而比特深度则用来描述每个通道的所有级别的值的数量,256 是 2 的 8 次方,那么我们可以说,比特深度为 8。这点和声音采样量化中的比特深度类似。

我们知道 PCM 数据体积是很大的,RAW 格式图片也是如此。假设相机拍出来的照片分辨率为 3264 * 2448,约800万像素(稀松平常的分辨率),每个像素RGB通道的比特深度均为8bit(实际上可能是16bit),则一个像素的大小为 24bit 即 3Byte,这张图片的大小为:8000000*3 = 24000000Byte,约为 23MB。这个大小如果只是存在硬盘上,还能接受,但是如果进行网络传输,那么这个数据量就太大了,必须进行压缩。

JPEG 可以说是最常见,最流行的图片压缩技术,它由联合图像专家组(Joint Photographic Experts Group)开发。使用 JPEG 压缩的图片,其后缀名大都为 .jpg 或 .jpeg。JPEG 是一种有损压缩技术,压缩过程中会将原始图像数据中不重要的部分去掉,以便可以用更小的体积保存。2000 年时推出了新的 JPEG 2000 技术,支持无损压缩,但是常用的还是 JPEG 有损压缩算法。

下面就来讲讲 JPEG 压缩原理。

YUV 色彩模式

科学实验证明,人眼对亮度更敏感,对颜色的敏感程度不如对亮度的敏感程度,例如在昏暗的光线下,人只能看到物体的明暗,却分辨不出颜色。另外,人眼对色彩的位置信息也不如对亮度信息敏感。YUV 色彩模式就利用了这些原理。

YUV 模式最早是用在彩色电视领域,是为了解决当时彩色电视信号带宽的问题(这个我们后面还会再说)。后来称为彩色视频领域的通用标准,在彩色电视,计算机图像,数字视频领域都有着非常广泛的应用,并从中衍生出各种子模式,例如用在彩色电视模拟信号中的 YPbPr/YIQ,用在计算机图像和视频领域的 YCbCr 等等。

YUV 中的 Y 表示像素的亮度,也就是灰度值,而 U、V 表示像素的色度,二者共同决定色相和饱和度(有点像HSB色彩模式,不过准确来说U和V分别表示蓝色和红色的“色差值”)。对于 YUV 所表示的图像,Y 和 UV 分量是分离的。如果只有 Y 分量而没有 UV 分量,那么就是黑白图像。彩色电视机采用的就是 YUV 信号,解决与和黑白电视机的兼容问题,使黑白电视机也能接受彩色电视信号。

YUV 颜色空间是从RGB颜色空间推导而来。二者可相互转换,即可以从 RGB 计算出 YUV 的值,也可以将 YUV 还原为 RGB 值。

计算机图像和视频领域使用的 YCbCr 模式,这是 YUV 的一种缩放和偏移模式,它与 RGB的转换如下:

Y = 0.298R + 0.612G + 0.117B;
U = -0.168R - 0.330G + 0.498B + 128;
V = 0.449R - 0.435G - 0.083B + 128;

R = Y + 1.4075( V - 128);
G = Y - 0.3455( U - 128) - 0.7169( V - 128);
B = Y + 1.779( U - 128);

这些公式倒是不用背,用到时查即可。

JPEG 压缩原理

我们前面说过,人眼对亮度更敏感,对颜色的敏感度不如亮度。JPEG 压缩的第一步就是将RGB图像分解为 Y,Cb,Cr 三个分量。比如下面这张图:
原图
分解之后就成了:
Y分量Cb分量Cr分量
第二步,将 Y 分量的数据完全保留下来,对 Cb,Cr 两个分量进行降采样,意思就是,将多个像素的颜色变为一个像素的颜色,这样一来,数据量就减少了很多。至于到底降低到什么程度,后面讲视频原理是会继续分析。

第三步,将图像分为若干个 8*8 的小块,方便后续的算法处理。

第四步,离散余弦变换(DCT Discrete Cosine Transform),这是 JPEG 中的核心算法,大致原理是,将人眼敏感的部分(例如颜色的边界,轮廓)和不敏感的部分(例如大色块)进行分离,最终得到的结果是对每个 88 的小块得到 88 的系数矩阵。这个算法非常复杂,这里不做过多介绍。

第五步,量化,将DCT后得到的每个系数都除以量化矩阵中对应的值,然后进行取整。JPEG中压缩率的调整就是在这一步中体现的。

第六步,使用 Huffman 编码,将上一步得到的矩阵进行进一步地压缩,可以理解为使用数学方法重新组织数据,减小数据量。

上面这些步骤完成之后,再加上一些必要的其他信息(量化矩阵和Huffman的信息,这两个信息需要写入到文件中),就得到了最终的JPEG数据。

整个过程十分复杂,涉及到很多数学和算法知识,并没有详细解释,毕竟这系列文章只是为了入门(我也不会)。

其他图片格式

BMP

BMP是Windows操作系统中的标准图像文件格式,能够被多种 Windows 应用程序所支持。这种格式的特点是包含的图像信息较丰富,几乎不进行压缩,但由此导致了它与生俱生来的缺点:占用磁盘空间过大。所以,目前BMP在只在单机上比较流行,很少用于网络。

GIF

GIF的全称是 Graphics Interchange Format,可译为图形交换格式,采用的是Lempel-Zev-Welch(LZW)压缩算法,最高支持256种颜色。由于这种特性,GIF比较适用于色彩较少的图片。如果碰到需要用复杂彩色的场合,那么GIF的表现力就有限了。但其实GIF最大的优点是支持动态图像,GIF可以包含多张图片,按照时间顺序切换,形成动图。

TIFF

TIFF(Tag Image File Format)图像文件是图像处理中常用的格式之一,其图像格式很复杂,但由于它对图像信息的存放灵活多变,可以支持很多色彩系统,而且独立于操作系统,因此得到了广泛应用。很多专业图片处理软件都支持到处 TIFF 图片格式,并且经常作为不同软件的图像交换中间格式。

PNG

PNG(Portable Network Frame 便携式网络图形)是一种无损压缩的位图片形格式,其设计目的是试图替代 GIF 和 TIFF 文件格式,同时增加一些 GIF 文件格式所不具备的特性。PNG 图片最大的两个优点是:

  1. 无损压缩:PNG文件采用LZ77算法的派生算法进行压缩,其结果是获得高的压缩比,不损失数据。它利用特殊的编码方法标记重复出现的数据,因而对图像的颜色没有影响,也不产生颜色的损失,这样就可以重复保存而不降低图像质量。
  2. 支持透明效果:PNG可以为图像定义256个透明层次,使得彩色图像的边缘能与任何背景平滑地融合,从而彻底地消除锯齿边缘。这种功能是JPEG,GIF 和 JPEG 没有的。为了描述这种透明效果,PNG 原有的 RGB 三通道上,增加了 8 bit 的 Alpha 通道(透明通道)。支持透明会增大图片体积,不过这是个可选的选项。

由于 PNG 的优秀特性,它在网络中以及各种操作系统中都十分常用。

发布了13 篇原创文章 · 获赞 1 · 访问量 255

猜你喜欢

转载自blog.csdn.net/gaoyuan_zz/article/details/104884909