JPEG算法的第一步是将图像分割成8X8的小块。
在计算机中,彩色图像最常见的表示方法是RGB格式,通过R(Red)、G(Green)A和(Blue)组合出各种颜色。
除此以外,还有一种表示彩色图像的方法,称为YUV格式。Y表示亮度,U和V表示颜色。它也由三个分量构成,Y表示亮度,Cb表示色度蓝,Cr表示色度红。
JPEG的第二步就是将图像转化为YCbCr格式。
采用这种机制的原理是,人眼通过视锥细胞感知颜色,视杆细胞感知亮度。而视杆细胞的数量要多于视锥细胞,也就是说,人眼对亮度感知能力要高于对颜色的感知能力。如下图所示,仅保留亮度,我们也可以感知到该图像的大部分细节。(熄灯后人会慢慢看清事物,但看不轻颜色)
因此,我们可以保留图像的亮度信息,删减一部分色彩信息,对我们识别图像不会造成特别大的影响。
RGB到YCbCr变换公式如下:
Y=0.299R+0.587G+0.114B
Cb=-0.1687R-0,3313G+0.5B+128
Cr=0.5R-0.4187G-0.0813B+128
JPEG的第三步就是将图像进行离散余弦变换(Discrete cosine transform,DCT)。
将图像的低频信息集中在左上角,以方便后续处理。
任何8X8的像素块都可以通过以下64种频域块叠加而成。
下面的步骤是通过数据量化和哈夫曼编码得到更高的压缩比。
参考文献:
[1]JPEG算法原理 jpeg图片是如何压缩的?
[2]JPEG不可思议的压缩率——归功于信号处理理论 @圆桌字幕组
[3]JPEG压缩原理
[4]JPEG压缩算法步骤原理
[5]音视频入门(四)-JPEG压缩算法原理
[6]JPEG 有损压缩 离散余弦变换 DCT 一条视频讲清楚
[7]JPEG ‘files’ & Colour (JPEG Pt1)- Computerphile