数字图像是怎么表示的
在计算机中,一张位图图像可以表示为一个二维的像素矩阵。
每个像素都表示了图像在某一点的颜色信息。
每个像素的颜色信息由一个或多个数值组成,这些数值通常被称为通道。
对于灰度图像,每个像素只需要一个值来表示亮度。
在最常见的 8 位灰度图像中,每个像素的亮度值范围为 0~255,其中 0 表示黑色,255 表示白色,介于两者之间的数值表示不同的灰度级别。
对于彩色图像,每个像素需要多个值来共同表示某个颜色。其中最常见的就是 RGB 模型,也就是每个像素由红(Red)、绿(Green)、蓝(Blue)三个通道组成。
与灰度图像类似,每个通道的值通常也是 0~255 的整数,表示该颜色通道的亮度。组合不同的 R、G、B 值,就可以表示出各种颜色。
为什么需要压缩图像
一张 1920 × 1080 的 24 位彩色图像(每个通道 8 位)大约需要 1920 × 1080 × 3 = 6220800 B ≈ 5.93 MiB 的存储空间,而一张 3840 × 2160 的 24 位彩色图像大约需要 3840 × 2160 × 3 = 24883200 B ≈ 23.73 MiB 的存储空间。仅仅几十张 4K 分辨率的照片就可以占用 1 GB 以上的存储空间,这对于存储和传输来说都是不小的负担。
有没有什么办法,可以在不影响、或者不明显影响图像质量的前提下,尽可能减小图像文件的大小呢?这正是图像压缩技术的初衷。压缩技术大致分为两类:解压后能够完全还原原始图像的称为无损压缩(Lossless),而允许有一定损失、解压后无法完全还原原始图像的称为有损压缩(Lossy)。我们平常见到的 JPEG 格式就属于有损压缩,也是其中应用最广泛、最受欢迎的代表之一。
什么是 JPEG?
在上网冲浪的过程中,JPEG 可以说是最常见的图像格式之一了。尽管到处都能看见以 .jpg 或者 .jpeg 为扩展名的文件,但 JPEG 严格来说并不算是一种完整的图像文件格式。
1986年,JPEG(Joint Photographic Experts Group)工作组成立,正如它的名字所述,它是 CCITT(也就是后来的 ITU-T) 与 ISO/IEC 两大标准组织联合创立的工作组,其目标就是研究适用于数字照片的通用压缩技术。随后,CCITT 于 1992 年 发布了 T.81,ISO/IEC 于 1994 年 发布 10918-1,这两者通常合称为 JPEG-1。这个划时代的标准规定了一系列的静态图像压缩方案。在这一系列的方案中,最为今天的我们熟知的,是基于离散余弦变换的 JPEG Baseline Sequential DCT 模式,我们这一期所讲的 JPEG,实际上就专指这个模式。
不过,虽然 JPEG-1 定义了图像压缩算法,但是却没有定义完善的文件交换规范,这就给图像文件的传播造成了不便。刚好,Eric Hamilton 于 1991 年前后提出了 JFIF (JPEG File Interchange Format),作为 JPEG 压缩数据的文件封装格式。这便是之后在互联网中最广泛使用的 JPEG 文件格式。JFIF 也在 2011 年被标准化为 ITU-T T.871,我们后面所提到的 JFIF 均指ITU-T T.871。
与此同时,随着数码相机的发展,1995年左右由日本电子工业振兴协会(JEIDA)提出 EXIF(Exchangeable Image File Format)规范,用于在 JPEG 文件中保存拍摄时间、相机型号、曝光参数、GPS 等元数据。JEIDA 后来与 EIAJ 合并为 JEITA,因此一些资料也会把 EXIF 归到 JEITA 名下。
今天常见的 .jpg/.jpeg 文件通常并不对应一个单独定义的“JPEG 文件格式标准”,而是由 JPEG Baseline Sequential DCT 模式产生的压缩码流,加上 JFIF 或 EXIF 等文件封装/元数据规范组合形成的事实标准。
JPEG 可以轻松达到 10:1 甚至更高的压缩比,同时在视觉上仍然保持较高的图像质量。它是用了什么方法才能做到这一点的呢?