数字图像处理第八章
数字图像处理—图像压缩
目前是毕业论文,毕业设计的后期验收阶段,所以时间不是很充裕,暂时对书上已经写得很清楚的知识点不再重复赘述,主要做一些总结,思考以及知识点的梳理和扩展。
图像压缩原理:
- 数据压缩的对象是数据,大的数据量并不代表含有大的信息量。
- 图像压缩就是除去图像中多余的数据而对信息没有本质的影响。
- 图像压缩是以图像编码形式实现的,用较少的比特数表示出现概率较大的灰度级,用较多的比特数表示出现概率较小的灰度级,从而使平均码长更接近于信息熵。
图像压缩目的:减少表示数字图像时所需的数据量。减少数据量的基本原理是除去其中多余的数据。从数学角度看,这一过程实际上就是将二维像素矩阵变换为一个在统计上无关联的数据集合。
图像压缩方法分类:
-
按压缩前及压缩后的信息保持程度分类:
(1)信息保持型
压缩、解压中无信息损失,主要用于图像存档,其特点是信息无损失,但压缩比有限,也称无失真/无损/可逆型编码。
(2)信息损失型
牺牲部分信息,来获取高压缩比,数字电视,图像传输和多媒体应用场合常用这类压缩,其特点是通过忽略人的视觉不敏感的次要信息来提高压缩比,也称有损压缩。
(3)特征抽取型
仅对于实际需要的(提取)特征信息进行编码,而丢掉其他非特征信息,属于信息损失型。
第三类针对特殊的应用场合。因此,一般将图像压缩编码分成无损和有损两大类。 -
按图像压缩的方法原理可分成四类:
(1)像素编码
编码时只对每个像素单独处理。如脉冲编码调制,熵编码,行程编码等。
(2)预测编码
通过去除相邻像素之间的相关性和冗余性,只对新的信息进行编码。常用的有差分脉冲编码调制。
(3)变换编码
对给定图像采用某种变换,使得大量的信息能用较少的数据表示。通常采用的变换包括:离散傅里叶变换(DET),离散余弦变换(DCT)和离散小波变换(DWT)。
(4) 其他方法
早期的编码,如混合编码,矢量量化,LZW算法。
近些年来也出现了很多新的压缩编码方法,如使用人工神经网络的压缩编码算法、分形、小波、基于对象的压缩编码方法、基于模型的压缩编码算法等。
数据冗余定义:
数据是用来表示信息的。如果不同的方法为表 示给定量的信息使用了不同的数据量,那么使用 较多数据量的方法中,有些数据必然是代表了无用的信息,或者是重复地表示了其它数据已表示的信息,压缩是通过去除一个或三个基本数据冗余达到的。
如果n1和n2代表两个表示相同信息的数据集合 中所携载信息单元的数量,则n1表示的数据集合 的相对数据冗余 R D R_D RD定义为:
C R C_R CR为压缩率,定义为:
相对数据冗余和压缩率的一些特例:
n1相对于n2 | C R C_R CR | R D R_D RD | 对应的情况 |
---|---|---|---|
n1=n2 | 1 | 0 | 第1种表达相对第2种表达不含冗余数据 |
n1>>n2 | →∞ | →1 | 第1种数据集合包含相当多的冗余数据 |
n1<<n2 | →0 | →∞ | 第2种数据集合包含相当多的冗余数据 |
三种基本的数据冗余
- 编码冗余
如果一个图像的灰度级编码,使用了多于实 际需要的编码符号,就称该图像包含了编码冗余。
举例:黑白二值图像编码
如果用8位表示该图像的像素,我们就说该图像存在编码冗余,因为该图像的像素只有两个灰度,用一位即可表示。
图像直方图的定义:
k=0,1,2,…,L-1
n k n_k nk是第k个灰度级在图像中出现的次数,n是图像 中的像素总数,L是灰度级数。
如果用于表示每个 r k r_k rk值的比特数为l( r k r_k rk), 则表达每个像素所需的平均比特数为:
不同的编码方法可能会有不同的Lavg,由此引出两种编码冗余。
- 相对编码冗余:Lavg大的编码相对于Lavg小的编码就存在相对于编码冗余。
- 绝对编码冗余:使Lavg > Lmin的编码就存在绝对编码冗余。
- 像素间冗余
因为一幅图像的像素间,或是图像序列中相邻图像像素间的相关性而造成的冗余。对于一幅图像,很多单个像素对视觉的贡献是冗余的。它的值可以通过与它相邻的像素值为基础进行预测。
例子:原图像数据:234 223 231 238 235
压缩后数据:234 -11 8 7 -3
- 心理视觉冗余
人眼感觉到的图像区域亮度不仅取决于该区域的反射光,例如根据马赫带效应,在灰度值 为常数的区域也能感觉到灰度值的变化,这是由于眼睛对所有视觉信息感受的灵敏度 不同。在正常视觉处理过程中各种信息的相对重要程度不同,有些信息在通常的视觉过程中与另外一些信 息相比并不那么重要,这些信息被认为是心理视觉冗余的,去除这些信息并不会明显降低图像质量。
由于消除心理视觉冗余数据会导致一定量信息的丢失,所以这一过程通常称为量化。心理视觉冗余压缩是不可恢复的,量化的结果导致 了数据有损压缩。
(一) 背景
正如从图 8-1 中可以看到的那样,图像压缩系统是由两个截然不同的结构块组成的:编码器和解码器。

信道:如Internet、广播、通讯、可移动介质。
信源编码器:减少或消除输入图像中的编码冗余、像素间冗余及心理视觉冗余。
转换器:对输入的数据进行转换,以改变数据的描述形式,减少或消除像素间的冗余(可逆)。
量化器:根据给定的保真度准则降低转换器输出的精度,以进一步减少心理视觉冗余(不可逆)。
符号编码器:根据使用的码字为量化器输出和映射 输出创建码字,减少编码冗余。
并不是每个图像压缩系统都必须包含这3种操作,如进行无误差压缩时,必须去掉量化器。
信道编码器和信道解码器:信道是有噪声的或易产生误差时,信道编码器和信道解码器对整个编解码过程非常重要。由于信源编码器的输出数据一般只有很少的冗余,所以它们对输出噪声很敏感。

符号解码器:进行符号编码的逆操作。
反向转换器:进行转换器的逆操作。
因为量化操作是不可逆的,所以信源解码器中没有对量化的逆操作。
图像f(x,y)被送入编码器,编码器从输入数据建立一组符号,并用它们描述图像。 如果令n1和n2分别表示原始及编码后的图像携带的信息单元的数量(通常是比特),达到的压缩可以通过压缩比,用数字进行量化:
可能是 10(或 10:1)压缩比,这指出在压缩过的数据集中,对于每 1 个单元,原始图像有 10 个携带信息的单元(如比特)。在MATLAB 中,用于表示两幅图像文件或变量的比特数的比率可通过下面的 M-函数计算出来:
function cr = imratio(f1, f2)
error(nargchk(2, 2, nargin)); % Check input arguments
cr = bytes(f1) / bytes(f2); % Compute the ratio
function b = bytes(f)
if ischar(f)
info = dir(f); b = info.bytes;
elseif isstruct(f)
% MATLAB's whos function reports an extra 124 bytes of memory
% per structure field because of the way MATLAB stores
% structures in memory. Don't count this extra memory; instead,
% add up the memory associated with each field.
b = 0;
fields = fieldnames(f);
for k = 1:length(fields)
elements = f.(fields{k});
for m = 1:length(elements)
b = b + bytes(elements(m));
end
end
else
info = whos('f'); b = info.bytes;
end
JPEG 编码图像 sun.jpg的压缩可以通过以下命令进行计算:
r=imratio(imread('D:\数字图像处理\第八章学习\sun.jpg'),'D:\数字图像处理\第八章学习\sun.jpg');

观察并运用压缩的(也就是编码后的)图像,必须把图像发送到解码器(见图 8-1), 这里产生重建的输出图像f^(x,y)。一般而言, f^(x,y)可能是,也可能不是f(x,y)的精确表示。如果是, 系统就是无误差的、信息保持的或无损的;如果不是,在重建图像中会有一部分失真。对于后一种情况,被称为有损压缩,可以对x和y的任意取值在f(x,y)和f^(x,y)之间定义误差e(x,y):
所以,两幅图像间的总误差为:
同时,f(x,y)和f^(x,y)之间的均方根(root-mean-square,rms)误差erms是 MxN数组的均方误差的平均值的平方根:
(二) 编码冗余
前面讲过编码冗余,那自然会有如下问题:表示一幅图像的灰度级到底需要多少比特?也就是说,是否存在在不丢失信息的条件下,能足够充分描绘一幅图像的最小数据量?信息论提供了回答这一相关问题的数学框架。
信息测量:
对一个随机事件E,如果它的出现概率是 P(E),那么它包含的信息:
I(E)称为E的自信息。如果P(E)=1(即事件总发 生),那么I(E)=0。
信息信道:

信道是连接信源和用户的物理媒介。它可以是电话线、无线传播、导线或internet。
信源:
- A={ a 1 a_1 a1, a 2 a_2 a2