JPEG 压缩简介
JPEG会分析图片的各个部分,找到并删除人眼不易察觉的元素。
人类的眼睛并不完美,它们有自己的细微差别。
JPEG算法通过这个条件,去除我们的眼睛不擅长感知的信息。
由于每只眼睛有1亿个视杆细胞(深度),600万个视锥细胞(色域),因此人眼对图像的亮度感知能力比颜色感知能力要强的多。
图形学补充
视锥细胞又分成三种,S、M和L三种细胞;因为三种类型的细胞对三种类型的波长的响应各不相同。S感知的是小波长高频率,M感知的是中间波长的光,L感知的是长波长的光。
不同的人眼睛中各种细胞的分布非常不一样。
人看不到光谱,因为:三种不同的细胞会把所有光每个波长的计算出一个数,已经被积分了,最后得到三个数送到大脑处理。
同色异谱现象 Metamers
光谱不一样但是看到的结果一样
正是我们利用这样的现象,才能给人们呈现多种颜色。
这个过程就是color matching,颜色匹配。
这四张光谱各不相同,但是被人看到的效果是一样的。
这个原理用在显示器上了。
计算机的加色系统
标准RGB系统
以常见的RGB加色系统为例。
混合RGB颜色的叠加,在真实上,我们混合不同颜色的光,最终会变为白色。
与绘画不同,绘画混合不同颜色会变黑,这种叫减色系统 (CMYK)。
上图是颜色匹配多。对于任何一个颜色都可以用RGB来表示。
对于每个不同波长的光都要用多少的RGB来混合。
CIE XYZ系统
不是试验测出来的颜色匹配系统,是人造的颜色匹配系统。
sRGB只能表示一部分的色彩。
HSV Color Space (Hue-Saturation-Value)
广泛应用于取色器。
给艺术家用的。
色调:选颜色
饱和度:接近白色还是接近纯色
亮度:接近黑色还是接近纯色
CIELAB Space (AKA LAB*)
a 红色-绿色
b 蓝色-黄色
L* 亮度 白色-黑色
互补色
减色系统 CMYK
Cyan 蓝绿色
Magenta 品红色
Yellow 黄色
Key 黑色
混合CMY本来就可以得到黑色,为什么要带上黑色?
考虑印刷成本,黑色墨水便宜。
参数
Quality:决定压缩的程度
0%- 100%
会得到膺像,artifact
步骤
1. 色彩空间转换 Color Space Conversion
通过图像原本的RGB值0-255
算出三个新的数值:亮度、蓝色色度、红色色度 Y、Cb、Cr
这一步转化是可逆的,没有删除任何数据
Y = 0.299R + 0.587G +0.114B
Cb = -0.1687R -0.3313G +0.5B + 128
Cr = 0.5R -0.4187G -0.0813B +128
2. 色度缩减取样 Chrominance Downsampling
会删除很多数据
在缩减采样中,将蓝色和红色色度分量层上的像素按2x2个像素成一个区块进行划分。
(卷积操作?)
计算每个区块的色度平均值,并删掉重复的信息。
然后缩小图像,使得含有1个平均值的由四个像素组成的区块只占一个像素的空间。
这样做,那些我们颜色不易感知的红蓝色度信息的量被缩减到原来的四分之一,而亮度保持不变。
现在只走了两个步骤,图像的大小就变成原来的一半了。
原来的图片是 RGB 1:1:1 = 3
缩小后的图片是 1/4:1/4:1 = 1.5
在观看图片时,蓝色和红色色度值会被放大到和亮度图层一样的大小。
并根据亮度、蓝色色度、红色色度的值重新计算出RGB的值。
3. 离散余弦变换 Discrete Cosine Transform
利用人眼不擅长感知图像中的高频元素(High Frequency Elements)实现的。
而且,当前大部分自然或风景摄影作品中都有一部分画面是失焦的。
为了更平滑的纹理而移除高频率的颜色变化的操作是人眼难以察觉的。
JPEG是如何利用人眼的细微差别呢?
遍历图像的各个部分,找到具有高频率的色度或亮度的像素频繁出现的区域,将这些人眼很难感知的元素删除。
要分别对亮度、蓝色色度、红色色度图层做这样的操作。
假设对亮度做操作。
第一步
将整个图像按8x8划分成许多区域。称为“区块”。
每个区块有64个像素,每个像素用0~255的数值代表其亮度。
接下来通过减去128,得到[-128,127]区间的数值。