概述

图像压缩的目的是为了减少数字图像所占用的数据量。压缩是通过去除三个基本的数据冗余来达到的:

  1. 编码冗余:采用最优码字可以达到最佳编码长度,否则就存在编码冗余。
  2. 像素间冗余:一幅图像的像素间存在相关性产生冗余
  3. 心理视觉冗余:人类视觉对于图像数据忽略的冗余。

压缩编码框图:

figure81.png

若解压缩后的图像和原始图像完全相同,则称为无损(无误差或信息保持)的压缩,否则称为有损压缩。

有损压缩的误差,定义为:

$$e(x,y)=\hat{f}(x,y)-f(x,y)$$

两幅图像之间的总误差常常用均方根误差$e_{rms}$来表示:

$$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}$$

压缩比:

$C_R=\frac{n_1}{n_2}$

编码冗余

假设一幅4色图像,各个象素级出现的概率和编码如下:

figure82.png

第一种编码为定长编码,平均每个像素需要用2个比特来表示。第二种编码是变长编码,平均每个像素需要的比特数为:

$$L_{avg}=\sum_{k=1}^{4}l_2(k)p_r(r_k)=3\times 0.1875+1\times 0.5+3\times 0.125+2 \times 0.1875=1.8125$$

压缩比为

$$C_r = 2 / 1.8125 = 1.103$$

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

$$I(E) = log\frac{1}{P(E)} = -log P(E)$$

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

$$H=-\sum_{j=1}^{J}P(a_j)log P(a_j)$$

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

$$H = -\sum_{k=1}^{L}p_r(r_k)log p_r(r_k)$$

1. 霍夫曼码

figure83.png

计算码表

p = [0.1875 0.5 0.125 0.1875];
c = huffman(p)

对图像进行编码

hf = mat2huff(f);

解码

f = huff2mat(hf);

像素间冗余

figure84.png

计算两幅图像的信息熵,以及比较霍夫曼编码后的压缩比,可以发现两幅图像的信息熵和压缩比都是差不多的。但是我们观察图像明显可以发现,下图中的火柴排列明显有规律,应该有更多的信息冗余。

figure85.png

其中

$$e_n=f_n-\hat{f}_n$$

$\hat{f}_n$可以由各种方法生成。通常:

$$\hat{f}_n=round\left[ \sum_{i=1}^{m} \alpha_i f_{n-i} \right]$$

figure86.png

心理视觉冗余

例如将256级灰度图像压缩成16级灰度图像。采用不同的量化方法,产生不同的效果:

figure87.png

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压缩

figure88.png

figure89.png

figure810.png

数字图像压缩 (2008-06-12 19:59:04由czk编辑)

ch3n2k.com | Copyright (c) 2004-2020 czk.