这几天,看完了jpeg的结构,遂把一些主要内容总结如下:
-------------------------------------------------------------------------------------
JPEG
早期的照片采用原始的RGB和YUV等格式,这些格式有个不好的地方,就是照片太大,而jpeg则根据人体视觉的特点采用了YCbCr格式,大大压缩了照片的大小,但效果能却相当于没有失真。
JPEG的编,解码过程如下:
编码,
|源图像|---〉|正离散余弦变换|-->|量化|--〉|编码(常用霍夫曼编码)|--〉|JPEG图像|
(FDCT) (自建量化表) (自建编码表)
解码,
|JPEG图像|--〉|解码|--〉|逆量化|------〉|反离散余弦变换|--〉|原图像|
(使用编码时对应的编码表,量化表) (IDCT)
其中,离散余弦变换是核心,正离散余弦变换(FDCT)可看成谐波分析仪,反离散余弦变换(IDCT)可看成谐波合成仪;图像失真来源于量化;霍夫曼编码主要是实现无损压缩,大意是,将出现概率大的信息,赋以短字长的码,而对于出现概率小的信息,赋以长字长的码,这样得到的编码结果将是最小的。不过由于会有相同概率的符号存在,所以编码不唯一。
1. 色彩模型
JPEG 的图片使用的是 YCrCb 颜色模型, 而不是计算机上最常用的 RGB. 关于色
彩模型, 这里不多阐述. 只是说明, YCrCb 模型更适合图形压缩. 因为人眼对图片上
的亮度 Y 的变化远比色度 C 的变化敏感. 我们完全可以每个点保存一个 8bit 的亮
度值, 每 2x2 个点保存一个 Cr Cb 值, 而图象在肉眼中的感觉不会起太大的变化.
所以, 原来用 RGB 模型, 4 个点需要 4x3=12 字节. 而现在仅需要 4+2=6 字节; 平
均每个点占 12bit. 当然 JPEG 格式里允许每个点的 C 值都记录下来; 不过 MPEG 里
都是按 12bit 一个点来存放的, 我们简写为 YUV12.
[R G B] -> [Y Cb Cr] 转换
-------------------------
(R,G,B 都是 8bit unsigned)
| Y | | 0.299 0.587 0.114 | | R | | 0 |
| Cb | = |- 0.1687 - 0.3313 0.5 | * | G | + |128|
| Cr | | 0.5 - 0.4187 - 0.0813| | B | |128|
Y = 0.299*R + 0.587*G + 0.1
-------------------------------------------------------------------------------------
早期的照片采用原始的RGB和YUV等格式,这些格式有个不好的地方,就是照片太大,而jpeg则根据人体视觉的特点采用了YCbCr格式,大大压缩了照片的大小,但效果能却相当于没有失真。
JPEG的编,解码过程如下:
编码,
|源图像|---〉|正离散余弦变换|-->|量化|--〉|编码(常用霍夫曼编码)|--〉|JPEG图像|
(FDCT) (自建量化表) (自建编码表)
解码,
|JPEG图像|--〉|解码|--〉|逆量化|------〉|反离散余弦变换|--〉|原图像|
(使用编码时对应的编码表,量化表) (IDCT)
其中,离散余弦变换是核心,正离散余弦变换(FDCT)可看成谐波分析仪,反离散余弦变换(IDCT)可看成谐波合成仪;图像失真来源于量化;霍夫曼编码主要是实现无损压缩,大意是,将出现概率大的信息,赋以短字长的码,而对于出现概率小的信息,赋以长字长的码,这样得到的编码结果将是最小的。不过由于会有相同概率的符号存在,所以编码不唯一。
1. 色彩模型
JPEG 的图片使用的是 YCrCb 颜色模型, 而不是计算机上最常用的 RGB. 关于色
彩模型, 这里不多阐述. 只是说明, YCrCb 模型更适合图形压缩. 因为人眼对图片上
的亮度 Y 的变化远比色度 C 的变化敏感. 我们完全可以每个点保存一个 8bit 的亮
度值, 每 2x2 个点保存一个 Cr Cb 值, 而图象在肉眼中的感觉不会起太大的变化.
所以, 原来用 RGB 模型, 4 个点需要 4x3=12 字节. 而现在仅需要 4+2=6 字节; 平
均每个点占 12bit. 当然 JPEG 格式里允许每个点的 C 值都记录下来; 不过 MPEG 里
都是按 12bit 一个点来存放的, 我们简写为 YUV12.
[R G B] -> [Y Cb Cr] 转换
-------------------------
(R,G,B 都是 8bit unsigned)
| Y | | 0.299 0.587 0.114 | | R | | 0 |
| Cb | = |- 0.1687 - 0.3313 0.5 | * | G | + |128|
| Cr | | 0.5 - 0.4187 - 0.0813| | B | |128|
Y = 0.299*R + 0.587*G + 0.1