图像压缩

图像压缩是数据压缩技术在数字图像上的应用，目的是减少图像数据中的冗余信息，从而用更加高效的格式存储和传输数据。
压缩的原理.
资料越一致，代表统计特性越集中，包括傅立叶转换域(Fourier transform domain)、直方图(histogram)、特征值(eigenvalue)...等方面的集中度。压缩的通则即是利用资料的一致性，越一致的资料，越能够进行压缩。除此之外，也可利用资料的规则性与可预测性来对其作压缩。通常而言，若可以用比较精简的自然语言来描述一个东西，那么也就越能够对这个东西作压缩。
影像的一致性.
空间上的一致性.
影像中每一点的值，会和相邻的点的值非常接近。
formula_1 ≈ formula_2
formula_1 ≈ formula_2
直方图(histogram)是统计出现次数的一种方法，它会去计算一个向量(vector)或一个矩阵(matrix)当中，有多少个点会等于某一个值。
举例来说，formula_5
则 formula_6的直方图(histogram)为
formula_7，formula_8，formula_7，formula_10，formula_11
将影像相临值的差异，利用直方图(histogram)来统计，会发现值几乎都落在0附近。
频率上的一致性.
一张影像的频谱大多集中在低频的地方。
影像的「频率」是在空间域(space domain)作分析：
常用影像压缩技术.
压缩的技术分成两种：失真压缩(lossy compression)的压缩率较高，但无法重建原来的资料，例如：DFT、DCT、KLT(搭配量化(quantization)与截断(truncation))、4：2：2或4：2：0、多项式曲线的近似(polynomial approximation)；无失真压缩(lossless compression)的压缩率较低，但可以重建原来的资料，例如：二元编码(binary coding)、霍夫曼编码(Huffman coding)、算术编码(arithmetic coding)、格伦布编码 (Golomb coding)。
4：2：2或4：2：0.
此技术运用的是空间上的一致性。
将像素(pixel)的RGB值，利用以下的公式转换成YCbCr
Y = 0.299 R + 0.578 G + 0.114 B
Cb = -0.169 R - 0.331 G + 0.500 B ( Cb = 0.565 (B - Y) )
Cr = 0.500 R - 0.419 G - 0.081 B ( Cr = 0.713 (R - Y) )
其中 Y 是亮度(Luminance)，Cb是蓝色色差(chrominance) ，Cr 是红色色差(chrominance)。 
人类的视觉系统，对于亮度比较敏感，而对于彩度比较不敏感。
因此我们可以利用人类视觉的特性，减少Cb、Cr的取样个数，取样格式有4：2：2 与 4：2：0两种。
假设一张图片原本压缩前(即4：4：4)的Y、Cb、Cr各有M×N个值，4：2：2的压缩Y保留为M×N个值、Cb、Cr则取样到各剩下M/2×N个值；4：2：0的压缩Y同样保留为M×N个值、Cb、Cr则进一步取样到各剩下M/2×N/2个值。
从4：4：4到4：2：2，压缩率约为2/3；从4：4：4到4：2：0，压缩率约为1/2。
从4：4：4压缩到4：2：2，再压缩到4：2：0，单一像素(pixel)储存的bit 数可以等效为：24 bits/pixel → 16 bits/pixel → 12 bits/pixel。
还原时，则是利用插值(interpolation)的方式：
formula_12 = 1/2 ×(formula_13 + formula_14 )
8×8 离散余弦转换(DCT).
此技术运用的是频率上的一致性。
通常我们会将影像切成8×8的方格作离散余弦转换(DCT)，原因如下：
经过离散余弦转换(DCT)后的8×8矩阵称为DCT矩阵。DCT矩阵最左上角的系数称为直流(DC)成分，而其他63个系数则称为交流(AC)成分。越靠近DC值的AC值系数表示频率较低的部分，而越往右下角方向的AC值代表的频率则越高。
2D的8×8 DCT的输出通常会按照"zigzag"的顺序，将2D转为1D的型态。按照此顺序排列，能量可能较大的会被摆在前面，而后面的高频成分从某个值开始后几乎为零，以符号EOB(end of block)表示，指后面的高频的部分经过量化(quantization)之后皆为0。
差分编码(Differential coding).
此技术运用的是空间上的一致性。
差分编码指的是，除第一个元素外，将其中各元素都表示为各该元素与其前一元素的差的编码。
对formula_15 ，是针对 formula_16 - formula_17 去编码，
而不是直接对formula_18作编码。
霍夫曼编码(Huffman coding).
霍夫曼编码(Huffman coding)的编码原则：(Greedy Algorithm)
不满足以上的条件则往上推一层。
算术编码(Arithmetic coding).
霍夫曼编码(Huffman coding)是将每一笔资料分开编码，算术编码(Arithmetic coding)则是将多笔资料一起编码，因此压缩效率比霍夫曼编码(Huffman coding)更高，近年来的压缩资料大多使用算术编码(Arithmetic coding)。
假设要对X来作二进位的编码，且经过事先的估计，formula_23 的机率为0.8，formula_24 的机率为0.2。
若实际上输入的资料为 formula_25
Initial(formula_26)：lower =0，upper=0.8
When i = 2 (formula_26)：lower =0，upper=0.64
When i = 3 (formula_26)：lower =0，upper=0.512
When i = 4 (formula_29)：lower =0.4096，upper=0.512
When i = 5 (formula_26)：lower =0.4096，upper=0.49152
When i = 6 (formula_26)：lower =0.4096，upper=0.475136
由于 lower =0.4096，upper=0.475136
lower <= 14*formula_32 < 15*formula_32 <= upper
所以编码的结果为
formula_34 
动态影像之编码.
MPEG(Moving Picture Experts Group)为动态影像编码的国际标准。
动态影像编码的使用原理为：不同时间，同一个像素(pixel)之间的相关度通常极高，只需对有移动的物件(objects)记录移动向量(motion vector)。
formula_35 ：时间为t的影像
如何由formula_36 来预测 
formula_37？
(1)移动向量formula_38，formula_39
(2)预测formula_37：
formula_41 = formula_42
(3)计算「预测误差」
formula_43 = formula_44 - formula_45
对预测误差 formula_46 作编码。
影像档案的处理(Matlab).
基本概念.
.bmp: 没有经过任何压缩处理的图档
.jpg: 有经过JPEG 压缩的图档
例如，若要对影像做2D离散傅立叶转换(Discrete Fourier transform)：
im=imread('C:\Program Files\MATLAB\pic\Pepper.bmp');
im=double(im);
Imf=fft2(im);
范例.
im=double(imread('C:\Program Files\MATLAB\pic\Pepper.bmp'));
size(im);
image(im);
colormap(gray(256));
im2=double(imread('C:\Program Files\MATLAB\pic\Pepper512c.bmp'));
size(im2);
压缩方法.
图像压缩可以是有损数据压缩也可以是无损数据压缩。常见的应用有raw和tiff格式等。gif和jpeg是有损压缩。通过DCT变换后选择性丢掉人眼不敏感的信号分量，实现高压缩比率。
无损压缩.
对于如绘制的技术图、图表或者漫画，优先使用无损压缩，这是因为有损压缩方法，尤其是在低的位速条件下，将会带来压缩失真，如医疗图像或者用于存档的扫描图像……等，这些有价值的内容的压缩也尽量选择无损压缩方法。
有损压缩.
有损方法非常适合于自然的图像，例如一些应用中图像的微小损失是可以接受的（有时是无法感知的），这样就可以大幅度地减小位速。
特性.
图像压缩的目的就是在给定位速或者压缩比下实现最好的图像质量。但是，还有一些其它的图像压缩机制的重要特性：
压缩方法的质量经常使用峰值信噪比来衡量，峰值信噪比用来表示图象有损压缩带来的噪声。但是，观察者的主观判断也认为是一个重要的、或许是最重要的衡量标准。
参考文献.
Jian-Jiun Ding, “Advanced Digital Signal Processing”, NTU, 2021.