数字图像处理第8章——图像压缩
8.图像压缩
8.1 压缩的原因和方法
为什么需要压缩
分辨率为1000*1000的图片,播放两小时,所需比特数是非常大的。
-
编码冗余:图一中,只要四种颜色,如果用8bit来表示可能性,就是一种浪费
-
空间和时间冗余:图二中,一条线上的灰度值是一样的,假设某个灰度值为128,图片的长度有10000个像素点,那么就是要存储10000个128
-
不相关信息:图三中,所有的灰度值都是接近于某个值,但人的肉眼其实看不出这么细微的差异。
8.1.1 编码冗余
平均每个灰度值占用 : 0.25 × 2 + 0.47 × 1 + 0.25 × 3 + 0.03 × 3 = 1.81 b i t 压缩比 : C R = 8 1.81 = 4.42 多余部分占比 : R D = 8 − 1.81 8 = 0.774 平均每个灰度值占用:0.25\times2+0.47\times1+0.25\times3+0.03\times3=1.81 bit\\ 压缩比:C_R=\frac{8}{1.81}=4.42\\ 多余部分占比:R_D=\frac{8-1.81}{8}=0.774 平均每个灰度值占用:0.25×2+0.47×1+0.25×3+0.03×3=1.81bit压缩比:CR=1.818=4.42多余部分占比:RD=88−1.81=0.774
8.1.2 空间冗余和时间冗余
可以用坐标的形式表示:(灰度值,位置),灰度值是从0-255,需要8bit;这幅图是256*256像素,说明位置有256种,需要8bit
压缩比:
C
R
=
256
×
256
×
8
(
8
+
8
)
×
256
=
128
压缩比:C_R=\frac{256\times 256\times 8}{(8+8)\times 256}=128\\
压缩比:CR=(8+8)×256256×256×8=128
8.1.3不相关的信息
压缩比: C R = 256 ∗ 256 ∗ 8 8 = 65.536 压缩比:C_R=\frac{256*256*8}{8}=65.536 压缩比:CR=8256∗256∗8=65.536
8.1.4 图像信息的度量
当面对一组概率时,使用霍夫曼编码有时候并不比使用等长编码好得多,所以在构建霍夫曼码之前,我们需要知道是否需要使用霍夫曼编码来提高效率,这就要通过计算熵(Entropy,用H表示)来得到答案。
所有符号的概率乘以该概率以
2
为底的对数对所有乘积求和再取负数
H
=
−
∑
s
y
m
b
o
l
s
p
(
s
)
log
2
p
(
s
)
所有符号的概率乘以该概率以2为底的对数 对所有乘积求和 再取负数 \\ H=-\sum_{symbols} p(s)\log_2p(s)
所有符号的概率乘以该概率以2为底的对数对所有乘积求和再取负数H=−symbols∑p(s)log2p(s)
以8.1.1的例子进行求和:
H
=
−
(
0.25
×
log
2
0.25
+
0.47
×
log
2
0.47
+
0.25
×
log
2
0.25
+
0.03
×
log
2
0.03
)
=
1.6614
H=-(0.25\times\log_20.25+0.47\times\log_20.47+0.25\times\log_20.25+0.03\times\log_20.03)\\ =1.6614
H=−(0.25×log20.25+0.47×log20.47+0.25×log20.25+0.03×log20.03)=1.6614
香农第一定理提到,我们可以渐渐逼近这个平均编码长度 ,也就是理想的平均码长。
8.1.5 保真度准则
- 客观保真度准则
e r m s = [ 1 M N ∑ x = 0 M − 1 ∑ y = 0 N − 1 [ f ^ ( x , y ) − f ( x , y ) ] 2 ] 1 / 2 f ^ ( x , y ) 是对输入图像 f ( x , y ) 的压缩,再解压缩后的结果 e_{rms}=\big[\frac{1}{MN}\sum_{x=0}^{M-1}\sum_{y=0}^{N-1}[\hat f(x,y)-f(x,y)]^2\big]^{1/2}\\ \hat f(x,y)是对输入图像f(x,y)的压缩,再解压缩后的结果 erms=[MN1x=0∑M−1y=0∑N−1[f^(x,y)−f(x,y)]2]1/2f^(x,y)是对输入图像f(x,y)的压缩,再解压缩后的结果
- 主观保真度准则
S N R r m s = ∑ x = 0 M − 1 ∑ y = 0 N − 1 f ^ ( x , y ) 2 ∑ x = 0 M − 1 ∑ y = 0 N − 1 [ f ^ ( x , y ) − f ( x , y ) ] 2 SNR_{rms}=\frac{\sum_{x=0}^{M-1}\sum_{y=0}^{N-1}\hat f(x,y)^2}{\sum_{x=0}^{M-1}\sum_{y=0}^{N-1}[\hat f(x,y)-f(x,y)]^2} SNRrms=∑x=0M−1∑y=0N−1[f^(x,y)−f(x,y)]2∑x=0M−1∑y=0N−1f^(x,y)2
8.1.6 图像压缩模型
先经过映射器,把像素点变得更容易压缩,这就需要映射变换(傅里叶变换,实际就算余弦变换),一些映射变换是发生在空间域上,依据相邻的像素进行变换 。
接着是量化,量化是引入错误的主要原因 ,它引进了一些易于压缩的东西,但是也限制了
对图像的精确重构,所以量化会引入误差(具体看2.4部分)。
最后一个步骤是利用符号编码器编码,。现在我已经完成了映射变换和量化,有了一些数值,我需要的是把这些数据传输给另一边的接收器,然后一旦你压缩了图像,你就得到了一个压缩过的文件,这就是编码器。
解码器获取到图像后会将其解码,解码器并不会进行量化,因为量化和编码都已经做过了,解码器可能只是进行逆运算,比如说重新乘上2,然后进行逆映射变换,就可以得到图像。
8.1.7 图像格式、容器和压缩标准
当我把相机中保存的一张图像,发送给电脑时,那么存储照片的方法必须一致,需要进行兼容,这就是有如此多的压缩标准的原因。
8.2一些基本的压缩方法
8.2.1霍夫曼编码
平均长度为:
0.06
×
5
+
0.04
×
5
+
0.1
×
4
+
0.1
×
3
+
0.3
×
2
+
0.4
×
1
=
2.2
0.06\times5+0.04\times5+0.1\times4+0.1\times3+0.3\times2+0.4\times1=2.2
0.06×5+0.04×5+0.1×4+0.1×3+0.3×2+0.4×1=2.2
熵:
H
=
−
(
0.4
×
log
2
0.4
+
0.3
×
log
2
0.3
+
0.1
×
log
2
0.1
+
0.1
×
log
2
0.1
+
0.06
×
log
2
0.06
+
0.04
×
log
2
0.04
)
=
1.809
H=-(0.4\times\log_20.4+0.3\times\log_20.3+0.1\times\log_20.1+0.1\times\log_20.1+\\0.06\times\log_20.06+0.04\times\log_20.04)=1.809
H=−(0.4×log20.4+0.3×log20.3+0.1×log20.1+0.1×log20.1+0.06×log20.06+0.04×log20.04)=1.809
例:右图为直方图,横坐标为灰度值,纵坐标对应出现的次数。
平均比特长度 = 7.428 b i t s / p i x e l 压缩比: C R = 8 7.428 = 1.077 冗余比: R D = 8 − 7.428 8 = 0.0715 平均比特长度=7.428 bits/pixel\\ 压缩比:C_R=\frac{8}{7.428}=1.077\\ 冗余比:R_D=\frac{8-7.428}{8}=0.0715 平均比特长度=7.428bits/pixel压缩比:CR=7.4288=1.077冗余比:RD=88−7.428=0.0715
8.2.2 Golomb 编码
当被表示的证书具有概率质量函数(PMF)的几何分布时
P
(
n
)
=
(
1
−
p
)
p
n
其中
0
<
p
<
1
P(n)=(1-p)p^n\\ 其中0<p<1
P(n)=(1−p)pn其中0<p<1
概率质量函数(PMF)是对离散随机变量而言的
几何分布
8.2.3 算术编码
算术编码生成的是非快码。
-
首先有四个符号源,且有一小段消息序列,最开始把四个符号源按概率标识在[0,1)区间中,
-
第一个消息为a1,所以把a1的[0,0.2)区间放大
-
第二个消息为a2,所以把a2在[0,0.2)所占的[0.04,0.08)放大
-
第三个消息为a3,所以把a3在[0.04,0.08)所占的[0.056,0.072)放大
-
第四个消息还是a3,所以把a3在[0.056,0.072)所占的[0.0624,0.0688)放大
-
第五个消息为最后一个编码,最终区间为[0.0624,0.0688),可以在这个区间内任选一个小数作为最终的编码小数,文中选择了0.068
-
-
使用了3个十进制数字来表示这一小段消息序列(用到了五个信源符号),平均每个信源符号用了0.6个十进制数字。(熵为0.58)
-
但有两个因素会使得编码性能无法达到界限(无限接近0.58)
- 为了将一个消息与其他消息分开,需要增加消息结束指示符
- 所用算法的精度是有限的
8.2.4 LZW编码
8.2.5 行程编码
8.2.6 基于符号的编码
一幅图像被表示为多幅频繁发生的子图像的集合,称为符号。每个符号以三元组(行,列,符号在字典的位置)的形式表现在符号字典中。
压缩比 = 9 × 51 × 1 9 × 7 + 6 × 7 + 6 × 6 + 3 × 6 × 8 = 1.61 压缩比=\frac{9\times 51 \times 1}{9\times7+6\times7+6\times6+3\times6\times8}=1.61 压缩比=9×7+6×7+6×6+3×6×89×51×1=1.61
8.2.7比特平面编码
把一幅多级图像分解为一系列二值图像
8.2.8 块变换编码
JPEG首先得到一张图片,把它分割成n*n份,然后进行映射变换(离散余弦变换 ),JPEG采用的量化方式,会将值除以某个数然后取整,不同的除数会产生不同的版本,接着就要进行符号编码(霍夫曼编码)。
考虑大小为n * n的子图像g(x,y),其离散变换T(u,v)和离散反变换可表示为:
T
(
u
,
v
)
=
∑
x
=
0
n
−
1
∑
y
=
0
n
−
1
g
(
x
,
y
)
r
(
x
,
y
,
u
,
v
)
g
(
x
,
y
)
=
∑
x
=
0
n
−
1
∑
y
=
0
n
−
1
T
(
u
,
v
)
r
(
x
,
y
,
u
,
v
)
x
,
y
,
u
,
v
=
0
,
1
,
2
,
.
.
.
,
n
−
1
T(u,v)=\sum_{x=0}^{n-1}\sum_{y=0}^{n-1}g(x,y)r(x,y,u,v)\\ g(x,y)=\sum_{x=0}^{n-1}\sum_{y=0}^{n-1}T(u,v)r(x,y,u,v)\\ x,y,u,v=0,1,2,...,n-1
T(u,v)=x=0∑n−1y=0∑n−1g(x,y)r(x,y,u,v)g(x,y)=x=0∑n−1y=0∑n−1T(u,v)r(x,y,u,v)x,y,u,v=0,1,2,...,n−1
式中的r(x,y,u,v)和s(x,y,u,v)分别称为正变换核(基函数)和反变换核(基图像)
最知名的一对变换核如下,代入就可得到离散傅里叶变换对。
r
(
x
,
y
,
u
,
v
)
=
e
−
j
2
π
(
u
x
+
v
y
)
n
s
(
x
,
y
,
u
,
v
)
=
1
n
2
e
j
2
π
(
u
x
+
v
y
)
n
r(x,y,u,v)=e^{-\frac{j2\pi(ux+vy)}{n}}\\ s(x,y,u,v)=\frac{1}{n^2}e^{\frac{j2\pi(ux+vy)}{n}}
r(x,y,u,v)=e−nj2π(ux+vy)s(x,y,u,v)=n21enj2π(ux+vy)
图像压缩中更常用到的变换是离散余弦变换(DCT),它的变换对如下:
r
(
x
,
y
,
u
,
v
)
=
s
(
x
,
y
,
u
,
v
)
=
α
(
u
)
α
(
v
)
c
o
s
[
(
2
x
+
1
)
u
π
2
n
]
c
o
s
[
(
2
y
+
1
)
v
π
2
n
]
α
(
u
)
=
{
1
/
n
,
u
=
0
2
/
n
,
u
=
1
,
2
,
.
.
.
,
n
−
1
r(x,y,u,v)=s(x,y,u,v)=\alpha(u)\alpha(v)cos\big[\frac{(2x+1)u\pi}{2n}\big]cos\big[\frac{(2y+1)v\pi}{2n}\big]\\ \alpha(u)= \begin{cases} \sqrt{1/n}, & u=0 \\ \sqrt{2/n}, & u=1,2,...,n-1 \\ \end{cases}
r(x,y,u,v)=s(x,y,u,v)=α(u)α(v)cos[2n(2x+1)uπ]cos[2n(2y+1)vπ]α(u)={1/n,2/n,u=0u=1,2,...,n−1
8.2.9 预测编码
通过消除紧邻像素在空间和时间上的冗余来实现的,它仅对每个像素中的新信息进行提取和编码。
-
无损预测编码
- 离散时间输入信号f(x)的连续样本被传入编码器,预测器根据指定数量的以往样本来生成每个样本的预期值。然后,预测器的输出被四舍五入为最接近的整数,并使用这个整数来形成差值或预测误差。
- 离散时间输入信号f(x)的连续样本被传入编码器,预测器根据指定数量的以往样本来生成每个样本的预期值。然后,预测器的输出被四舍五入为最接近的整数,并使用这个整数来形成差值或预测误差。
-
有损预测编码
- 代替无误差编码器的取最接近整数功能的量化器被插入到符号编码器和形成预测误差的那一点之间。该量化器将预测误差映射为有限范围内的输出,它确定了压缩量和产生的失真量。
- 代替无误差编码器的取最接近整数功能的量化器被插入到符号编码器和形成预测误差的那一点之间。该量化器将预测误差映射为有限范围内的输出,它确定了压缩量和产生的失真量。
8.2.10 小波编码
对图像的像素解除相关的变换系数进行编码比对原图像像素本身进行编码的效率更高。如果小波函数将大多数重要的可视信息包装到少量系数中,则剩下的系数可被粗略地量化或截取为零,而图像几乎没有失真。
因为小波变换的计算效率和固有的局部性(即小波的基函数在宽度上是有限的),对原图像进行细分是没有必要的。细分步骤的取消可以消除块效应,这种效应正是以DCT为基础的近似图像在高压缩比下的特性。
8.3 数字图像水印
阻止非法复制的方法之一是把称为水印的一 条或多条信息项插入潜在的易受攻击的图像,在这种方法中,水印不能从图像本身分离出来。如同水印图像的整体部分那样,它们以各种方法来保护所有者的权益,包括: .
1.版权识别。当所有者的权益被侵犯时,数字水印可提供作为所有权证据的信息。
2.用户识别或指纹。合法用户的身份可以在水印中编码,并用于识别非法复制源。
3.著作权认定。水印的存在可保证- -幅图像不被篡改一假定 水印被设计成对图像的任何修改都将破坏水印。
4.自动监视。水印可以通过系统来监测,系统可在任何时间和地点跟踪所使用的图像(可搜索放在Web网页上的图像)。对于征收版税和/或非法用户定位监测很有用。
5.复制保护。水印可制定使用和复制图像的规则(如对DVD播放器)。