C405b326b8c22e1dc22d46ed41135c18
图片编码探索 -- JPEG

一、前言

本文是图片编码探索的第一篇,主要介绍 JPEG 的编码,在这里你将了解到:

  • 图片的基本概念
  • 色彩空间转换
  • 色彩抽样
  • 傅里叶变换
  • 量化矩阵
  • 熵编码
  • ......

JPEG编码

JPEG编码

二、基础概念

在开始探索前,先来了解下图形学的一些基础,这些在图片处理的过程中或多或少都要运用到。

像素

像素

像素

在由一个数字序列表示的图像中的一个最小单位,称为像素(Pixel)。图像由像素点组成,每个像素可有各自的颜色值,可采三原色显示,因而又分成红、绿、蓝三种子像素(RGB色域),或者青、品红、黄和黑(CMYK色域,印刷行业以及打印机中常见)。图片尺寸为 250 x 200,代表图片水平有 250 个像素点,垂直有 200 个像素点。

色彩深度

色彩深度(color depth)表示在位图或者视频帧缓冲区中储存 1 像素的颜色所用的位数,它也称为位/像素(bpp)。色彩深度越高,可用的颜色就越多

  • 1 位:2^1 = 2 种颜色,单色光,黑白二色。
  • 3 位:2^3 = 8 种颜色,用于大部分早期的电脑显示器。
  • 8位:2^8 = 256 种颜色,用于最早期的彩色Unix工作站,低分辨率的VGA,Super VGA,AGA,color Macintoshes。其中红色和绿色各占 3 位,蓝色占 2 位。
    8位
    8位
  • 24 位:2^24 = 16,777,216 色,真彩色,能提供比肉眼能识别更多的颜色,用于拍摄照片。
    24 位真彩
    24 位真彩
  • 32位:基于24位而生,增加8个位的透明通道。

Alpha合成&Alpha混合&Alpha 通道

Alpha合成

Alpha合成

Alpha合成(alpha compositing)是一种将图像与背景结合的过程,结合后可以产生部分透明或全透明的视觉效果。渲染图像时,通常会将目标图像中的多个子元素单独渲染,最后再把多张子元素的图片合成为单独的图像。我们将半透明的前景色与背景色结合的过程称为Alpha混合(alpha blending)。而每个图层是否可以被透过看到下一图层,就需要记录一些哪里透明、哪里不透明的信息,这些信息就被存在 Alpha 通道(alpha channel) 中。

色彩空间&色彩模型

色彩空间(Color space)是对色彩的组织方式。常见的色彩空间有 ProPhoto RGBAdobe RGBsRGB 等。
色彩模型(Color model)是一种抽象数学模型,通过一组数字来描述颜色(例如RGB使用三元组、CMYK使用四元组)。

有损压缩&无损压缩

有损数据压缩(lossy compression)是一种数据压缩方法,经过此方法压缩、解压的数据会与原始数据不同(不可逆)但是非常接近。
无损数据压缩(Lossless Compression)指数据经过压缩后,信息不受损失,还能完全恢复到压缩前的原样(可逆)

三、JPEG

联合图像专家小组(Joint Photographic Experts Group,缩写:JPEG)是一种针对照片影像而广泛使用的有损压缩标准方法。使用 JPEG 格式压缩的图片文件一般也被称为 JPEG Files,最普遍被使用的扩展名格式为 .jpg,其他常用的扩展名还包括 .jpeg、.jpe、.jfif 以及 .jif。

1、色彩空间转换

首先,JEPG 编码将图片由 RGB 转换为一种称为 YUV 的不同色彩空间。
YUV 是编译真彩颜色空间的种类,Y'UV, YUV, YCbCr,YPbPr等专有名词都可以称为YUV,彼此有重叠,JPEG 使用的正是 YCbCr。
“Y”表示明亮度(Luminance、Luma),“U”和“V”则是色度浓度(Chrominance、Chroma)。

YCbCr 的 Y 与 YUV 中的 Y 含义一致,Cb 和Cr 与 UV 同样都指色彩,Cb 指蓝色色度,Cr 指红色色度。

人类视网膜上有两种细胞,分别是:视锥细胞视杆细胞
视锥细胞负责颜色的辨别,视杆细胞负责明暗的辨别。
因为人类的视杆细胞数量较多,所以人类的眼睛对于亮度差异的敏感度高于色彩变化。


人类眼睛的这个特性,让 YCbCr 这种编码非常有用,编码器可以通过减少 U 和 V 的成分(称为"色度抽样"来达到压缩的目的。

2、色度抽样

下面举个简单的色度抽样方式来解释下如何压缩的。


上图表示,未压缩前的 4 个像素。


因为人类的眼睛对色彩变化较不敏感,所以我们可以在相邻的 4 个像素中只存储 4 个 Y、1个 U、一个 V(如上图)。YUV 和 RGB一样都用 8位来表示,YUV 色彩空间就比 RGB 色彩空间所需的存储空间少一半,数据就被压缩到了一半。

3、离散余弦变换

离散余弦变换(DCT) 是与傅里叶变换相关的一种变换,类似于离散傅里叶变换,但是只使用实数。因此,了解傅里叶变换的思想将有助于对 DCT 的理解。

傅里叶变换

傅里叶变换实质涉及的是频域时域的转换。

时域
top Created with Sketch.