第八章:图像压缩

目录

1 图像压缩基础

1.1 编码冗余

1.2 空间和时间冗余

1.3 不相关的信息

1.4 图像信息的度量

1.5 保真度准则

1.5.1 客观保真度准则

 1.5.2 主观保真度准则

1.6 图像压缩模型

2 无损压缩方法

2.1 霍夫曼编码

2.2 Golomb编码

2.3 算术编码

2.4 词典编码(LZW编码)

2.5 行程编码

2.6 比特平面编码

2.7 块变换编码

2.7.1 Walsh-Hadamard变换(WHT)

2.7.2 离散余弦函数变换(DCT)

2.8 预测编码

2.8.1 无损预测编码

2.8.2 有损预测编码

1 图像压缩基础

图像压缩所解决的问题是尽量减少表示数字图像时需要的数据量。减少数据量的基本原理是除去其中多余的数据。

术语“数据压缩”指减少表示给定信息的量所需的数据量。数据和信息之间必须给予明确的区分。数据是信息传递的手段,对相同数量的信息可以以不同数量的数据表示。

数据冗余是数字图像压缩的主要问题。如果b和b{}'代表两个表示相同信息的数据集合中所携载的信息单元的数量,则第一个数据集合(用b表示的集合)的相对数据冗余R可以定义为

R=1-\frac{1}{C}

这里C通常称为压缩率,定义为

C=\frac{b}{b{}'}

在数字图像压缩中,可以确定三种基本的数据冗余并加以利用:

  • 编码冗余
  • 像素间冗余
  • 心理视觉冗余

1.1 编码冗余

对于图像来说,可以假设一个离散随机变量表示图像灰度级,并且每个r_k出现的概率为P_r(r_k)。

P_r(r_k)=\frac{n_k}{MN},k=0,1,2, ,L-1

这里L是灰度级数,n_k是第k个灰度级在图像中出现的次数,n是图像中的像素总数。如果用于表示每个r_k值的比特数为l(r_k),则表达每个像素所需的平均比特数为:

L_{avg}=\sum_{k=0}^{L-1}l(r_k)P_r(r_k)

就是说,将表示每个灰度级所用的比特数和灰度级出现的概率相乘,将所得乘积相加后得到不同灰度级值的平均码字长度。根据无失真编码定理,如果某种编码的平均比特数越接近熵,则编码冗余越小。

1.2 空间和时间冗余

在对应的二维灰度阵列中:

  1. 所有256种灰度都是等概率的。图像的直方图是均匀的。
  2. 因为每条线的灰度是随机选择的,在垂直方向上,每条线的像素彼此是独立的。
  3. 因为沿每条线的像素是相同的,因此在水平方向上它们是最大相关的(完全互相依赖)。

像素间冗余是一种与像素间相关性有直接联系的数据冗余。

对于任何给定像素的值可以根据与这个像素相邻的像素进行适当的预测,所以由单个像素所携载的信息相对较少。单一像素对于一幅图像的多数视觉贡献是多余的,他的值可以通过以与其相邻的像素值为基础进行推测。

为了减少图像中的像素间冗余,通常用于人类观察和解释的二位像素阵列必须变换为更有效的形式。例如,相邻像素之间的差异可以用来描绘图像。这种类型变换被认为是映射。如果初试图像元素可以根据经过变换的数据集合进行重构,则称这些映射为可逆映射。

1.3 不相关的信息

眼睛对所有视觉信息感受的灵敏度不同。在正常的视觉处理过程中各种信息的相对重要程度不同。那些不十分重要的信息称做心理视觉冗余。这些冗余在不会削弱图像感知质量的情况下可以消除。

心理视觉冗余来自先前讨论的冗余的基本差异。与编码冗余和像素间冗余不同,心理视觉冗余是与真实的或可定量的视觉信息相联系的。因为对于正常的视觉处理过程,信息本身不是本质,所以消除心理视觉冗余是可能的。

消除心理视觉冗余数据会导致一定量信息的丢失,通常是在称为“量化”的过程。使用这个过程,可以大大改善图像的表现效果。

1.4 图像信息的度量

一种解释编码冗余的方法是运用信息论的相关知识。
信息论的基本前提是信息的产生可以被模拟为一个概率过程,这个过程可以用与我们直觉相一致的方法度量。依照这个假设,发生概率为P(E)的随机事件E被认为是包含:

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

 的信息单元。如果底数选择为2,信息单元的单位是比特。量I(E)通常被称为E的自信息。一般来讲,归因于事件E的自信息量与E的概率的关系是反向的。

如果一个信源A,可能发出的符号集{a1,a2,…,aJ}集合中的元素表示为aj,称为符号或字符。信源产生符号的时间概率是P(aj),且有:

\sum_{j=1}^{J}P(a_j)=1

信源输出的平均信息,表示为为H(z)

H(z)=-\sum_{j=1}^{J}P(a_j)logP(a_j)

这个量被称为信源的不定度或嫡。它定义了观察单个信源输出得到的平均信息量。

嫡的性质:

  • (1)嫡是一个非负数,即总有H(z)>0。
  • (2)当其中一个符号a_j的出现概率p(a_j)=1时,其余符号a_i(i≠j)的出现概率p (a_ji) =0,H(z)=0。
  • (3)当各个a ,出现的概率相同时,则最大平均信息量为-logp(a)。
  • (4)嫡值总有H(z)≤-logp (a).

无干扰编码定理:
可以证明,在无干扰的条件下,存在一种无失真的编码方法,使编码的平均长度L与信源的嫡H(s)任意地接近,即L=I(s)+\varepsilon,其中\varepsilon为任意小的正数,但以l(s)为其下限,即L≥H(s)。

1.5 保真度准则

评估保真度的两类准则是:

  • (1)客观保真度准则
  • (2)主观保真度准则。

当信息损失的程度可以表示成初始图像或输入图像以及先被压缩而后被解压缩的输出图像的函数时,就说这个函数是基于客观保真度准则的。主观评估是通过向典型的观察者显示典型的解压缩图像并将他们的评估结果进行平均得到的。

尽管客观保真度准则提供了一种简单便捷的评估信息损失的机理,但大部分解压缩图像最终还是由人来进行观察的。所以,使用观察者的主观评估衡量图像品质通常是更为适当的。

1.5.1 客观保真度准则

均方根误差

令f(x,y)表示输人图像,并令\widehat{f}(x,y)表示由对输入先压缩后解压缩得到的f (x,y)的估计量或近似量。两幅图像的总体误差为:

\sum_{x=0}^{M-1}\sum_{y=0}^{N-1}[\widehat{f}(x,y)-f(x,y)]

f(x,y)和\widehat{f}(x,y)之间的均方根误差e_{rms}则成为在M×N像素上平方误差平均值的平方根,或写为:

 e_{rms}=[\frac{1}{MN}\sum_{x=0}^{M-1}\sum_{y=0}^{N-1}[\widehat{f}(x,y)-f(x,y)]^2]^\frac{1}{2}

均方信噪比

如果认为子\widehat{f}(x,y)堤初始图像和噪声信号e(x,y)的和,则输出图像的均方信噪比用SNR。定义为:

SNR_{ms}=\frac{\sum_{x=0}^{M-1}\sum_{y=0}^{N-1}\widehat{f}(x,y)^2}{\sum_{x=0}^{M-1}\sum_{y=0}^{N-1}[\widehat{f}(x,y)-f(x,y)]^2}

 1.5.2 主观保真度准则

尽管客观保真度准则提供了一种简单便捷的评估信息损失的机理,但大部分解压缩图像最终还是由人来进行观察的。所以,使用观察者的主观评估衡量图像品质通常是更为适当的。

1.6 图像压缩模型

图像压缩系统是由两个不同的功能部分组成的:一个是编码器一个是解码器。编码器执行压缩操作,解码器执行解压缩操作。如果是f(x,y)的精确复制品,则压缩系统被称为无误差的、无损的或信息保持的压缩系统;如果不是f(x,y)的精确复制品,则重建的输出图像就会失真,并且压缩系统称为有损压缩系统。

图1.1  图像压缩系统

信源编码器的任务是减少或消除输入图像中的编码冗余、像素间冗余或心理视觉冗余。特定的应用和与之相连的保真度准则要求规定了在给定情况下使用的最佳编码方法。

信源解码器包含一个符号解码器和一个反向转换器。这些模块的运行次序和编码器的符号编码器和转换模块的操作次序相反。因为量化过程导致了不可逆的信息损失,反向量化器模块不包含在通常的信源解码器模型中

2 无损压缩方法

2.1 霍夫曼编码

霍夫曼编码对每个信源符号生成可能的最小数量的编码符号。

霍夫曼编码的步骤:

  1. 将需要考虑的符号概率进行排序
  2. 将具有最低概率的符号联结为一个单一的符号,用这个符号在信源化简的下一步中替代联结之前的两个符号。
  3. 重复1,2步骤直到信源只有两个符号
  4. 对每个化简后的信源进行编码,从最小的信源开始,一直工作到原始的信源。

信源化简的过程如下图所示: 

图2.1  霍夫曼化简

 霍夫曼编码过程:

图2.2  霍夫曼编码过程

使用霍夫曼编码需要注意的问题:

  1. 霍夫曼编码是可变长度码,因此很难随意查找或调用压缩文件中的内容,然后再译码。
  2. 霍夫曼编码没有错误保护功能,如果码串中有错误,哪怕仅是1位错误都可能造成后边的译码错误,这种现象称为错误传播。

2.2 Golomb编码

指数衰减概率分布输入的非负整数编码

给定一个非负整数n和一个正整数除数m>0后,表示为G_m(n)的n关于m的Golomb编码是商\left \lfloor n/m \right \rfloor的一元编码和n mod m的二进制表示的并集。

G_m(n)构建如下:

  1. 形成商\left \lfloor n/m \right \rfloor的一元编码
  2. k=\left \lceil log_2m \right \rceil,c=2^k-m,r=n mod m,并计算截短的余数r',令其满足

  3. 连接步骤1和步骤2的结果

 整数0-9的几种Golomb码:

图2.3  Golomb编码表

2.3 算术编码

算术编码是一种非块码,信源符号和码字之间是不存在一一对应的关系的。

算术编码是给整个信源符号序列分配一个单一的算术码字。这个码字本身定义了一个介于0到1之间的实数。因为这种技术不像霍夫曼编码方法那样要求将每个信源符号转换成整数的编码,所以这种技术达到了由无噪声编码准则所设定的界限。

算术编码用到两个基本的参数:符号概率和它的编码间隔。信源符号的概率决定了压缩编码的效率,也决定了编码过程中信源符号的间隔,而这些间隔包含在0到1之间。编码过程中间隔决定了符号压缩后的输出。

算术编码器的编码过程可用下面的例子加以解释:
假设信源可能发出的符号为{a_1,a_2,a_3,a_4},这些符号的概率为{0.2,0.2,0.4,0.2},

图2.3  算术编码示例

 求符号序列“a_1,a_2,a_3,a_3,a_4,”的算术编码。

符号a_1与子区间[0,0.2)相联系。因为它是被编码的消息的第一个符号,所以该消息间隔开始时被缩窄为[0, 0.2)。这样,在图2.4中,区间[0,0.2)就被扩展到该图形的全高度,且其端点用该窄区间的值来标注。然后,这个缩窄的区间根据原始信源符号的概率进行细分,并继续对下一个消息符号进行这种处理。采用这种方式,符号a_2将该子区间变窄为[0.04,0.08),符号a_3进一步将该子区间变窄为[0.056,0.072),依次类推。必须保留最后的消息符号,以作为特定的消息结束指示符,它将子区间变窄为[0.067 52,0.068 8)。

图2.4  算术编码过程

最终的编码序列在[0.067 52,0.068 8)子区间内的任何数字,(如0.068)都可以用来表示该消息。

在算数编码中需要注意的几个问题:

  1. 需要有一定的方法指示解码器停止解码。例如增加一个消息结束指示符。
  2. 由于计算机的精度不可能是无限长,溢出是一个要考虑的问题。算术编码的实际实现中通过引入尺度策略和舍入策略解决这个问题。
  3. 在计算机中算术编码的结果最终使用二进制数来表示的,故算术编码也是一种对错误很敏感的编码方法,如果有以为发生错误就会导致整个消息译错。

2.4 词典编码(LZW编码)

词典编码不需要了解有关编码符号的出现的概率。词典编码的根据是数据本身包含有重复代码这个特性。例如文本文件和图像就具有这种特性。

词典编码大致分为两类:

第一类词典编码的想法是企图查找正在压缩的字符序列是否在以前输入的数据中出现过,然后用已经出现的字符串代替重读的部分,他的输出仅仅是指早期出现过的字符串的“指针”。这一类词典编码所指的“词典”是指用以前处理过的数据来表示编码过程中遇到的重复部分。

第二类词典压缩算法的思想是企图从输入的数据中创建一个“短语词典”,它可以是任意信源符号的组合。编码数据过程中当遇到已经在词典中出现的“短语”时,编码器就输出这个词典中的短语的索引号。

LZW编码是一种处理图像像素间冗余的无误差压缩技术,属于第二类的词典编码,对信源符号的可变长度序列分配固定长度码字,且不需要了解有关被编码符号的出现的概率。

在编码过程的开始阶段,先构建一个包含被编码信源符号的码书或字典。对于8比特单色图像,字典中的前256个字被分配给灰度值0,1,2,…,255.当编码器顺序地分析图像像素时,不在字典中的灰度序列被放置在算法确定的位置(即下一个未用的位置)。

对大小为4x4的8比特图像LZW编码,初始字典如下图所示,

编码过程如下图所示:

 最后的编码序列为:256,257,258,259,260,261,262,263,264

2.5 行程编码

行程编码:沿行(或列)重复灰度的图像,通常可用相同灰度的行程表示为行程对来压缩,其中每个行程对指定一个新灰度的开始和具有该灰度的连续像素的数量。

压缩是通过消除空间冗余的一种简单形式(即一组相同的灰度)来实现的。当相同像素的行程较小(或没有)时,行程编码会导致数据扩展。

一维行程编码:

对常数区域进行编码的一种有效的替代方法是用一长度序列表示图像或位平面的每一行,这些长度描绘了对黑色和白色像素的连续行程。这种技术称为行程编码

决定行程长度值最通常的方法是:

(1)指定每一行第一次行程的值,

(2)假设每一行从白色行程开始,这次行程的长度可能实际上为0。

 二维行程长度编码:

一维行程长度编码概念很容易扩展得到各种二维编码过程。其中较为熟知的一种方法是相对地址编码(RAC)。这种方法是以记录每次黑色和白色行程开始和结束的二值转换的原理为基础的。

2.6 比特平面编码

可通过单独处理图像的比特平面的方法用于多于两级灰度的图像,称为比特平面编码的这种技术基于如下概念:把一幅多级(单色或彩色)图像分解为一系列二值图像。

一幅m比特的灰度图像具有的灰度级可以用以2为底的多项式进行表示,

a_{m-1}2^{m-1}+a_{m-2}2^{m-2}+...+a_{1}2^{1}+a_{0}2^{0}

基于这种性质,将这类图像分解为一个二值图像集的一种简单方法就是,将多项式的m个系数分离到m个1比特的位平面中。零级位平面是通过收集每个像素的a_0位生成的,而第m-1级位平面包含a_{m-1}比特或系数。

这种方法固有的缺点是图像在灰度级上稍有变化就会对位平面的复杂性产生显著的影响。例如如果一个亮度为127(01111111)的像素与一个亮度为128(10000000)的像素相邻,每个位平面将包含一个对应0到1的转换。

对它进行一定的改善:

一种可作为替代的分解方法(可以减少小的灰度级变化带来的影响)是使用格雷码。

m比特的格雷编码g_{m-1},...,g_2,g_1,g_0可以用下列方法计算得到

g_i=a_i\bigoplus a_{i+1}\begin{matrix} & 0\leq i\leq m-2 \end{matrix}

g_{m-1}=a_{m-1}

这种编码的唯一特性是连续码字只有1个比特位不同。

2.7 块变换编码

该技术把图像分成大小相等(如8×8)且不重叠的小块,并使用二维变换单独地处理这些块。在块变换编码中,用一种可逆线性变换(如傅里叶变换)把每个块或子图像映射为变换系数集合,然后,对这些变换系数进行量化和编码。对于大多数图像,大量系数都有较小的幅度值,并且可被粗糙地量化(或完全抛弃)而几乎不会产生多少图像失真。

在块变换编码系统中,解码器的执行步骤(除了量化函数以外)与编码器相反。编码器执行四种相对简单的操作:子图分解、变换、量化和编码。一幅N*N大小的输入图像首先被分解为n*n的子图像,这些子图像进而被变换生成(N/n)^2个子图像变换阵列。变换处理的目的是将每幅子图像中的像素进行相关分解,或用最少了的变换系数包含尽可能多的信息。在量化阶段有选择地消除或更粗略的量化带有最少信息的系数。这些系数对重构子图像质量的影响很小。

图2.5  块变换系统

通过对量化后的系数进行编码(通常使用变长编码结束编码过程。任何或所有的变换编码步骤都可以根据局部图像内容进行适应性调整,这称为自适应变换编码,而如果这些步骤对所有子图像都是固定的,则称为非自适应变换编码。

在给定的应用中选择特定的变换取决于可容忍的重构误差的大小和可用的计算资源。在变换系数的量化过程中(不是在变换阶段)实现了压缩。

考虑大小为n*n的图像f(x,y),该图像的正向离散变换T(u,v)可以用通常的关系表示:

\begin{matrix} T(u,v)=\sum_{x=0}^{n-1}\sum_{y=0}^{n-1}g(x,y)r(x,y,u,v) & u,v=0,1,...,N-1 \end{matrix}

f(x,y)可以同样使用一般的离散反变换计算得到:

\begin{matrix} f(x,y)=\sum_{u=0}^{n-1}\sum_{v=0}^{n-1}T(u,v)s(x,y,u,v) & x,y=0,1,...,N-1 \end{matrix}

r(x, y,u,v)和s(x, y, u,v)分别称为正向和逆向变换核函数。这两个函数也被称为基础函数或基础图像。

2.7.1 Walsh-Hadamard变换(WHT)

Walsh-Hadamard变换是一种在变换编码过程中同样很有用处的,而且计算上更简单的变换。这种变换是根据下列在函数上相同的核推导出来的:

g(x,y,u,v)=h(x,y,u,v)=\frac{1}{N}(-1)^{\sum_{i=0}^{n-1}b_i(x)p_{i}(u)+b_i(y)p_i(v)}

这里N=2^m。求表达式的指数之和是以2为模的算术运算,并且b_k(z)是z的二进制表达式的第k位(从右向左的)。例如,如果m=3且z=6(二进制值为110),则b_0(z)=0,b_1(z)=1,b_2 (z)=1。式中的p_i(u)使用下式计算:

2.7.2 离散余弦函数变换(DCT)

离散余弦函数变换(DCT)是图像压缩中最常用的一种变换。

r(x,y,u,v)=s(x,y,u,v)=a(u)a(v)cos[\frac{(2x+1)u\pi}{2n}]cos[\frac{(2y+1)v\pi}{2n}]

式中,

a(u)=\begin{cases} \sqrt{1/n} & \text{ if } u=0 \\ \sqrt{2/n} & \text{ if } u= 1,2,...,n-1 \end{cases}

对于a(v)的情况是类似的,

2.8 预测编码

现在我们转向一种更简单的压缩方法,这种方法不需要较大计算开销就可实现较好的压缩效果,并且可以是无误差的或有损的压缩。这种方法通常被称为预测编码,它是通过消除紧邻像素在空间和时间上的冗余来实现的,它仅对每个像素中的新信息进行提取和编码。一个像素的新信息定义为该像素的实际值与预测值之间的差。

2.8.1 无损预测编码

下图显示了一个无损预测编码系统的基本组成。该系统由一个编码器和一个解码器组成,编码器和解码器中均包含有一个相同的预测器。离散时间输入信号f(n)的连续样本被传入编码器,预测器根据指定数量的以往样本来生成每个样本的预期值。然后,预测器的输出被四舍五入为最接近的整数,表示为\widehat{f}(n),并使用这个整数来形成差值或预测误差

图 2.8.1  无损预测编码模型

有多种局部的、全局的和自适应的方法可以用于生成预测值。然而,在大多数情况下,预测是根据前m个像素的线性组合生成的。即,

\widehat{f}=round[\sum_{i=1}^{m}a_if(n-i)]

这里,m是线性预测器的阶,round是表示四舍五入或取最接近的整数的运算的函数,a_i(i-1,2,...,m)是预测系数。在一维线性预测编码中,上式可以写为:

\widehat{f}_n(x,y)=round[\sum_{i=1}^{m}a_if(x,y-i)]

2.8.2 有损预测编码

有损编码是以在图像结构的准确度上做出让步而换取压缩能力增加的概念为基础的。如果产生的失真(可能是明显可见的也可能不很明显)是可以容忍的,则压缩能力上的增加就是有效的。

有损预测的模型中增加一个数字量化器,这个量化器将预测误差映射成有限范围内的输出,表示为e_n,这个输出确定了与有损预测编码相联系的压缩和失真的量。

图2.8.2  无损预测模型

表示为\widehat{f}_n的反馈环的输入是过去预测函数和对应的量化误差产生的。

\widehat{f}_n=e_n+\widehat{f}_n

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值