概述
图像压缩的目的是为了减少数字图像所占用的数据量。压缩是通过去除三个基本的数据冗余来达到的:
- 编码冗余:采用最优码字可以达到最佳编码长度,否则就存在编码冗余。
- 像素间冗余:一幅图像的像素间存在相关性产生冗余
- 心理视觉冗余:人类视觉对于图像数据忽略的冗余。
压缩编码框图:
若解压缩后的图像和原始图像完全相同,则称为无损(无误差或信息保持)的压缩,否则称为有损压缩。
有损压缩的误差,定义为:

两幅图像之间的总误差常常用均方根误差
来表示:
![$$e_{rms}=\left[\frac{1}{MN} \sum_{x=0}^{M-1} \sum_{y=0}^{N-1}\left[\hat{f}(x,y)-f(x,y)\right]^2\right]^{1/2}$$ $$e_{rms}=\left[\frac{1}{MN} \sum_{x=0}^{M-1} \sum_{y=0}^{N-1}\left[\hat{f}(x,y)-f(x,y)\right]^2\right]^{1/2}$$](/%E6%95%B0%E5%AD%97%E5%9B%BE%E5%83%8F%E5%8E%8B%E7%BC%A9?action=AttachFile&do=get&target=latex_373cf9ec161d0f420717a725cb1e313e626f43ec_p1.png)
压缩比:

编码冗余
假设一幅4色图像,各个象素级出现的概率和编码如下:
第一种编码为定长编码,平均每个像素需要用2个比特来表示。第二种编码是变长编码,平均每个像素需要的比特数为:

压缩比为

表示一幅图像,至少需要多少比特?概率为P(E)的随机事件E包含的信息量为:

一组不相关的随机事件,所包含的总信息量为:

对于图像来说,平均每个像素所包含的信息量为

1. 霍夫曼码
计算码表
p = [0.1875 0.5 0.125 0.1875]; c = huffman(p)
对图像进行编码
hf = mat2huff(f);
解码
f = huff2mat(hf);
像素间冗余
计算两幅图像的信息熵,以及比较霍夫曼编码后的压缩比,可以发现两幅图像的信息熵和压缩比都是差不多的。但是我们观察图像明显可以发现,下图中的火柴排列明显有规律,应该有更多的信息冗余。
其中

可以由各种方法生成。通常:
![$$\hat{f}_n=round\left[ \sum_{i=1}^{m} \alpha_i f_{n-i} \right]$$ $$\hat{f}_n=round\left[ \sum_{i=1}^{m} \alpha_i f_{n-i} \right]$$](/%E6%95%B0%E5%AD%97%E5%9B%BE%E5%83%8F%E5%8E%8B%E7%BC%A9?action=AttachFile&do=get&target=latex_1588e5c55242974b18b5d41d297459c2eacbf6bb_p1.png)
心理视觉冗余
例如将256级灰度图像压缩成16级灰度图像。采用不同的量化方法,产生不同的效果:
igs的原理是将前一个像素的量化误差,在下一个像素的量化中进行弥补。
q = quantize(f, 4, 'igs');
综合前面的方法,我们可以进一步提高压缩效率:
q = quantize(f, 4, 'igs'); qs = double(q) / 16; e = mat2lpc(qs); c = mathuff(e); imratio(f, c)
JPEG压缩
- 把图像分割成8x8的像素块。
- 所有像素减去2^(m-1)
- 进行二维离散余弦变换
得到的系数进行归一化和量化