前言
最近学习了图像压缩的相关知识,准备在此方向上进行深入研究,最后以期能利用深度学习的方法来实现图像压缩。
图像压缩的基本原理
图像压缩的基本原理是将图像中的冗余信息去除,从而减小图像的大小。图像压缩的方法有很多,包括有损压缩和无损压缩。有损压缩是指将图像中的冗余信息去除,从而减小图像的大小。无损压缩是指将图像中的冗余信息保留下来,依然可以减小图像的大小。
我们首先要知道,一个原始图像的通道数是3,也就是RGB三个通道。每个通道的像素值都是0-255之间的整数。我们可以将每个通道的像素值看作一个二维矩阵。通过JPEG算法,我们可以将每个通道的像素值看作一个二维矩阵,然后将每个矩阵进行离散余弦变换(DCT),然后将每个矩阵进行量化,最后将每个矩阵进行熵编码。这样就可以将一个原始图像压缩成一个压缩图像。图像的大小可能从45MB减小到10KB。
JPEG会分析图片的各个部分,并找到人眼不容易察觉的元素,这些元素对于人类来说可能是很熟悉的,那么这种熟悉的元素就可以被压缩,从而减小图片的大小。也就是说某元素出现概率越高,它的信息量就越小,那么它就越容易被压缩掉。
为什么丢失掉一些信息却还能让图片看起来和原图一样呢?这里我们就要解释一下人眼的视觉原理了。人眼中有两种敏感的视觉细胞,一种是对亮度变化敏感的细胞,另一种是对颜色变化敏感的细胞。视感细胞有一亿个,而视锥细胞只有600万个。所以人眼对亮度变化非常敏感,而对颜色变化不敏感。也就是说,人眼对亮度变化的敏感度比颜色变化的敏感度要高。因此,JPEG算法会将亮度变化的元素保留下来,而将颜色变化的元素压缩掉。这样就可以让图片看起来和原图一样,同时又减小了图片的大小。
举个例子,这里有两张图片,分别是只显示亮度的黑白版本和完整的彩色版本。
![]() |
![]() |
当我们在使用JPEG压缩图片时,我们可以选择不同的压缩质量。压缩质量越高,图片的质量就越好,但是图片的大小就越大。压缩质量越低,图片的质量就越差,但是图片的大小就越小。
JPEG压缩算法的基本流程如下:
- 将原始图像分成8x8的小块。
- 对每个小块进行DCT变换。
- 对每个小块进行量化。
- 对每个小块进行熵编码。
- 将每个小块的熵编码结果合并成一个压缩图像。