数字图像处理(4版)——第 8 章——图像压缩与水印(下)(Rafael C.Gonzalez&Richard E. Woods)

目录

8.10  预测编码(Predictive Coding)

8.10.1  运动补偿和预测留数(Motion Compensated Prediction Residuals)

8.10.2  有损预测编码(Lossy Predictive Coding)

8.10.3  最优预测器(Optimal Predictors)

8.10.4  最优量化(Optimal Quantization)

8.11  小波编码(Wavelet Coding)

8.11.1  小波选择(Wavelet Selection)

8.11.2  分解层级的选择(Decomposition Level Selection)

8.11.3  量化器设计(Quantizer Design)

8.11.4  JPEG 2000


8.10  预测编码(Predictive Coding)

    现在我们来看一种更简单的方法,这种方法无需显著地计算开销即可实现良好的压缩效果,并且可以是无损压缩或有损压缩。这种方法通常被称为预测编码,其原理是通过提取和编码每一个像素中的新信息,来消除相邻像素(在空间和/或时间上)之间的冗余。像素的新信息定义为该像素的实际值与预测值之间的差值。

    图 8.30 显示了无损预测编码系统的基本组成部分。该系统由编码器和解码器组成,每一个部分都包含一个相同的预测器。当离散时间输入信号 f (n) 的连续样本输入到编码器时,预测器会根据指定数量的先前样本生成每个样本的预测值。然后,预测器的输出被四舍五入到最接近的整数,记为 \hat{f}(n)  ,并用于计算差值或预测误差

(8-29)                e(n) = f (n) - \hat{f}(n)  

该信号使用变长编码(由符号编码器)进行编码,以生成压缩数据流的下一个元素。图 8.30(b) 中的解码器从接收到的变长码字重建 e(n),并执行逆运算

(8-30)                f (n) = e(n) + \hat{f}(n)

用于解压缩或重新创建原输入序列。

    可以使用各种局部、全局和自适应方法(参见后面的“有损预测编码”小节)来生成  \hat{f}(n)  。在许多情况下,预测值是前 m 个样本的线性组合。即,

(8-31)                \displaystyle \hat{f}(n) = \mathbf{round}\left [ \sum_{i=1}^{m}{\alpha}_{i} f(n-i) \right ]

其中,m 是线性预测器(linear predictor)的阶(order),round 是用于表示四舍五入或取最接近的整数运算,而 \alpha_{i}  ( 对于 i = 1 ,2 ,… , m ) 是预测系数,如果图 8.30(a) 中的输入序列视为图像的样本,则公式 (8-29) 至 (8-31) 中的 f (n) 表示像素值,用于预测每一个像素值的 m 个样本可以来自当前扫描线(称为一维线性预测编码)、来自当前和之前的扫描线(称为二维线性预测编码),或者来自图像序列中的当前图像和之前的图像(称为三维线性预测编码)。因此,对于一维线性预测图像编码,公式 (8-31) 可以写成

(8-32)                 \displaystyle \hat{f}( x , y ) = \mathbf{round}\left [ \sum_{i=1}^{m}\alpha_{i} f(x,y-i) \right ]

其中每一个样本现在都明确表示为输入图像空间坐标 x y 的函数。请注意,公式 (8-32) 表明一维线性预测仅是当前行中先前像素的函数。在二维预测编码中,预测是图像从左到右、从上到下扫描过程中先前像素的函数。在三维情况下,预测基于这些像素以及前一帧的先前像素。公式 (8-32) 无法用于计算每一行的前 m 个像素,因此这些像素必须使用其他方法( 例如 Huffman 编码 )进行编码,并被视为预测编码过程的开销。类似的情况也适用于更高维的情况。

------------图 8.30:一种无损预测编码模型:(a)编码器;(b)解码器。------------

例子 8.19:预测编码和空间冗余

考虑使用公式 (8-32) 中的简单一阶( 即 m = 1 )线性预测器对图 8.31(a) 所示的单色图像进行编码

(8-33)                 \hat{f}( x , y ) = \mathbf{round}[ {\alpha}f ( x ,y - 1)]

该公式是公式 (8-32) 的简化形式,其中 m = 1,并且省略了预测系数 \alpha_{1}  的下标,因为它是多余的。这种通用形式的预测器称为前一像素预测器(previous predicator),相应的预测编码过程称为差分编码前一像素编码。图 8.31(c) 显示了由公式 (8-33) 且 α = 1 得到的预测误差图像 e( x , y) = f ( x, y) - \hat{f}( x , y )  。该图像的缩放方式是,强度值为 128 表示预测误差为零,而所有非零的正负预测误差(低估和高估)分别显示为较浅和较深的灰色阴影。预测图像的平均值为 128.26。由于强度值 128 对应于预测误差为 0,因此平均预测误差仅为 0.26 位。

图 8.31(b) 和 (d) 分别显示了图 8.31(a) 中图像的强度直方图和预测误差 e( x , y) 的直方图。请注意,图 8.31(d) 中预测误差的标准差远小于原图像强度值的标准差。此外,使用公式 (8-7) 估算的预测误差的熵显著小于原始图像的估计熵(3.99 位/像素,而原图像为 7.25 位/像素)。熵的降低反映了大量空间冗余的去除,尽管对于 k 位图像,需要 ( k + 1 ) 位数才能准确表示预测误差序列 e( x , y)。( 注意,变长编码的预测误差即为压缩后的图像。) 通常,预测编码方法的最大压缩比可以通过将用于表示原图像中每一个像素的平均位数除以预测误差的熵估计值来估算。在本例中,可以使用任何变长编码方法对 e( x , y) 进行编码,但最终的压缩比将限制在约 8/3.99,即 2:1 左右。

----------------------图 8.31:(a) 从轨道航天飞机上看到的地球景象。(b) 图 (a) 的强度直方图。(c) 由公式 (8-33) 计算得到的预测误差图像。(d) 预测误差的直方图。(原始图像由美国国家航空航天局提供。)----------------------------------------

    前面的例子表明,预测编码实现的压缩效果与将输入图像映射到预测误差序列(通常称为预测留数(prediction residual)所导致的熵减少量直接相关。由于预测和差分过程消除了空间冗余,因此预测留数的概率密度函数通常在零点处达到峰值,并且其方差相对较小(与输入强度分布相比)。事实上,它通常可以用均值为零、不相关的 Laplace 概率密度函数(PDF)

(8-34)                \displaystyle p_{e}(e) = \frac{1}{\sqrt{2}\sigma_{e}}e^{\displaystyle \frac{-\sqrt{2}|e|}{​{\sigma}_{e}}}

来建模。其中, \sigma_{e}  是 e 的标准偏差。

例子 8.20:预测编码和时间冗余

图 8.31(a) 中的图像是 NASA 视频帧的一部分,其中地球相对于安装在航天飞机上的固定摄像机从左向右移动。图 8.32(b) 重复显示了该图像,图 8.32(a) 则显示了其前一帧。使用一阶线性预测器

(8-35)                \hat{f}( x , y , t ) = \mathbf{round}[ {\alpha}f ( x , y ,t - 1)]

α = 1 时,图 8.32(b) 中像素的强度可以根据图 (a) 中相应的像素进行预测。图 8.34(c) 是由此产生的预测留数图像,e ( x , y ,t ) = f ( x , y ,t ) - \hat{f}( x , y , t )  。图 8.31(d) 是 e ( x , y ,t ) 的直方图。注意,预测误差非常小。误差的标准差比上一个示例小得多:每像素 3.76 位,而上一个示例为每像素 15.58 位。此外,预测误差的熵(使用公式 (8-7) 计算)已从 3.99 位/像素降低到 2.59 位/像素。(再次提醒,变长编码的预测误差就是压缩后的图像。)通过对所得的预测留数进行变长编码,原图像的压缩比约为 8/2.59 或 3.1:1,比示例 8.19 中使用空间方向的前一像素预测器获得的 2:1 压缩比提高了 50%  。

-------------------------------图像 8.32:(a) 和 (b) 从轨道航天飞机拍摄的视频中截取的两幅地球图像。(c) 由公式 (8-35) 计算得到的预测误差图像。(d) 预测误差的直方图。(原始图像由 NASA 提供。)---------------------------------------------

8.10.1  运动补偿和预测留数(Motion Compensated Prediction Residuals)

    正如你在示例 8.20 中看到的,视频序列中的连续帧通常非常相似。对它们之间的差异进行编码可以减少时间冗余并实现显著的压缩。然而,当一系列帧包含快速移动的物体——或者涉及摄像机变焦和摇摄、场景突然变化或淡入淡出——相邻帧之间的相似性会降低,从而对压缩效果产生负面影响。也就是说,与大多数压缩技术一样(参见示例 8.5),基于时间的预测编码在处理某些类型的输入时效果最佳,即具有显著时间冗余的图像序列。当用于时间冗余度较低的图像时,可能会发生数据膨胀。视频压缩系统通过两种方式避免数据膨胀问题:

(1)  通过跟踪物体的运动并在预测和差分过程中对其进行补偿。

(2)  当帧间相关性(帧之间的相似性)不足以使预测编码发挥优势时,可以切换到另一种编码方法。

    其中第一个问题,即运动补偿,是本节剩余部分的主题。但在继续讨论之前,我们应该指出,当帧间相关性不足以使预测编码有效时,通常会使用基于块的二维变换来解决第二个问题,例如 JPEG 的基于 DCT 的编码(参见上一节)。以这种方式压缩的帧(即没有预测留数的帧)称为帧内编码帧(intraframes)独立帧(I(independent)帧)。它们无需访问视频中的其他帧即可进行解码。这些 I 帧通常类似于 JPEG 编码图像,是生成预测留数的理想起点。此外,它们还提供了高度的随机访问能力、易于编辑以及对传输错误传播的抵抗力。因此,所有标准都要求在压缩视频码流中周期性地插入 I 帧。

    图 8.33 阐述了运动补偿预测编码的基本原理。每个视频帧分割成不重叠的矩形区域(通常大小为 4 × 4 到 16 × 16),称为宏块。(图 8.33 中仅显示了一个宏块。)每一个宏块相对于其在上一帧(或下一帧)视频帧(称为参考帧(reference frame))中“最可能”位置的“运动”编码为一个运动向量(motion vector)。该向量通过定义相对于“最可能”位置的水平和垂直位移来描述运动。位移通常指定为最近的像素、1/2 或 1/4 像素精度。如果使用亚像素(subpixel)精度,则必须从参考帧中的像素组合进行插值预测(例如,使用双线性插值(参见第 2.4 节))。基于前一帧编码的帧(图 8.33 中的前向预测)称为预测帧( P 帧 )(Predictive frame);基于后续帧编码的帧(图 8.33 中的后向预测)称为双向帧(Bidirectional frame)(B 帧)。B 帧需要对压缩码流进行重新排序,以便以正确的解码顺序而不是自然的显示顺序将帧呈现给解码器。

    正如你所料,运动估计是运动补偿的关键组成部分。在运动估计过程中,会测量物体的运动并将其编码为运动向量。寻找“最佳”运动向量需要定义一个最优性准则。例如,可以根据宏块像素与选定参考帧中的预测像素(或对于亚像素运动向量而言,是插值像素)之间的最大相关性或最小误差来选择运动向量。最常用的误差度量之一是平均绝对失真 ( MAD —— mean absolute distortion )

(8-36)    

            \displaystyle \mathit{MAD}( x ,y ) = \frac{1}{mn}\sum_{i=0}^{m-1}\sum_{j=0}^{n-1}\bigg |f(x+i,y+j)-p(x+i+dx,y+j+dy) \bigg |

其中,xy 是待编码的 m × n 宏块左上角像素的坐标,dx dy 是相对于参考帧的位移(如图 8.33 所示),p 是预测宏块的像素值数组。对于亚像素运动矢量估计,p 是从参考帧中的像素插值得到的。通常,dx dy 必须位于每一个宏块周围的有限搜索区域内(参见图 8.33)。常见的取值范围为 ±8 到 ±64 像素,水平搜索区域通常略大于垂直搜索区域。一种计算效率更高的误差度量方法称为绝对误差和 (SAD),它省略了公式 (8-36) 中的 1/mn 因子。

给定如公式 (8-36) 所示的选择准则,运动估计是通过在允许的运动向量位移范围内(包括亚像素位移)搜索使 MAD( x ,y ) 最小化的 dxdy 来实现的。这个过程通常称为块匹配。穷举搜索可以保证获得最佳结果,但计算量巨大,因为必须在整个位移范围内测试所有可能的运动。对于 16 × 16 宏块和 ±32 像素的位移范围(这在动作片和体育赛事中并不少见),如果使用整数位移精度,则每帧中的每个宏块都需要执行 4225 次 16 × 16 的 MAD 计算。如果需要 1/2 或 1/4 像素的精度,则计算次数将分别乘以 4 或 16。快速搜索算法可以减轻计算负担,但可能无法获得最优运动矢量。文献中已经提出并研究了许多基于块的快速运动估计算法(参见 Furht 等人 [1997] 或 Mitchell 等人 [1997])。

-----------------------------图 8.33:宏块运动矢量规范。----------------------

例子 8.21:运动补偿预测

    图 8.34(a) 和 (b) 取自与示例 8.19 和 8.20 中使用的同一段 NASA 视频序列。图 8.34(b) 与图 8.31(a) 和 8.32(b) 完全相同;图 8.34(a) 是比其早 13 帧的图像帧的相应部分。图 8.34(c) 是两帧图像的差值,并已缩放到完整的强度范围。请注意,在相对于相机静止的航天飞机区域,差值为 0,但由于地球的相对运动,图像的其余部分存在显著差异。图 8.34(c) 中预测残差的标准差为 12.73 个强度级别;其熵(使用公式 (8-7))为 4.17 位/像素。当对预测留数进行变长编码时,可实现的最大压缩比为 C = 8 / 4.17 = 1.92 。

    图 8.34(d) 显示了运动补偿预测留数,其标准差显著降低(5.62 个灰度级,而原值为 12.73 个灰度级),熵也略有降低(3.04 位/像素,而原值为 4.17 位/像素)。熵是使用公式 (8-7) 计算的。如果对图 8.34(d) 中的预测留数进行变长编码,则得到的压缩比为 C = 8 / 3.04 = 2.63 。为了生成此预测留数,我们将图 8.34(b) 分割成不重叠的 16 × 16 宏块,并将每一个宏块与图 8.34(a)(参考帧)中位于该宏块位置 ±16 像素范围内的每个 16 × 16 区域进行比较。然后,我们使用公式 (8-36) 选择具有最低平均绝对差 (MAD) 的位移 ( dx , dy ) 来确定最佳匹配。得到的位移是图 8.34(e) 中所示运动向量的 xy 分量 。图中的白点是运动向量的头部;它们指示编码宏块的左上角。从向量的模式可以看出,图像中的主要运动方向是从左到右。在图像的下部,对应于原图像中航天飞机所在的区域,没有运动,因此没有显示运动向量。该区域的宏块是根据参考帧中位置相似(即对应)的宏块进行预测的。由于图 8.34(e) 中的运动向量高度相关,因此可以对其进行变长编码,以减少存储和传输需求。

-----------------------------图 8.34:(a) 和 (b) 是轨道航天飞机视频中相隔十三帧的两幅地球图像。(c) 是未经运动补偿的预测误差图像。(d) 是经过运动补偿后的预测残差图像。(e) 是与 (d) 对应的运动矢量。图 (e) 中的白点代表所示运动矢量的箭头。(原始图像由美国国家航空航天局提供)。--------------------------------------

    图 8.35 展示了使用亚像素运动补偿可以提高预测精度。图 8.35(a) 重复自图 8.34(c),并作为参考;它显示了不进行运动补偿时的预测误差。图 8.35(b)、(c) 和 (d) 中的图像是经过运动补偿后的预测留数。它们基于示例 8.21 中使用的相同两帧图像,并分别使用 1、 1/2 和 1/4 像素分辨率(即精度)的宏块位移进行计算。使用了 8 × 8 大小的宏块;位移限制在 ±8 像素范围内。

图 8.35 中预测留数之间最显著的视觉差异在于强度峰值和谷值的数量和大小——即它们最暗和最亮的区域。图 8.35(d) 中的 1/4 像素留数是四幅图像中“最平坦”的,其黑色或白色区域的波动最小。正如预期的那样,它的直方图最窄。图 8.35(a) 至 (d) 中预测留数的标准差随着运动矢量精度从 12.7 像素增加到 4.4、4 和 3.8 像素而减小。根据公式 (8-7) 计算得到的留数熵分别为 4.17、3.34、3.35 和 3.34 位/像素。因此,尽管图 8.35(c) 和 (d) 中的留数使用了额外的位来容纳 1/2 和 1/4 像素插值,但运动补偿留数包含的信息量大致相同。最后,我们注意到每个运动补偿留数的左侧都有一条明显的预测误差增大的条带。这是由于地球从左向右运动,导致地球地形中新的或以前未见的区域出现在每幅图像的左侧。由于这些区域在之前的帧中不存在,因此无论用于计算运动矢量的精度如何,都无法对其进行准确预测。

--------------------图 8.35:亚像素运动补偿预测留数:(a) 未进行运动补偿;(b) 单像素精度;(c) 1/2 像素精度;(d) 1/4 像素精度。(所有预测误差均已缩放到完整的强度范围,然后乘以 2 以提高可见度。)------------------------------------------

运动估计是一项计算量很大的任务。幸运的是,只有编码器需要估计宏块的运动。给定宏块的运动向量,解码器只需访问编码器用于形成预测留数的参考帧区域即可。因此,大多数视频压缩标准都不包含运动估计。压缩标准侧重于解码器,对宏块尺寸、运动矢量精度、水平和垂直位移范围等进行限制。表 8.12 列出了一些最重要的视频压缩标准的关键预测编码参数。请注意,大多数标准都使用 8 × 8 DCT 对 I 帧进行编码,但指定了更大的区域(即 16 × 16 宏块)用于运动补偿。此外,由于 DCT 系数量化的有效性,P 帧和 B 帧的预测留数也进行了变换编码。最后,我们注意到 H.264 和 MPEG-4 AVC 标准支持帧内预测编码(在 I 帧中)以减少空间冗余。

表 8.12:视频压缩标准中的预测编码。

图 8.36 显示了一个典型的运动补偿视频编码器。它利用了相邻视频帧内部和帧间冗余、帧间运动一致性以及人眼视觉系统的心理视觉特性。我们可以将编码器的输入视为一系列连续的视频宏块。对于彩色视频,每个宏块由一个亮度块和两个色度块组成。由于人眼对颜色的空间分辨率远低于对亮度的空间分辨率,因此色度块的水平和垂直分辨率通常是亮度块的一半。图中深蓝色部分与 JPEG 编码器的变换、量化和变长编码操作类似。主要区别在于输入,输入可以是传统的图像数据宏块(用于 I 帧),也可以是传统宏块与基于先前和/或后续视频帧的预测值之间的差值(用于 P 帧和 B 帧)。编码器包含一个逆量化器和逆变换器(例如,离离散余弦变换),以便其预测与相应的解码器的预测相匹配。此外,它的设计目标是生成与目标视频通道容量相匹配的压缩位流。为此,速率控制器会根据输出缓冲区的占用情况调整量化参数。随着缓冲区越来越满,量化会变得更粗糙,从而减少流入缓冲区的位数。

--------------------图 8.36:一个典型的运动补偿视频编码器。--------------------

例子 8.22:视频压缩例子

我们以一个例子来结束对运动补偿预测编码的讨论,该例子展示了现代视频压缩方法可以实现的压缩效果。图 8.37 显示了美国宇航局一段 1 分钟高清(1280 × 720)彩色视频的十五帧图像,本节中多次使用了该视频的部分片段。虽然图中显示的图像是单色的,但该视频实际上是由 1829 帧彩色图像组成的序列。请注意,视频包含多种场景、大量的运动以及多种淡入淡出效果。例如,视频以从黑色淡入的 150 帧画面开始,其中包括图 8.37 中的第 21 帧和第 44 帧;视频以包含图 8.37 中第 1595 帧、第 1609 帧和第 1652 帧的淡出序列结束,最后完全淡出至黑色。视频中还有几个场景突然切换,例如图 8.37 中第 1303 帧和第 1304 帧之间的场景切换。

以 QuickTime 文件格式存储的 H.264 压缩版 NASA 视频(参见表 8.5)需要 44.56 MB 的存储空间,外加 1.39 MB 用于存储相关音频。视频质量极佳。如果将视频帧存储为未压缩的全彩图像,则需要大约 5 GB 的数据量。需要注意的是,该视频包含旋转和缩放变化的片段(例如,图 8.37 中包含帧 959、1023 和 1088 的片段)。然而,本节的讨论仅限于平移变换。( 请访问本书网站查看本示例中使用的 NASA 视频片段。)

---------------------图 8.37:图 8.37:这是来自一段时长1分钟、包含1829帧的 NASA 视频中的 15 帧画面。原视频为高清全彩格式。(图片由 NASA 提供。)。------------------------------------------------------

8.10.2  有损预测编码(Lossy Predictive Coding)

    在本节中,我们在前面介绍的无损预测编码模型中添加一个量化器,并在空间预测器的背景下研究重建精度和压缩性能之间的权衡。如图 8.38 所示,该量化器取代了无误差编码器中的最近整数函数,并被插入到符号编码器和预测误差生成点之间。它将预测误差映射到有限的输出范围,记为 \dot{e}(n),这些输出决定了压缩量和失真程度。

(8-37)                \dot{f}(n) = \dot{e}(n) + \hat{f}(n)

其中,\hat{f}(n)  如先前定义。这种闭环配置可以防止解码器输出端误差的累积。请注意,在图 8.38(b) 中,解码器的输出也由公式 (8-37) 给出。

-------------图 8.38:一种有损预测编码模型:(a) 编码器;(b) 解码器。 ---------

    为了适应量化步骤的插入,必须对图 8.30(a) 中的无误差编码器进行修改,使得编码器和解码器生成的预测结​​果相等。如图 8.38(a) 所示,这可以通过将有损编码器的预测器置于反馈回路中来实现,其中其输入(记为 f (n))是根据过去的预测结果和相应的量化误差生成的。即,

(8-38)                \hat{f}(n) = {\alpha}\dot{f}(n - 1 )

(8-39)                \dot{e}(n)=\left \{ \begin{array}{lc} +\zeta \hspace{0.2cm} (e(n)>0) \\ \\ -\zeta \hspace{0.2cm}(\rm{otherwise}) \end{array} \right.

其中 α 是预测系数( 通常小于1 ) ,且 ζ 是一个正常量。量化器 \dot{e}(n)  的输出可以用一个单独的位表示[见图 8.39[a]] ,因此图 8.38[a] 的符号编码器可以使用一个 1 位定长码。最终的 DM  码率是 1 位/像素。

图 8.39(c) 阐述了增量调制过程的原理,其中列出了对输入序列 {14, 15, 14, 15, 13, 15, 15, 14, 20, 26, 27, 28, 27, 27, 29,37, 47, 62, 75, 77, 78, 79, 80, 81, 81, 82, 82} 进行压缩和重建所需的计算过程,其中 α = 1 且 ζ = 6.5 。该过程始于将第一个输入样本无误差地传输到解码器。在编码器和解码器都建立初始条件 \hat{f}(0) = f (0) = 14   后,可以通过重复计算公式 (8-38)、(8-29)、(8-39) 和 (8-37) 来计算剩余的输出。例如,当 n = 1 时, \hat{f}(1) = (1)(14) = 14  ,e(1) = 15 - 14 = 1,\hat{e}(1) = +6.5  ( 因为 e(1) > 0 ), \hat{f}(1) = 6.4 + 14 = 20.5  ,因此重建误差为 (15 - 20.5),即 -5.5 。

图 8.39(b) 以图形方式显示了图 8.39(c) 中的表格数据。图中显示了输入信号 f (n)  和完全解码后的输出信号 \dot{f}(n) 的值。请注意,在 n = 14 到 19 的快速变化区域,由于 ζ 值太小,无法表示输入信号的最大变化,因此会发生称为斜率过载的(slope overload)失真。此外,当 ζ 值太大而无法表示输入信号的最小变化时(例如在 n = 0 n = 7 的相对平滑区域),会出现颗粒噪声(granular noise)。在图像中,这两种现象会导致物体边缘模糊和表面出现颗粒状或噪声(即平滑区域失真)。

------------------------图 8.39:差分调制的示例。------------------------------

    前述示例中出现的失真现象在所有有损预测编码方法中都很常见。这些失真的严重程度取决于量化和预测方法之间复杂的相互作用。尽管存在这些相互作用,但预测器通常是在没有量化误差的假设下设计的,而量化器的设计目标是使其自身的误差最小化。即,预测器和量化器是彼此独立设计的

8.10.3  最优预测器(Optimal Predictors)

    在众多预测编码应用中,所选择的预测器是为了最小化编码器均方预测误差

(8-40)                \mathbf{\mathit{E}}\{ e^{2}(n) \} = \mathbf{\mathit{E}}\{ e^{2}(n) \} = \mathbf{\mathit{E}}{[f(n)-\hat{f}(n)]^{2} }

符合约束条件

(8-41)                \dot{f}(n ) = \dot{e}(n ) + \hat{f}(n) \approx e(n) + \hat{f}(n) = f (n)

(8-42)                 \displaystyle \hat{f}(n) = \sum_{i=1}^{m}\alpha_{i} f ( n - i )

即,最优准则是最小均方预测误差,量化误差假定为可以忽略不计 [\dot{e}(n ) \approx e(n)]  ,并且预测限制为 m 个先前样本的线性组合。这些限制并非必不可少,但它们可以显著简化分析,同时降低预测器的计算复杂度。由此产生的预测编码方法称为差分脉冲编码调制( DPCM-differential pulse code modulation )。

在这些条件下,最优预测器设计问题简化为相对简单的任务,即选择 m 个预测系数,使表达式

(8-43)                \displaystyle \mathbf{\mathit{E}}\left \{ e^{2}(n) \right \} = \mathbf{\mathit{E}} \left \{ \left [f(n)-\sum_{i=1}^{m}\alpha_{i} f ( n - i ) \right ]^{2} \right \}

最小化。对公式 (8-43) 分别针对每一个系数求导,令导数为零,并在 f (n) 均值为零、方差为 \sigma^{2}  的假设下求解所得的联立方程组,可得

(8-44)                \alpha = \mathbf{R}^{-1}r

其中,\mathbf{R}^{-1}  是自相关矩阵 R 的逆矩阵,即

(8-45)

\mathbf{R}= \begin{bmatrix} \mathbf{E}\{f(n-1)f(n-1)\}&\mathbf{E}\{f(n-1)f(n-2)\}&\hdots&\mathbf{E}\{f(n-1)f(n-m)\} \\ \mathbf{E}\{f(n-2)f(n-1)\}&\vdots&\hdots&\vdots\\ \vdots&\vdots&\hdots&\vdots\\ \vdots&\vdots&\hdots&\vdots \\ \vdots&\vdots&\hdots&\vdots\\ \mathbf{E}\{f(n-m)f(n-1)\}&\mathbf{E}\{f(n-m)f(n-2)\}&\hdots&\mathbf{E}\{f(n-m)f(n-m)\} \end{bmatrix}

且 r  和 α 是分别是 m 元素向量

(8-46)                

\mathbf{r}=\begin{bmatrix} \mathbf{\mathit{E}}\{f(n-1)f(n-1)\}\\ \mathbf{\mathit{E}}\{f(n-1)f(n-2)\} \\ \vdots\\ \mathbf{\mathit{E}}\{f(n-1)f(n-m)\} \end{bmatrix}  和   \mathbf{\alpha}=\begin{bmatrix} \alpha_{1}\\ \alpha_{2}\\ \vdots\\ \alpha_{m}\\ \end{bmatrix}

因此,对于任何输入序列,可以通过一系列初等矩阵运算确定使公式 (8-43) 最小化的系数。此外,这些系数仅取决于原序列中样本的自相关性。使用这些最优系数得到的预测误差的方差为

(8-47)        \displaystyle {\sigma}_{e}^{2} = {\sigma}^{2} - {\alpha}^{T} r = {\sigma}^{2}- \sum_{i=1}^{m}\mathbf{E}\{f(n)f(n-i)\} \alpha_{i}

尽管计算公式 (8-44) 的过程相当简单,但实际计算形成 R r 所需的自相关函数却非常困难,因此局部预测(即为每一个输入序列计算预测系数)几乎从不使用。在大多数情况下,通过假设一个简单的输入模型并将相应的自相关函数代入公式 (8-45) 和 (8-46) 来计算一组全局系数。例如,当使用具有可分离自相关函数

(8-48)        \mathbf{\mathit{E}}\{ f(x,y)f( x-i , y - j )\} = \mathbf{\sigma}^{2} - \mathbf{\rho}_{v}^{i}\mathbf{\rho}_{h}^{j}

的二维 Markov 图像信源(参见第 8.1 节)并假设推广到四阶线性预测器

(8-49)         \begin{array}{rlc} \hat{f}( x , y) =\!\!&\displaystyle {\alpha}_{1}f ( x , y - 1) + {\alpha}_{2} f ( x - 1, y - 1) \\\\ + &\displaystyle {\alpha}_{3} f ( x - 1, y ) + {\alpha}_{4} f ( x - 1,y + 1) \end{array}

时,则最终的最优化系数( Jain [1989])是

(8-50)        {\alpha}_{1} = {\rho}_{h} , {\alpha}_{2} = -\mathbf{\rho}_{v}\mathbf{\rho}_{h},{\alpha}_{3} = {\rho}_{v} , {\alpha}_{4} = 0

其中,\mathbf{\rho}_{h}  和 \mathbf{\rho}_{v}  分别是所考虑图像的垂直相关系数和水平相关系数。最后,通常要求公式(8-42)中预测系数之和小于或等于 1。即,

(8-51)                 \displaystyle \sum_{i=1}^{m}\alpha_{i} \le 1

此限制旨在确保预测器的输出落在允许的输入范围内,并减少传输噪声的影响(当图 8.38(a) 的输入为图像时,传输噪声通常表现为重建图像中的水平条纹)。降低 DPCM 解码器对输入噪声的敏感性至关重要,因为在某些情况下,单个错误可能会传播到所有后续输出。也就是说,解码器的输出可能会变得不稳定。将公式 (8-51) 进一步限制为严格小于 1,可以将输入错误的影响限制在少量输出范围内。

例子 8.24:预测技术之比较

考虑对图 8.9(a) 所示的灰度图像进行差分脉冲编码调制 (DPCM) 编码时产生的预测误差,假设量化误差为零,并使用以下四种预测器:

(8-52)                 \hat{f}( x ,y) = 0.97 f ( x, y)

(8-53)                \hat{f}( x , y) = 0.5 f ( x , y - 1) + 0.5( x - 1 , y)

(8-54)                 \hat{f}( x, y) = 0.75 f ( x , y - 1) + 0.75 f ( x - 1, y) - 0.5 f ( x - 1,y - 1)

(8-55)                 \hat{f}(x,y)=\left \{ \begin{array}{lc} 0.97 f ( x, y - 1) \hspace{0.2cm}(\text{if}\;\mathit{​{\Delta}}f \le \mathit{​{\Delta}}v) \\ \\ 0.97f(x-1,y)\hspace{0.2cm} (\text{otherwise}) \end{array} \right .

其中,Δh = | f (- 1 , y) - f ( x – 1 , y - 1) |  和 Δv = | f ( x y   - 1 ) - f ( x – 1 , y - 1) |  分别表示在点 (x y) 处的水平和垂直梯度。公式 (8-52) 至 (8-55) 定义了一组相对稳健的系数 \alpha_{i}  ,这些系数在各种图像上都能提供令人满意的性能。公式 (8-55) 中的自适应预测器旨在通过计算图像方向特性的局部度量 ( ΔhΔv ) 来改善边缘渲染效果,并选择专门针对所测行为而设计的预测器。

图 8.40(a) 至 (d) 显示了使用公式 (8-52) 至 (8-55) 所示预测器得到的预测误差图像。请注意,随着预测器阶数的增加,视觉上可感知的误差逐渐减小。(注:使用超过三个或四个先前像素的预测器,其带来的压缩增益与增加的预测器复杂度相比微乎其微( Habibi [1971] )) 预测误差的标准差也呈现类似的趋势,分别为 11.1、9.8、9.1 和 9.7 个灰度级。

--------------------------图 8.40:4 种线性预测技术的一种比较-----------------

8.10.4  最优量化(Optimal Quantization)

图 8.41 中的阶梯量化函数 t = q(s) 是一个关于 s 的奇函数 [即 q(-s) = -q(s)],可以用图中第一象限所示的   s_{i}  和  t_{i}  的 L/2 值完全描述。这些断点定义了函数的间断点,称为量化器的判决电平(decision levels)和重建电平(reconstruction levels)。按照惯例,如果 s 位于半开区间 ( s_{i} , s_{i+1} ]  内,则认为 s 映射到  t_{i}  。

量化器设计问题是为一个具体的优化标准和一个输入概率密度函数 p(s)选择最佳的 s_{i}  和 t_{i}  。如果优化准则(可以是统计度量或心理视觉度量 (注:有关心理视觉测量方法的更多信息,请参阅 Netravali [1977] 和 Limb 的相关著作) ) 是最小化均方量化误差,即  \mathbf{E}\{ (s_{i}-t_{i})^{2} \}  ,并且 p(s) 是偶函数,则最小误差的条件( Max [1960])为 :

(8-56)                 \displaystyle \int_{s_{i-1}}^{s_{i}}(s-t_{i}) p(s)ds = 0   ( i = 1 , 2 ,\hdots, \frac{L}{2} )

(8-57)                \displaystyle s_{i}=\left \{ \begin{array}{lc} 0 \hspace{0.2cm}(i=0) \\ \\ \displaystyle \frac{t_{i}+t_{i+1}}{2} \hspace{0.2cm}(i=1,2,\hdots,\frac{L}{2}-1)\\ \\ \displaystyle \infty \hspace{0.2cm}(i=\frac{L}{2}) \end{array} \right.

(8-58)                s_{-i}= -s_{i} , t_{-i} = -t_{i}  

公式 (8-56) 表明,重建电平是 p(s) 在指定判决区间下的面积的质心,而公式 (8-57) 表明,判决电平位于相邻重建电平的中点。公式 (8-58) 是由于 q 是一个奇函数而得出的。对于任何 L 值,满足公式 (8-56) 至 (8-58) 的 s_{i}  和 t_{i}  在均方误差意义上是最优的;相应的量化器称为 L 级 Lloyd-Max 量化器 。

-----------------------------图 8.41:一种典型的量化函数-----------------------

表 8.13 列出了单位方差 Laplace 概率密度函数的 2 级、4 级和 8 级 Lloyd-Max 决策和重建电平 [参见公式 (8-34)]。由于对于大多数非平凡的 p(s) 而言,获得公式 (8-56) 至 (8-58) 的显式或闭型(closed-form)解较为困难,因此这些值是通过数值方法生成的( Paez 和 Glisson [1972] ) 。所示的三个量化器分别提供 1、2 和 3 位/像素的固定输出速率。由于表 8.13 是针对单位方差分布构建的,因此当 s ≠ 1 时,重建和决策电平是通过将表中的值乘以所考虑概率密度函数的标准差得到的。表的最后一行列出了同时满足公式 (8-56) 至 (8-58) 以及下述附加约束条件的步长 θ

(8-59)                 t_{i} - t_{i-1} = s_{i} - s_{i-1} = \theta

如果在图 8.38(a) 所示的通用有损预测编码器中使用变长编码的符号编码器,那么步长为 θ 的最优均匀量化器(对于 Laplace 概率密度函数)将比具有相同输出保真度的定长编码的 Lloyd-Max 量化器提供更低的码率(O’Neil [1971])。

表 8.13:

    尽管 Lloyd-Max 量化器和最优均匀量化器并非自适应的,但根据图像的局部特性调整量化级别可以带来显著的优势。在理论上,变化缓慢的区域可以进行精细量化,而变化快速的区域则可以进行粗略量化。这种方法可以同时减少颗粒噪声和斜率过载,同时只需极小的码率增加。其代价是量化器的复杂度会增加

8.11  小波编码(Wavelet Coding)

    与前面介绍的块变换编码技术类似,小波编码基于这样一个理念:对图像像素进行去相关变换后得到的系数,比原像素本身可以更有效地进行编码如果变换的基函数(在本例中为小波)能够将大部分重要的视觉信息集中到少数系数中,那么剩余的系数就可以进行粗略量化或截断为零,而不会造成明显的图像失真。

    图 8.42 显示了一个典型的小波编码系统。为了对  2^{J} {\times}2^{J}  图像进行编码,需要选择一个分析小波 ψ 和最小分解层级 J P ,并用它们来计算图像的离散小波变换。如果该小波具有互补缩放函数 φ ,则可以使用快速小波变换(参见第 7.10 节)。无论哪种情况,计算出的变换都会将原图像的大部分转换为具有零均值和类似 Laplace 分布的水平、垂直和对角线分解系数。由于许多计算出的系数携带的视觉信息很少,因此可以对其进行量化和编码,以最大限度地减少系数间冗余和编码冗余。此外,量化可以进行自适应调整,以利用 P 个分解层级之间的位置相关性。一种或多种无损编码方法,例如游程编码、Huffman 编码、算术编码和位平面编码,可以集成到最终的符号编码步骤中。解码是通过逆向编码操作来实现的,但量化除外,因为量化无法精确逆转。

图 8.42 所示的基于小波的系统与图 8.21 所示的变换编码系统之间的主要区别在于,前者省略了变换编码器中的子图像处理阶段。由于小波变换计算效率高且具有固有的局部性(即其基函数持续时间有限),因此无需对原图像进行细分。正如你将在本节后面部分看到的那样,去除细分步骤消除了在高压缩比下基于 DCT 的近似方法所特有的块状伪影。

8.11.1  小波选择(Wavelet Selection)

    图 8.42 中选作正向和逆向变换基函数的小波会影响小波编码系统设计和性能的各个方面。它们直接影响变换的计算复杂度,并间接影响系统压缩和重建图像并使其误差在可接受范围内的能力。当变换小波具有伴随的缩放函数时,变换可以实现为一系列数字滤波操作,其中滤波器抽头(filter taps)数等于非零小波和缩放向量系数的数量。小波将信息压缩到少量变换系数中的能力决定了其压缩和重建性能

    基于小波的压缩中最常用的展开函数是 Daubechies 小波和双正交小波。后者允许将一些有用的分析性质(例如消没矩的数量,参见 7.10 节)融入分解滤波器中,而一些重要的合成性质(例如重建的平滑性)则内置于重建滤波器中。

例子 8.25:小波编码中的小波基。

    图 8.43 包含了图 8.9(a) 的四个离散小波变换。图 8.43(a) 中使用了 Haar 小波作为展开式或基函数,Haar 小波是本例中考虑的最简单且唯一的非连续小波。图 8.43(b) 中使用了 Daubechies 小波,Daubechies 小波是最常用的成像小波之一。图 8.43(c) 中使用了对称小波(symlets),它是 Daubechies 小波的扩展,具有更高的对称性。图 8.43(d) 中使用的 Cohen-Daubechies-Feauveau 小波用于展示双正交小波的功能。与以往的类似结果一样,所有细节系数都经过缩放,以使底层结构更加清晰可见,强度 128 对应于系数 0。

----------------------------------图 8.43:图 8.9(a) 的三缩放小波变换,分别对应于 (a) Haar 小波、(b) Daubechies 小波、(c) symlets 和 (d) Cohen-Daubechies-Feauveau 双正交小波。---------------------------------------------------------

如表 8.14 所示,图 8.43 中变换的计算运算次数从图 8.43(a) 到 (d) 逐渐增加,每一个系数(每个分解层级)的乘法和加法运算次数从 4 次增加到 28 次。所有四个变换均采用快速小波变换(即滤波器组)方法计算。值得注意的是,随着计算复杂度(即滤波器抽头数)的增加,信息压缩性能也随之提高。当采用 Haar 小波并将小于 1.5 的细节系数截断为零时,总变换中有 33.8% 的系数置零。而使用更复杂的双正交小波时,置零系数的比例上升至 42.1%,潜在压缩率提高了近 10% 。

表 8.14:图 8.43 下方 1.5 中截断变换时的小波变换滤波器抽头和零系数。

8.11.2  分解层级的选择(Decomposition Level Selection)

影响小波编码计算复杂度和重建误差的另一个因素是变换分解层级。由于 P 缩放快速小波变换需要 滤波器组迭代,因此正变换和逆变换的计算运算量会随着分解层级的增加而增加。此外,随着分解层级的增加,系数的缩放越来越小,因此对系数进行量化也会影响重建图像中越来越大的区域。在许多应用中,例如搜索图像数据库或传输图像以进行渐进式重建,存储或传输图像的分辨率以及最小有效近似的缩放通常决定了变换层级。

例子 8.26:小波编码中的分解层级。

表 8.15 展示了使用双正交小波和固定全局阈值 25 对图 8.9(a) 进行编码时,分解层级选择的影响。与之前的小波编码示例一样,仅截断了细节系数。该表列出了零系数的百分比以及根据公式 (8-10) 计算得到的均方根重建误差。请注意,初始分解是数据压缩的主要贡献者。超过三个分解层级后,截断系数的数量几乎没有变化。

表 8.15:分解层级对图 8.9(a) 中 512 × 512 图像的小波编码的影响。

8.11.3  量化器设计(Quantizer Design)

影响小波编码压缩和重建误差的最重要因素是系数量化。尽管最常用的量化器是均匀的,但可以通过以下两种方法显著提高量化效果:(1) 在零点附近引入更大的量化区间(称为死区(dead zone));(2) 根据图像大小调整量化区间的大小。无论采用哪种方法,都必须将选定的量化区间与编码后的图像二进制流一起传输到解码器。这些区间本身可以通过启发式方法确定,也可以根据待压缩图像自动计算。例如,全局系数阈值可以计算为第一级细节系数绝对值的中位数,或者计算为被截断的零值数量和重建图像中保留的能量的函数。

例子 8.27:小波编码中的死区区间的选择。

    图 8.44 展示了死区间隔大小对图 8.9(a) 中基于三缩放双正交小波编码的细节系数截断百分比的影响。随着死区尺寸的增大,截断系数的数量也随之增加。在曲线拐点以上(即大于 5),增益很小。这是因为细节系数的直方图在零值附近呈现高度峰值。

    图 8.44 中死区阈值对应的均方根重建误差,在阈值为 5 时从 0 增加到 1.94 个强度等级,在阈值为 18 时增加到 3.83 个强度等级,此时零值数量达到 93.85%。如果消除所有细节系数,该百分比将增加到约 97.92%(约 4% ),但重建误差将增加到 12.3 个强度等级。

----------------------图 8.44:死区区间的选择对小波编码的影响。--------------

8.11.4  JPEG 2000

    JPEG-2000 扩展了流行的 JPEG 标准,在连续色调静态图像的压缩和压缩数据的访问方面都提供了更大的灵活性。例如,可以提取 JPEG-2000 压缩图像的部分内容进行重传、存储、显示和/或编辑。该标准基于前面描述的小波编码技术。系数量化针对各个缩放和子带进行调整,量化后的系数在位平面上进行算术编码(参见第 8.4 节和第 8.8 节)。使用该标准的表示法,图像的编码方式如下(ISO/IEC [2000])。

    编码过程的第一步是对待编码的 Ssiz–1 位无符号图像的样本进行直流电平移位,即减去 2^{Ssiz-1} 。如果图像包含多个分量,例如彩色图像的红、绿、蓝三个平面,则每个分量需要单独移位。如果恰好有三个分量,则可以选择性地使用分量的可逆或不可逆线性组合进行去相关。例如,标准的不可逆分量变换为

(8-60)                Y_{0}( x ,y ) = 0.299I_{0}( x ,y ) + 0.587I_{1}( x ,y ) + 0.114I_{2}( x ,y )

                        Y_{1}( x ,y ) = -0.16875I_{0}( x ,y ) - 0.33126I_{1}( x ,y ) + 0.5I_{2}( x ,y )

                        Y_{2}( x ,y ) = 0.5I_{0}( x ,y ) - 0.41869I_{1}( x ,y ) - 0.08131I_{2}( x ,y )

其中,I_{0}  ,  I_{1}  , 和  I_{2}  是平衡级别输入分量,而 Y_{0}  , Y_{1}  ,  和  Y_{2}   是对应的去相关分量。若输入分量是一幅彩图的红、绿、蓝平面,则公式 (8-60) 将  R^{'} G^{'} B^{'}   近似为  Y^{'} C_{b} C_{r}  彩色视频变换( Poynton [1996])) (注:R^{'}G^{'}B^{'}  是一种 γ 校正,一个线性 CIE (International Commission on Illumination)(国际照明委员会) RGB 颜色的一种非线性版本 ,其中 ,Y^{'}  是辉度(luminance) ,而 C_{b}  和 C_{r}  是颜色差 ( 即缩放值 B^{' }- Y^{'}   和  R^{' }- Y^{'}  ) ) 。 变换的目标是提高压缩效率;变换后的分量  Y_{1}  和  Y_{2}  是差值图像,它们的直方图在零附近高度集中。

图像经过电平偏移(并可选择性地进行去相关处理)后,其各个分量可以分割成图块(tiles)。图块是像素的矩形阵列,可以独立处理。由于一幅图像可以包含多个分量(例如,它可以由三个颜色分量组成),因此分割过程会创建图块分量。每个图块分量都可以独立重建,从而提供了一种简单的机制来访问和/或操作编码图像的有限区域。例如,一幅宽高比为 16:9 的图像可以被细分为多个图块,使得其中一个图块是宽高比为 4:3 的子图像。然后,无需访问压缩图像中的其他图块即可重建该图块。如果图像没有被细分为图块,则它是一个单独的图块。

    然后计算每一个图块分量的行和列的一维离散小波变换。为了实现无误差压缩,该变换基于双正交的 5/3 系数缩放和小波向量( Le Gall 和 Tabatabai [1988])。对于非整数值的变换系数,定义了一个舍入过程。在有损应用中,采用 9/7 系数缩放小波向量( Antonini ,Barlaud ,Mathieu 和 Daubechies [1992])。无论哪种情况,变换都使用第 7.10 节中的快速小波变换或通过互补的基于提升的方法( Mallat [1999])进行计算。例如,在有损应用中,用于构建 9/7 FWT 分析滤波器组的系数如表 7.1 所示。互补的基于提升的实现涉及六个连续的“提升”和“缩放”操作:

(8-61)

\begin{array}{l} Y (2n + 1) = X(2n + 1) + \alpha[ X(2n) + X(2n + 2)]( i_{0} - 3 \le 2n + 1 < i_{1} + 3 ) \\\\ Y (2n) = X(2n) + \beta[ Y(2n - 1) + Y(2n + 1)]( i_{0} - 2 \le 2n < i_{1} + 2 )\\\\ Y (2n + 1) = Y(2n + 1) + \gamma[ Y(2n) + Y(2n + 2)]( i_{0} - 1 \le 2n + 1 < i_{1} + 1 ) \\ \\ Y (2n) = X(2n) + \delta[ Y(2n - 1) + Y(2n + 1)]( i_{0}\le 2n < i_{1} ) \\ \\ Y (2n + 1) = -KY(2n + 1) ( i_{0} \le 2n + 1 < i_{1} ) \\ \\ Y (2n) = Y(2n)/K ( i_{0} \le 2n < i_{1} ) \end{array}

其中,X 是待变换的图块分量,Y 是最终的变换结果,而 i_{0}  和 i_{1}  分别定义了一个分量内的图块分量的位置。即,它们是分别是待转换的图块分量的行或列的第一个样本的索引,以及紧随最后一个样本之后的索引。变量 n 承载的是基于 i_{0}  , i_{1}  的值,并确定执行这六个操作中的那一个。若 n<i_{0}  或 n>i_{1}  ,则 X(n) 可通过对称扩展而求得。例如,X( i_{0} - 1 ) = X( i_{0} + 1 )  ,  X( i_{0} - 2 ) = X( i_{0} + 2 )  ,  X( i_{1}) = X( i_{1} - 2 )  和  X( i_{1} + 1 ) = X( i_{1} - 3 )  经过提升和缩放操作后,Y 的偶数索引值等价于 FWT 低通滤波后的输出;Y 的奇数索引值对应于 FWT 高通滤波后的结果。提升参数 abgd 分别为 -1.586134342,-0.052980118,0.882911075 和 0.433506852,缩放因子 K 为 1.230174105 。

上述变换产生四个子带(subbands):图块分量的低分辨率近似值以及该分量的水平、垂直和对角频率特性。重复该变换 ​​​​​​​N_{L} 次,后续迭代仅限于前一次分解的近似系数,即可得到 N_{L} 缩放的小波变换。相邻缩放在空间上以 2 的幂次方相关,最低缩放包含原图块分量的唯一显式定义的近似值。如图 8.45 所示 ( 其中总结了 N_{L} = 2  情况下 JPEG-2000 标准的符号),一般的  N_{L} 缩放变换包含  3N_{L}+1  个子带,其系数表示为  a_{b}  ,其中  b = N_{L}HL ,\hdots,1HL,1LH,1HH   。该标准并未规定要计算的缩放数。

--------图 8.45:JPEG 2000 两缩放小波变换图块分量系数表示和分析增益(gain)。---  

    当每个图块分量都处理完毕后,变换系数的总数等于原图像中的样本数,但重要的视觉信息集中在少数几个系数中。为了减少表示变换所需的位数,使用公式

(8-62)                \displaystyle q_{b}(u,v) =\text{sign}[a_{b}(u,v)]{\cdot}\text{floor}\left [\frac{|a_{b}(u,v)|}{\Delta_{b}} \right ]

将子带 b 的系数 a_{b}(u,v)  量化为值  q_{b}(u,v)  , 其中,量化步长大小   {\Delta}_{b}  是

(8-63)                \displaystyle \Delta_{b} = 2^{\displaystyle R_{b}-\epsilon_{b} }\left ( 1 + \frac{\mu_{b}}{2^{11} } \right )

R_{b}  是子带 b标称动态范围(nominal dynamic range),而 \epsilon_{b}  和 \mu_{b}  分别是分配给子带系数指数和尾数的二进制位数。子带 b 的标称动态范围是用于表示原图像的位数与子带 b 的分析增益位数之和。子带分析增益位数遵循图 8.45 所示的简单模式。例如,子带 b = 1HH 时,有两个分析增益位。

对于无误差压缩,\mu_{b} = 0   ,R_{b} = \epsilon_{b}  ,和  \Delta_{b}=1  。对于不可逆压缩,标准中并未规定特定的量化步长。相反,必须按子带向解码器提供指数和尾数位数,这称为阐述量化(expounded quantization),或者仅针对 N_{L}LL  子带提供,这称为导出量化(derived quantization)。在后一种情况下,其余子带使用外推的  N_{L}LL  子带参数进行量化。设  \epsilon_{0} 和 \mu_{0}  为分配给 N_{L}LL  子带的位数,则子带 b 的外推参数(extrapolated parameters)为:

(8-64)                 \mu_{b} = \mu_{0}

                          \epsilon_{b} = \epsilon_{0} + n_{b} - N_{L}

其中,n_{b}  表示从原图块分量到子带 b 的子带分解级别数。

在编码过程的最后步骤中,每一个变换后的图块分量的子带系数被排列成称为码块的矩形块,并逐个位平面进行编码。从具有非零元素的最高有效位平面开始,每个位平面都经过三次处理。每个位(在位平面中)仅在三次处理中的一次进行编码,这三次处理分别称为有效值传播(significance propagation)、幅度加细(magnitude refinement)和清理(cleanup)。然后,输出结果经过算术编码,并与其他码块中类似的处理结果分组,形成层(layers)。一个层是由来自每一个码块的任意数量的编码处理分组组成的。最终,生成的层被分割成数据包,从而提供了一种从整个码流中提取感兴趣空间区域的额外方法。数据包(packets)是编码码流的基本单元

    JPEG-2000 解码器简单地反转了前面描述的操作。在从算术编码的 JPEG-2000 数据包中重建图块分量的子带后,解码用户选择数量的子带。尽管编码器可能为特定子带编码了 M_{b}  位平面,但由于码流的嵌入式特性,用户可以选择仅解码  N_{b}  位平面。这相当于使用步长 2^{M_{b}-N_{b}}{\cdot}\Delta_{b}  对码块的系数进行量化。任何未解码的位都置为 0 ,而最终的系数  ( 用 \overline{q}_{b}(u,v)  使用公式

(8-65)      \displaystyle R_{\overline{q}_{b}(u,v)}=\left \{ \begin{array}{l} (\overline{q}_{b}(u,v)+r{\cdot}2^{M_{b}-N_{b}(u,v)}){\cdot}{\Delta}_{b} \hspace{0.2cm}(\overline{q}_{b}(u,v)>0) \\ \\ (\overline{q}_{b}(u,v)-r{\cdot}2^{M_{b}-N_{b}(u,v)}){\cdot}{\Delta}_{b} \hspace{0.2cm}(\overline{q}_{b}(u,v)<0) \\ \\ 0\hspace{0.2cm}(\overline{q}_{b}(u,v)=0) \end{array} \right.

进行逆量化,其中, \displaystyle R_{\overline{q}_{b}(u,v)}  表示一个逆量化变换系数,而  N_{b}(u,v)  和 \overline{q}_{b}(u,v)  的解码位平面的数量。由解码器选择的重建参数 r 是为了获得最佳的视觉或客观重建质量。通常,0 ≤ r < 1,常用值为 r = 1.2 。则逆量化系数是通过使用一个 \mathbf{FWT}^{-1}  滤波器组实现的按列和按行的逆变换,该滤波器组的系数可从表 7.1 获得,或通过下述基于提升的操作求得:

(8-66)

\begin{array}{lc} X (2n) = K{\cdot} Y(2n) \hspace{0.2cm} ( i_{0} - 3 \le 2n < i_{1} + 3 ) \\ \\ X (2n + 1) = (-1/K )Y(2n + 1) \hspace{0.2cm}( i_{0} - 2 \le 2n < i_{1} + 2 ) \\ \\ X (2n) = X(2n) - \delta[ X(2n - 1) + X(2n + 1)] \hspace{0.2cm}( i_{0} - 13 \le 2n < i_{1} + 3 ) \\ \\ X (2n + 1) = X(2n + 1) - \gamma[ X(2n) + X(2n + 2)] \hspace{0.2cm}( i_{0} - 2 \le 2n + 1 < i_{1} + 2 ) \\ \\ X (2n) = X (2n) - \beta[ X(2n - 1) + X(2n + 1)] \hspace{0.2cm}( i_{0} - 1 \le 2n < i_{1} + 1 ) \\ \\ X (2n + 1) = X (2n + 1) - \alpha[ X(2n) + X(2n + 2)] \hspace{0.2cm} ( i_{0} \le 2n + 1 < i_{1} ) \end{array}

其中参数 α , β , γ , δ ,和 K 的定义与公式 (8-61) 相同。必要时,逆量化系数行或列元素 Y(n) 进行对称扩展。最终的解码步骤包括分量图块的组装、逆分量变换(如有必要)以及 DC 电平偏移 。对于不可逆编码,该逆分量变换为

(8-67)                

\begin{array}{lc} I_{0}( x ,y ) = Y_{0}( x ,y ) + 1.402Y_{2}( x ,y )\\\\ I_{1}( x ,y ) = Y_{0}( x ,y ) - 0.34413Y_{1}( x ,y ) - 0.71414Y_{2}( x ,y ) \\ \\ I_{2}( x ,y ) = Y_{0}( x ,y ) + 1.772Y_{1}( x ,y ) \end{array}

并且变换像素移动 +2^{Ssiz-1}  。

例子 8.28:基于小波编码的 JPEG-2000 与基于 DCT 压缩的 JPEG 之比较。

图 8.46 展示了图 8.9(a) 中单色图像的四种 JPEG-2000 近似值。图中的连续行展示了压缩率逐渐增加的情况,包括 C = 25 ,52,75 和 105 。第一列的图像是解压缩后的 JPEG-2000 编码。第二列显示了这些图像与原图像 [参见图 8.9(a)] 之间的差异,第三列则包含了第一列重建图像的放大区域。由于前两行的压缩比与例 8.18 中的压缩比几乎相同,因此可以将这些结果与图 8.29( a ) 至 ( f ) 中基于 JPEG 变换的结果进行定性和定量比较。

    将图 8.46 第 1 行和第 2 行的误差图像与图 8.29(b) 和 (e) 中的对应图像进行视觉比较,可以明显看出 JPEG-2000 结果的误差显著降低——分别为 3.86 和 5.77 个强度等级,而 JPEG 结果的误差分别为 5.4 和 10.7 个强度等级。计算得到的误差在两种压缩级别下都更有利于基于小波变换的结果。除了降低重建误差外,小波编码还显著提高了(主观意义上的)图像质量。值得注意的是,JPEG 结果中普遍存在的块效应[参见图 8.29(c) 和 ( f )]在图 8.46 中并不存在。最后,我们注意到图 8.46 第 3 行和第 4 行所示的压缩效果对于 JPEG 而言并不实用。JPEG-2000 能够提供压缩比超过 100:1 的可用图像,但最令人不满意的劣化是图像模糊加剧

-------------------------图 8.46:图 8.9(a) 的四个 JPEG-2000 近似图像。每一行包含压缩和重建后的结果、结果与原图像之间的缩放差异,以及重建图像的放大区域。(将第 1 行和第 2 行的结果与图 8.29 中的 JPEG 结果进行比较。)--------------------

 

8.12  数字图像加水印(Digital Image Watermarking)

    第 8.2 至 8.11 节的方法和标准使得在数字媒体和互联网上分发图像(照片或视频)成为可能。然而,遗憾的是,如此分发的图像可以无误地反复复制,则会危及图像所有者的版权。即使经过加密分发,图像在解密后也失去了保护。一种防止非法复制的方法是将一个或多个信息项(统称为水印)插入到可能存在安全漏洞的图像中,使水印与图像本身密不可分。作为水印图像的组成部分,水印以多种方式保护其所有者的权利,包括:

(1) 版权识别。当所有者的权利受到侵犯时,水印可以提供作为所有权证明的信息。

(2) 用户识别或指纹识别。合法用户的身份信息可以编码在水印中,用于识别非法复制的来源。

(3) 真实性鉴定。水印的存在可以保证图像未被篡改,前提是水印的设计使得图像在遭受任何修改时都会销毁。

(4) 自动监控。水印可以通过跟踪图像使用时间和地点的系统进行监控(例如,在网络上搜索放置在网页上的图像的程序)。监控有助于收取版税和/或定位非法用户。

(5) 复制保护。水印可以指定图像的使用和复制规则(例如,复制到 DVD 播放器)。

本节简要概述数字图像水印技术,该技术是将数据插入图像,以便对图像进行信息断言的过程。所描述的方法与前几节中介绍的压缩技术几乎没有共同之处(尽管它们都涉及信息编码0。事实上,水印和压缩在某些方面是相反的。压缩的目标是减少用于表示图像的数据量,而水印的目标是向图像添加信息和数据(即水印)。正如本节剩余部分将要看到的那样,水印本身可以是可见的,也可以是不可见的

    可见水印是指放置在另一幅图像(即被添加水印的图像)之上的不透明或半透明的子图像或图像,以便观众能够明显地看到它。电视网络通常会在电视屏幕的右上角或右下角放置可见水印(其设计模仿了电视台的标志)。如下例所示,可见水印通常在空间域中实现

例子 8.29:一个简单的可视水印。

    图 8.47(b) 中的图像是图 8.9(a) 中图像的右下象限,并在其上叠加了图 8.47(a) 中水印的缩放版本。令 f_{w}  表示加了水印的图像,我们可以将其描述为未加水印图像和水印 w  的一个线性组合,即

(8-68)                 f_w = (1 - \alpha)f + {\alpha}w

其中,α  控制水印和底层图像的可视度。若 α 是 1 ,水印是不透明的,下面的图像完全被遮盖住了。随着 α 趋近于 0 ,底层图像的大部分和水印的小部分可见,通常 0 ≤ α   < 1 ;在图 8.47(b)中,α = 0.3 。图 8.47(c) 是图 8.9(a) 中带水印图像与未加水印图像之间的计算差异(按强度缩放)。强度 128 表示差为 0。请注意,底层图像清晰可见,透过“半透明”水印可以明显看出这一点。这在图 8.47(b) 和图 8.47(c) 的差图像中均有体现。

------------------------图 8.47:一个简单的可见水印:(a)水印;(b)加水印的图像;以及(c)加水印的图像与原(未加水印)图像之间的差。-------------------------------

    与前例中可见的水印不同,不可见水印肉眼无法看到。它们难以察觉,但可以通过适当的解码算法恢复。为了确保其不可见性,我们将其作为视觉冗余信息插入图像中[即人类视觉系统忽略或无法感知的信息(参见第 8.1 节)]。图 8.48(a) 提供了一个简单的示例。由于 8 位图像的最低有效位几乎不会影响我们对图像的感知,因此图 8.47(a) 中的水印被插入或“隐藏”在其最低两位中。使用前面介绍的符号,我们令

(8-69)                \displaystyle f_{w} = 4\left (\frac{f}{4} \right ) + \frac{w}{64}

并使用无符号整数运算进行计算。除以 4 和乘以 4 将 f 的最低两位设为 0,将 w 除以 64 将其最高两位移位到最低两位,将这两个结果相加即可生成 LSB 水印图像。请注意,嵌入的水印在图 8.48(a) 中不可见。但是,通过将该图像的最高 6 位设为 0 并将剩余值缩放到完整强度范围,可以提取出水印,如图 8.48(b) 所示。

    不可见水印的一个重要特性是它们能够抵抗意外或故意的移除尝试脆弱型不可见水印(Fragile invisible watermarks)会被嵌入其中的图像的任何修改所破坏。在某些应用中,例如图像认证,这是一个理想的特性。如图 8.48(c) 和 (d) 所示,图 8.48(a) 中的 LSB 水印图像包含一个脆弱型不可见水印。如果使用有损 JPEG 对 (a) 中的图像进行压缩和解压缩,水印将被破坏。图 8.48(c) 是图 8.48(a) 经过压缩和解压缩后的结果;均方根误差为 2.1 位。如果我们尝试使用与 (b) 中相同的方法从该图像中提取水印,结果将无法辨认[参见图 8.48(d)]。虽然有损压缩和解压缩保留了图像中重要的视觉信息,但脆弱的水印却被破坏了

---------------图 8.48:一个简单的隐形水印:(a) 加水印图像;(b)提取的水印;(c)经过高质量 JPEG 压缩和解压缩后的加水印图像;(d)从(c)中提取的水印。---------

稳健的隐形水印(Robust invisible watermarks)旨在抵御图像篡改,无论所谓的攻击是无意的还是故意的。常见的无意攻击包括有损压缩、线性滤波和非线性滤波、裁剪、旋转、重采样等。故意攻击则包括打印、重新扫描以及添加额外的水印和/或噪声。当然,无需抵御那些导致图像本身无法使用的攻击。

    图 8.49 表明,一个典型的图像加水印系统的基本组件。图 8.49 (a) 中的编码器将水印 w_{i}  插入图像 f_{i}  中产生水印图像 f_{wi}  ; (b) 中的互补解码器提取并检验加水印输入 f_{wi}  或未加水印输入 f_{j}  中 w_{i}  的出现。若  w_{i}  可见,则不需要解码器。若不可见,则解码器可能会也可能不会要求 f_{i}  和 w_{i}  [ 见图 8.49(b)中的蓝色]完成其工作。若用到 f_{i}  和/或  w_{i}  ,则此加水印系统称为私钥受限密钥系统;否则,称其为公钥无限制密钥系统。因为解码器必须处理已标记和未标记的图像,在图 8.49(b)中, w_{\emptyset}  用于表示一个水印的出现。最后,我们注意到,为了确定一幅图像中  w_{i} 的出现,解码器必须将提取的水印   w_{j}    与  w_{i}  关联起来并将结果与预定义的阈值进行比较。阈值设定了“匹配”可接受的相似度程度。

------------图 8.49:典型的图像加水印系统:(a)编码器;(b) 解码器。------------

例子 8.30:一种基于 DCT 的不可见强健水印。

标记的插入和提取可以在空间域中进行(如前面的示例所示),也可以在变换域中进行。图 8.50(a) 和 (c) 显示了图 8.9(a) 中图像的两个水印版本,使用了本文概述的基于 DCT 的水印方法( Cox 等人 [1997] ):

I  计算待添加水印图像的二维离散余弦变换 (2-D DCT)。

II  按大小求得其 K 个最大系数  c_{1} , c_{2} ,\hdots ,c_{K}  。

III  通过生成一个 K 元伪随机数序列  \omega_{1} , \omega_2 ,\hdots , \omega_K  来创建一个水印,该序列取自均值为 μ = 0 , 方差为 \sigma^{2}=1  的 Gauss 分布。( 注:伪随机数序列近似于随机数的性质。它并非真正随机,因为它依赖于预先设定的初始值。)

IV  使用以下公式将步骤 3 中的水印嵌入到步骤 2 中最大的 K 个 DCT 系数中:

(8-70)                c_{i}^{'} = c_{i} {\cdot} ( 1 + {\alpha}\omega_{i} ) ( 1 \le i \le K )

( 对于一个具体的常量 α > 0 ( 其控制着  ) \omega_{i}  改变 c_{i}  的程度 ) 。将源 c_{i}  从根据公式 (8-70) 计算得到的 c_{i}^{'}  。( 对于 8.50 中的图像,α = 0.1 而 K = 1000  。 )

V  计算步骤 4 结果的逆 DCT 。

--------------------------图 8.50:(a) 和 (c) : 图 8.9(a) 的两个加水印版本;(b) 和 (d) :加水印版本与未加水印图像之间的差异(强度已缩放)。这两幅图显示了伪随机水印对原图像的强度贡献(尽管缩放幅度很大)。--------------------------------

    通过使用由伪随机数构成的水印,并将其分布在图像中感知上重要的频率分量上,可以减小水印的尺寸,从而降低水印的可见性。同时,水印的安全性也很高,因为:(1) 水印由伪随机数组成,没有明显的结构;(2) 水印嵌入在整个二维图像上具有空间影响的多个频率分量中(因此其位置不易察觉);(3) 针对水印的攻击往往也会降低图像质量(即,必须改变图像最重要的频率分量才能影响水印)。

    图 8.50(b) 和 (d) 展示了由嵌入图 8.50(a) 和 (c) 水印图像的 DCT 系数中的伪随机数引起的图像强度变化。显然,伪随机数必然会对水印图像产生影响(即使影响很小,肉眼无法察觉)。为了展示这种影响,我们从图 8.9(a) 的未标记图像中减去了图 8.50(a) 和 (c) 中的图像,并将图像强度缩放到 [0, 255] 范围内。图 8.50(b) 和 (d) 是最终得到的图像;它们展示了伪随机数的二维空间贡献。然而,由于图像已被缩放,因此不能简单地将这些图像添加到图 8.9(a) 中的图像,从而得到图 8.50(a) 和 (c) 中的水印图像。如图 8.50(a) 和 (c) 所示,它们的实际强度扰动很小,可以忽略不计。

为了确定一幅具体的图像是否为前述具有水印 {\omega}_1 , {\omega}_2 ,\hdots,{\omega}_K  和 DCT 系数 c_{1} , c_{2} ,\hdots ,c_{K}  的水印图像的一个副本,我们使用下述的过程:

I  计算所讨论图像的二维离散余弦变换 (2-D DCT)。

II  提取 K 个系数(在加水印过程中的步骤 2 中对应于   c_{1} , c_{2} ,\hdots ,c_{K}  的位置)并将其表示为 \hat{c}_{1},\hat{c}_{2} , \hdots, \hat{c}_{K}  。若其为一幅加水印图像的一个副本(即,处于某种针对水印的攻击中),则对于 1 ≤ i ,有   \hat{c}_{i} \approx \hat{c}_{i}^{'}   (  \hat{c}_{i}   将是    c_{i}^{'}  的一个近似 )  。否则 ,所讨论的图像将是未加水印的图像或带有完全不同的水印的图像,并且 \hat{c}_{i}  与原 \hat{c}_{i}  没有任何相似之处。

II  使用公式

(8-71)                \displaystyle \hat{\omega}_{i} = \frac{\hat{c}_i-c_{i}}{​{\alpha}c_{i}} \hspace{0.2cm} (1 \le i \le k )

来计算水印    {\omega}_1 , {\omega}_2 , \hdots,{\omega}_K   。请记住,水印是由伪随机数组成的序列。

IV     使用一个测度度量   \hat{\omega}_{1} , \hat{\omega}_{2} , \hdots,\hat{\omega}_{K}   (来自以上第 III  步) 和   {\omega}_1 , {\omega}_2 ,\hdots ,{\omega}_K  (来自加水印过程的第 III  步)的相似性,例如,使用相关系数度量公式

(8-72)        \displaystyle \gamma=\frac{\displaystyle \sum_{i=1}^{K}(\hat{\omega}_{i}-\overline{\hat{\omega}})({\omega_{i}}-\overline{\omega})}{\displaystyle \sqrt{\sum_{i=1}^{K}(\hat{\omega}_{i}-\overline{\hat{\omega}})^{2}({\omega_{i}}-\overline{\omega})^{2}}} \hspace{0.2cm}( 1 \le i \le K )

其中,\overline{\omega}  和 \overline{\hat{w}}  分别是两个 K 元素水印的均值。( 注:相关系数在第 12.3 节中有详细讨论。)

V        将测得的相似度  γ  与预定义的阈值  T  进行比较,并做出二元检测决策:

(8-73)        D=\left \{\begin{array}{lr} 1 \hspace{0.2cm}(\gamma \ge T) \\ \\ 0 \hspace{0.2cm}(\text{otherwise}) \end{array} \right.

换言之,D = 1 表明水印  {\omega}_1 , {\omega}_2 ,\hdots ,{\omega}_K  存在(针对具体的阈值 T );D = 0 表明水印不存在。

使用此方法,将图 8.50(a) 中的原水印图像与其自身进行比较,得到相关系数为 0.9999,即 γ = 0.9999 。这是一个毫无疑问的匹配。类似地,将图 8.50(b) 中的图像与图 8.50(a) 中的图像进行比较,得到的 γ 值为 0.0417。由于相关系数如此之低,它不可能与图 8.50(a) 中的水印图像混淆。

    在本节最后,我们注意到,前例中基于 DCT 的水印方法具有相当强的抗水印攻击能力,部分原因是它是一种私钥或受限密钥方法。受限密钥方法总是比非受限密钥方法更具健壮性。图 8.51 以图 8.50(a)中的水印图像为例,展示了该方法抵御各种常见攻击的能力。如图所示,在所实施的攻击范围内,水印检测效果都相当不错;所得相关系数(图中每幅图像下方所示)介于 0.3113 到 0.9945 之间。当进行高质量但有损(导致均方根误差为 7个强度级)的 JPEG 压缩和解压缩时,γ = 0.9945 。即使压缩和重建导致均方根误差为10 个强度级,γ 也仅为 0.7395 ;此时图像的可用性已显著降低。通过空间滤波进行显著平滑处理并添加 Gauss 噪声并不能将相关系数降低到 0.8230 以下。然而,直方图均衡化可将 γ 值降低至 0.5210 ;旋转的影响最大,可将 γ 值降低至 0.3313 。除图 8.51(a) 中的有损 JPEG 压缩和重建外,所有攻击都显著降低了原水印图像的可用性。

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值