图像压缩
基础知识
数据冗余
二维灰度阵列主要受以下三种类型的数据冗余影响:
- 编码冗余:可以参考ASCII码与哈夫曼码的区别,假设只用到了26个字母的一段话,那么ASCII码就存在编码冗余
- 空间与时间冗余:空间冗余可以理解为图片中相同的部分,时间冗余可以理解为视频中相同的帧
- 不相关的信息:一些无法被人眼识别或者容易被人眼忽略的信息
图像信息的度量
一个随机事件E,假设其发生的概率为
P
(
E
)
P(E)
P(E),那么其所包含的信息量为:
I
(
E
)
=
l
o
g
1
P
(
E
)
=
−
l
o
g
P
(
E
)
I(E) = log{\frac{1}{P(E)}}=-logP(E)
I(E)=logP(E)1=−logP(E)
其中
I
(
E
)
I(E)
I(E)表示所包含的信息量,如果log的底数为2时,那么
I
(
E
)
I(E)
I(E)的单位为比特。
信源是信息产生的来源。假定一个可能事件的离散集合
{
a
1
,
a
2
,
a
3
,
.
.
.
,
a
J
}
\{a_1,a_2,a_3,...,a_J\}
{a1,a2,a3,...,aJ},与该集合联系的概率为
{
P
(
a
1
)
,
P
(
a
2
)
,
P
(
a
3
)
,
.
.
.
,
P
(
a
J
)
}
\{P(a_1),P(a_2),P(a_3),...,P(a_J)\}
{P(a1),P(a2),P(a3),...,P(aJ)},则信源输出的平均信息称为该信源的熵,即:
H
=
∑
j
=
1
J
P
(
a
j
)
I
(
a
j
)
=
−
∑
j
=
1
J
P
(
a
j
)
l
o
g
P
(
a
j
)
H = \sum_{j=1}^JP(a_j)I(a_j) = -\sum_{j=1}^JP(a_j)logP(a_j)
H=j=1∑JP(aj)I(aj)=−j=1∑JP(aj)logP(aj)
根据上式,假如我们将一幅灰度图中的每一点视作上式中的 a j a_j aj,其概率分布可以观察直方图得出,那么就可以计算出整幅图像的信息熵。
香农第一定理
简单地说就是信息熵(信息量)/每个编码的信息量 小于等于 编码长度。
保真度准则
均方根误差(RMSE)是一种衡量观测值与模型预测值之间差异的度量。它是通过计算观测值与预测值之间的差的平方的均值,然后取平方根得到的。RMSE常用于评估预测模型的准确性,越小表示预测结果与观测值之间的差异越小。
均方根误差与标准差的区别在于,均方根误差要减去真实值,而标准差则是减去平均值。也就是说,标准差只能衡量离散程度,而均方根误差可以衡量偏离真实值的情况。
一些基本的压缩方法
哈夫曼编码
由哈夫曼树构造得来,略去不表
Golomb编码
Golomb编码的核心思想是通过使用两个部分来表示整数:商部分和余数部分。首先,将要编码的整数除以一个称为参数的正整数,得到商和余数。商部分直接以二进制表示,而余数部分则使用一种特殊的编码方法表示。这个特殊的编码方法可以根据问题的要求选择,最常用的是Golomb-Rice编码。
在Golomb-Rice编码中,余数部分由两部分组成:一个固定长度的前缀码和一个可变长度的后缀码。前缀码的长度由参数值决定,用于表示余数的高位。后缀码的长度由余数值决定,用于表示余数的低位。通常,后缀码采用二进制表示,但也可以选择其他编码方式,如自适应算术编码。
Golomb编码的优势在于对于出现频率较低的整数,其编码长度相对较短,而对于出现频率较高的整数,其编码长度较长。这使得Golomb编码在对稀疏或呈指数分布的数据进行压缩时具有很好的效果。此外,Golomb编码具有简单、无需构建码表等特点,使得编解码过程高效。
算术编码
算术编码是一种可变长度编码方法,用于对数据进行高效的压缩表示。与传统的固定长度编码方法(如霍夫曼编码)不同,算术编码可以将整个数据序列映射为一个单独的浮点数或小数,从而实现更高的压缩比。
算术编码的核心思想是利用符号概率统计和累积概率来构建编码表。对于要编码的数据序列,算术编码将每个符号映射到一个区间,该区间的长度与符号的概率相关。初始时,整个区间范围为0到1。
编码过程中,算术编码依次处理数据序列中的每个符号。根据符号的概率分布,它将当前区间划分为多个子区间,每个子区间的长度与对应符号的概率成比例。然后,根据当前要编码的符号,选择相应的子区间作为新的当前区间,并继续处理下一个符号。这样,随着符号的逐个编码,当前区间会越来越小,最终趋于一个极小的范围。
解码过程中,算术编码使用相同的编码表和概率分布进行反向计算。根据解码器收到的编码值,它将该值映射到原始的符号,并更新区间范围。通过不断缩小区间范围并逐个解码符号,最终可以还原原始的数据序列。
LZW编码
图像处理中的LZW编码通常用于对图像的索引颜色数据进行压缩,特别是在使用GIF图像格式时。在GIF图像中,图像数据由一组颜色索引值组成,这些索引值对应于一个颜色表,称为调色板。LZW编码被广泛应用于对这些颜色索引进行压缩,以减小文件大小。
LZW编码的图像处理过程与一般的LZW编码相似。它首先构建一个初始的字典表,包含所有可能的颜色索引。然后,遍历图像的颜色索引序列,并逐步构建新的索引序列。
编码过程中,LZW编码器将当前的颜色索引序列与已有的索引组合在一起,检查组合后的索引是否在字典表中已存在。如果组合后的索引在字典表中存在,继续读取下一个索引并继续组合。如果组合后的索引在字典表中不存在,就将之前的索引序列的编码输出,并将新的索引序列添加到字典表中。这个过程不断重复,直到所有的颜色索引被处理完。
解码过程中,LZW解码器使用与编码器相同的字典表来重建原始的颜色索引序列。解码器根据编码器输出的编码序列逐步恢复颜色索引,并将其输出。当遇到新的编码时,解码器将利用字典表中已有的索引序列和新的索引来生成新的索引序列,并添加到字典表中。
基于符号的编码
一幅图像是由一组较小的子图组成,然后这些子图被称为符号。再然后这些子图会出现在不同的位置,那么只需要记录子图以及子图的位置信息即可得到最后的编码。
比特平面编码
比特平面编码的基本思想是利用图像数据中的空间相关性和冗余性。在典型的灰度图像中,像素值通常可以表示为二进制形式,由8个比特位组成。比特平面编码将这8个比特位分别提取出来,并将每个比特位单独编码。因为图像中的连续像素通常在比特平面上具有较高的相关性,相邻像素的比特位可能存在较多的重复信息,所以通过针对每个比特位的编码方法可以实现数据的压缩。
预测编码
上图中上面的是编码器,下面的是解码器。
编码器:输入序列
f
(
n
)
f(n)
f(n),再经过预测器后会输出一个预测的序列,预测序列会与原本真实图像有误差,这个误差会进行压缩得到压缩后的序列。
解码器:将压缩后的序列解压缩,再加上
f
(
n
)
f(n)
f(n)经过预测器得到的序列,就能得到最后的真实的序列
小波编码
利用小波变换进行编码
水印
- 可见水印:直接将水印叠加到原始图像上
- 不可见水印:嵌入隐蔽的信息,而这些信息在正常观看或听取时是不可察觉的。不可见水印旨在保护数字媒体的版权和完整性,以及进行内容认证和源追踪等应用。