Chapter 3 Image processing

3.1点位操作员     109

3.1.1像素变换     111

3.1.2颜色变换     112

3.1.3合成和遮罩     113

3.1.4直方图均衡化     115

3.1.5应用:音调调整     119

3.2线性滤波     119

3.2.1可分离过滤     124

3.2.2线性滤波器示例     125

3.2.3带通和可调滤波器     127

3.3更多社区运营商     131

3.3.1非线性滤波     132

3.3.2双边滤波     133

3.3.3二值图像处理     138

3.4傅里叶变换     142

3.4.1二维傅立叶变换     146

3.4.2应用:锐化、模糊和去噪     148

3.5塔和波浪     149

3.5.1插值     150

3.5.2消减     153

3.5.3多分辨率表示     154

3.5.4小波     159

3.5.5应用:图像融合     165

3.6几何变换     168

3.6.1参数变换     168

3.6.2基于网格的变形     175

3.6.3应用:基于特征的变形     177

3.7其他阅读材料     178

3.8练习     180

图3.1一些常见的图像处理操作:(a)局部直方图均衡化;(b)由二阶可导向滤波器计算的方向图(Freeman 1992)©1992 IEEE;(c)双滤波器(Durand和Dorsey 2002)©2002 ACM;(d)图像金字塔;(e)拉普拉斯金字塔融合(Burt和Adelson 1983b)©1983 ACM;(f)基于线的图像变形(Beier和Neely 1992)©1992 ACM。

既然我们已经了解了图像如何通过三维场景元素、光照和相机光学及传感器的相互作用形成,现在让我们来看看大多数计算机视觉算法中的第一阶段,即使用图像处理来预处理图像并将其转换为适合进一步分析的形式。这些操作的例子包括曝光校正和色彩平衡、减少图像噪声、增强锐度或通过旋转来校正图像。其他例子还包括图像变形和图像融合,这些通常用于视觉效果(图3.1和第3.6.3节)。虽然有些人可能认为图像处理超出了计算机视觉的范畴,但大多数计算机视觉应用,如计算摄影甚至识别,都需要在设计图像处理阶段时谨慎行事,以获得满意的结果。

在本章中,我们回顾了将像素值从一张图像映射到另一张图像的标准图像处理算子。图像处理通常作为信号处理入门课程的后续课程,在电气工程系教授(Oppenheim和Schafer 1996;Oppenheim、Schafer和Buck 1999)。关于图像处理,有几本广受欢迎的教科书,包括Gomes和Velho(1997)、Ja...hne(1997)、Pratt(2007)、Burger和Burge(2009)以及Gonzalez和Woods(2017)。

我们从最简单的图像变换开始,即那些独立于邻近像素操作每个像素的变换(第3.1节)。这类变换通常被称为点算子或点过程。接下来,我们将探讨邻域(基于区域)算子,其中每个新像素的值取决于少数几个相邻输入值(第3.2节和第3.3节)。分析(有时加速)此类邻域操作的一个便捷工具是傅里叶变换,我们在第3.4节中介绍。邻域算子可以级联形成图像金字塔和小波,这些对于在不同分辨率(尺度)下分析图像以及加速某些操作非常有用(第3.5节)。另一类重要的全局算子是几何变换,如旋转、剪切和透视变形(第3.6节)。

虽然本章主要介绍了经典图像处理技术,这些技术大多由线性和非线性滤波操作组成,但接下来的两章将介绍基于能量和贝叶斯图模型,即马尔可夫随机场(第4章),以及深度卷积网络(第5章),这两种方法现在在图像处理应用中被广泛使用。

3.1点位操作员

最简单的图像处理变换是点运算符,其中每个输出像素的值只取决于相应的输入像素值(可能还有一些

图3.2一些局部图像处理操作:(a)原始图像及其三个颜色(每通道)直方图;(b)亮度增加(加性偏移,b = 16);(c)对比度增加(乘性增益,a = 1.1);(d)伽马(部分)线性化(√= 1.2);

(e)全直方图均衡化;(f)部分直方图均衡化。

图3.3图像数据可视化:(a)原始图像;(b)使用图像检查工具裁剪部分和扫描线图;(c)数字网格;(d)表面图。对于图(c)-(d),首先将图像转换为灰度。

全局收集的信息或参数)。此类操作的示例包括亮度和对比度调整(图3.2)以及颜色校正和转换。在图像处理文献中,此类操作也被称为点过程(Crane1997)。1

我们首先简要回顾简单的点操作,如亮度缩放和图像叠加。接着,讨论如何处理图像中的颜色。然后介绍图像合成和遮罩操作,这些在计算摄影(第十章)和计算机图形应用中起着重要作用。最后,描述全局的直方图均衡过程。以一个示例应用结束,该应用通过调整色调值(曝光和对比度)来改善图像效果。

3.1.1像素变换

一般图像处理运算符是一个函数,它接受一个或多个输入图像并产生输出图像。在连续域中,这可以表示为

g(x) = h(f (x))或g(x) = h(f0 (x),...,fn (x)),                     (3.1)

其中,x属于输入和输出函数f和g的D维(通常D = 2,对于图像而言)域,这些函数作用于某个范围,该范围可以是标量或向量值,例如彩色图像或二维运动。对于离散(采样)图像,域由有限数量的像素位置组成,x =(i,j),我们可以表示为

g(i, j) = h(f (i, j)).                                            (3.2)

图3.3显示了如何用颜色(外观)、数字网格或二维函数(表面图)来表示图像。

两个常用的点过程是乘法和加法与常数,

g (x) = af (x) + b.                                          (3.3)

参数a > 0和b通常被称为增益和偏置参数;有时这些参数分别被说成是控制对比度和亮度(图3.2b-c)。2偏置和增益参数也可以是空间变化的,

g(x) = a(x)f (x) + b(x),                                        (3.4)

例如,当模拟摄影师使用的分级密度滤镜以选择性地加深天空或在光学系统中建模暗角时。

乘法增益(全局和空间变化)是一个线性操作,因为它遵循叠加原理,

h(f0 + f1 ) = h(f0 ) + h(f1 ).                                     (3.5)

(关于线性移位不变算子,我们将在第3.2节中详细讨论。)像图像平方这样的算子(通常用于获得带通滤波信号的能量局部估计,参见第3.5节)不是线性的。

另一个常用的二元(两个输入)运算符是线性混合运算符,

g (x) = (1 - Q)f0 (x) + Qf1 (x).                                (3.6)

通过将Q从0→1变化,该运算符可用于在两个图像或视频之间执行时间交叉溶解,如幻灯片和电影制作中所见,或作为图像变形算法(Section3.6.3)的组成部分。

伽马校正是一种常用的非线性变换,通常在图像进一步处理之前应用。它用于消除输入辐射与量化像素值之间的非线性映射(第2.3.2节)。为了逆向传感器应用的伽马映射,我们可以使用

g(x) = [f (x)]1/    ,                                             (3.7)

对于大多数数码相机来说,伽马值√≈2.2是一个合理的拟合。

3.1.2颜色变换

虽然彩色图像可以被看作是任意的矢量值函数或独立波段的集合,但通常认为它们是高度相关的信号

图3.4图像遮罩和合成(Chuang,Curless         (et al.2001)©2001 IEEE:

(a)源图像;(b)提取前景对象F;(c)灰度显示的alpha遮罩Q;(d)新的合成C。

与图像形成过程(第2.2节)、传感器设计(第2.3节)和人类感知(第2.3.2节)有密切联系。例如,考虑通过向所有三个通道添加一个常数值来增强图片亮度,如图3.2b所示。你能判断这是否达到了使图像看起来更亮的效果吗?你能否看到任何不良的副作用或伪影?

事实上,向每个颜色通道添加相同的值不仅会增加每个像素的表观强度,还会对像素的色调和饱和度产生影响。我们如何定义和操作这些量以达到预期的感知效果?

如第2.3.2节所述,可以先计算色度坐标(2.105)或更简单的颜色比率(2.117),然后在调整亮度Y(例如,增强亮度)后,重新计算出具有相同色调和饱和度的有效RGB图像。图2.33f至h显示了一些颜色比率图像与中间灰度值相乘后的图像,以便更好地可视化。

同样地,色彩平衡(例如,补偿白炽灯照明)可以通过将每个通道乘以不同的比例因子来实现,或者通过更复杂的过程,即映射到XYZ颜色空间,改变标称白点,然后再映射回RGB,这可以使用线性的3×3颜色扭曲变换矩阵来表示。练习2.8和3.1让你探索这些问题。

另一个有趣的项目,最好是在你掌握了本章的其他内容之后再尝试,就是拍一张有彩虹的照片并增强彩虹的强度(练习3.29)。

3.1.3合成和遮罩

在许多照片编辑和视觉效果应用程序中,通常希望将前景对象从一个场景中剪切出来,并将其置于不同的背景之上(图3.4)。从原始图像中提取对象的过程通常称为遮罩(Smith和Blinn

图3.5合成方程C =(1 - Q)B + QF。图像取自a

图3.4中狮子右上方头发区域的特写。

1996),而将其插入到另一图像中(无可见伪影)的过程称为合成(Porter和Duff1984;Blinn1994a)。

用于这两个阶段之间前景对象的中间表示称为透明度图像(图3.4b-c)。除了三个颜色的RGB通道外,透明度图像还包含一个第四通道Q(或A),描述每个像素的相对不透明度或部分覆盖量(图3.4c和3.5b)。不透明度是透明度的对立面。对象内的像素完全不透明(Q = 1),而完全位于对象外部的像素则完全透明(Q = 0)。对象边界上的像素在这两个极端之间平滑变化,这隐藏了仅使用二值不透明度时可能出现的视觉锯齿。

若要在旧图像(背景)上合成新图像(前景),则使用覆盖运算符,该运算符最初由Porter和Duff(1984)提出,然后由Blinn(1994a;1994b)进行了广泛研究:

C = (1 - Q)B + QF.                                           (3.8)

该运算符以因子(1 - Q)减弱背景图像B的影响,然后添加与前景层F相对应的颜色(和不透明度)值,如图3.5所示。

在许多情况下,以预乘形式表示前景颜色更为方便,即直接存储(和处理)QF值。正如布林(1994b)所展示的,预乘RGBA表示法因其多种优势而受到青睐,包括能够模糊或重采样(例如旋转)透明图像而不会产生额外复杂性(只需独立处理每个RGBA通道)。然而,在使用局部颜色一致性进行遮罩时(鲁宗和托马西2000;庄、柯尔斯等2001),则使用纯未乘前景颜色F,因为这些颜色在物体边缘附近保持不变(或变化缓慢)。

过度操作并不是唯一可以使用的合成操作。Porter

图3.6图片框透明玻璃反射光线的例子(Black和Anandan1996)©1996 Elsevier。你可以清楚地看到,图片框内的女性肖像与玻璃上反射出的男性面孔重叠在一起。

Duff(1984)描述了一些在照片编辑和视觉效果应用中可能有用的其他操作,在本书中我们只关注一个常见的额外情况(但请参见练习3.3)。

当光线从干净透明的玻璃反射时,穿过玻璃的光和从玻璃反射回来的光简单地相加(图3.6)。这种模型在分析透明运动时非常有用(Black和Anandan 1996;Szeliski、Avidan和Anandan 2000),这发生在从移动摄像机观察此类场景时(见第9.4.2节)。

实际的抠图过程,即从一张或多张图像中恢复前景、背景和透明度值,有着丰富的历史,我们将在第10.4节中研究。Smith和Blinn(1996)对传统的蓝幕抠图技术进行了很好的综述,而Toyama、Krumm等人(1999)则回顾了差异抠图。自那时起,计算摄影领域在自然图像抠图方面开展了大量活动(Ruzon和Tomasi 2000;Chuang、Curless等人2001;Wang和Cohen 2009;Xu、Price等人2017),这些研究试图从单个自然图像(图3.4a)或扩展的视频序列中提取抠图(Chuang、Agarwala等人2002)。所有这些技术都在第10.4节中有更详细的描述。

3.1.4直方图均衡化

虽然第3.1.1节中描述的亮度和增益控制可以改善图像的外观,但我们如何自动确定它们的最佳值呢?一种方法可能是查看图像中最暗和最亮的像素值,并将它们映射为纯黑和纯白。另一种方法可能是找到图像中的平均值,然后将其

图3.7直方图分析和均衡化:(a)原始图像;(b)颜色通道和强度(亮度)直方图;(c)累积分布函数;(d)均衡化(转移)函数;(e)全直方图均衡化;(f)部分直方图均衡化。

向中间灰度方向扩展范围,使其更接近于可显示的值(Kopf,Uyttendaele等人,2007)。

我们如何将图像中的亮度值集可视化以测试这些启发式方法?答案是绘制各个颜色通道和亮度值的直方图,如图3.7b.3所示。通过这一分布,我们可以计算出相关的统计量,例如最小值、最大值和平均强度值。请注意,图3.7a中的图像既有过多的暗值也有过多的亮值,但中间范围的值却明显不足。如果我们能够同时增强一些暗值并减弱一些亮值,同时充分利用可用的动态范围,岂不是更好?你能想到一个可能实现这一点的映射吗?

一个广受欢迎的答案是进行直方图均衡化,即找到一个强度映射函数f (I),使得生成的直方图变得平坦。寻找这种映射的方法与人们从概率密度函数中生成随机样本的方法相同,首先计算累积分布函数。

3直方图就是每个灰度级的像素数的计数。对于8位图像,需要一个包含256个条目的累加表。对于更高位深度,应该使用具有适当条目数(可能少于全部灰度级)的表。

如图3.7c所示。

将原始直方图h(I)视为某次考试后班级成绩的分布。如何将某个特定分数映射到相应的百分位数,使得处于第75%百分位的学生得分高于其同学的四分之三?答案是整合分布h(I),以获得累积分布c(I),

其中N是图像中的像素数或班级中的学生人数。对于任何给定的等级或强度,我们可以查找其对应的百分位数c(I),并确定该像素应取的最终值。在处理八位像素值时,I和c轴会从[0,255]进行重新缩放。

图3.7e展示了将f (I) = c(I)应用于原始图像的结果。可以看出,生成的直方图是平坦的;因此生成的图像也是如此(它“平坦”是指缺乏对比度且看起来模糊)。一种补偿方法是部分地校正直方图的不均匀性,例如使用映射函数f (I) = Qc(I) +(1 - Q)I,这是累积分布函数与恒等变换(一条直线)之间的线性混合。如图3.7f所示,生成的图像保留了更多的原始灰度分布,同时具有更吸引人的平衡。

直方图均衡化(或更广泛地说,图像增亮)的另一个潜在问题是,暗区的噪声可能会被放大并变得更加明显。练习3.7建议了一些可能的方法来缓解这一问题,以及替代技术以保持原始图像的对比度和“冲击力”(Larson,Rushmeier和Piatko 1997;Stark 2000)。

局部自适应直方图均衡化

虽然全局直方图均衡化可能有用,但对于某些图像来说,在不同区域应用不同类型的均衡化可能更为合适。例如图3.8a中的图像,其亮度值范围很广。与其计算一条曲线,不如将图像划分为M×M像素块,并在每个子块中分别进行直方图均衡化呢?如图3.8b所示,这样处理后得到的图像出现了许多块状伪影,即在块边界处强度不连续。

消除块状伪影的一种方法是使用移动窗口,即针对每个像素为中心的M×M块重新计算直方图。这一过程可能相当缓慢(每像素需要M²次操作),但通过巧妙编程,只需处理进出块的像素对应的直方图条目(在图像的光栅扫描过程中)。

图3.8局部自适应直方图均衡化:(a)原始图像;(b)块

togram均衡;(c)全局部自适应均衡。

需要更新(每个像素的M次操作)。请注意,此操作是我们将在第3.3.1节中详细研究的非线性邻域操作的一个示例。

一种更高效的方法是像以前那样计算非重叠块基等化函数,但在移动到不同块时平滑插值传输函数。这种技术被称为自适应直方图均衡(AHE),其对比度受限(增益受限)版本称为CLAHE (Pizer,Amburn等,1987)。给定像素(i,j)的加权函数可以作为其在块内的水平和垂直位置(s,t)的函数来计算,如图3.9a所示。为了混合四个查找函数{f00,...,f11 },使用双线性混合函数,

fs,t (I) =(1 - s)(1 - t)f00 (I) + s(1 - t)f10 (I) +(1 - s)tf01 (I) + stf11 (I)(3.10)

可以使用。(有关此类样条函数的高阶推广,请参见第3.5.2节。)请注意,我们不必为每个输出像素混合四个查找表(这将非常慢),而是可以混合给定像素通过四个相邻查找表映射的结果。

该算法的一个变体是将查找表放置在每个M×M块的角落(见图3.9b和练习3.8)。除了通过混合四个查找来计算最终值外,我们还可以在直方图累积阶段将每个输入像素分配到四个相邻的查找表中(注意图3.9b中的灰色箭头双向指向),即,

hk,l(I(i,j))+= w(i,j,k,l),                                     (3.11)

其中w(i,j,k,l)是像素(i,j)和查找表(k,l)之间的双线性加权函数。这是软直方图的一个例子,它被用于多种其他应用中,包括SIFT特征描述符的构建(第7.1.3节)和词汇树(第7.1.4节)。

4 CLAHE算法是OpenCV的一部分。

图3.9使用相对(s;t)坐标进行局部直方图插值:(a)基于块的直方图,块中心以圆圈表示;(b)基于角点的“样条”直方图。像素位于网格交点上。黑色方像素的传输函数通过计算出的(s;t)值从四个相邻的查找表(灰色箭头)中插值得到。块边界用虚线表示。

3.1.5应用:音调调整

点处理图像运算符最广泛的应用之一是调整照片的对比度或色调,使其看起来更加吸引人或更易理解。你可以通过打开任何照片编辑工具并尝试各种对比度、亮度和颜色调整选项来了解可能的操作范围,如图3.2和3.7所示。

练习3.1、3.6和3.7要求你实现一些操作,以便熟悉基本的图像处理运算符。更复杂的色调调整技术(Bae、Paris和Durand 2006;Reinhard、Heidrich等2010)在高动态范围色调映射部分(第10.2.1节)中有所描述。

3.2线性滤波

局部自适应直方图均衡是一种邻域算子或局部算子的例子,它利用给定像素周围的一组像素值来确定其最终输出值(图3.10)。除了进行局部色调调整外,邻域算子还可以用于滤波图像,以增加柔和的模糊效果、锐化细节、突出边缘或去除噪声(图3.11b-d)。在本节中,我们将探讨线性滤波算子,这些算子涉及小邻域内像素的固定加权组合。在第3.3节中,

图3.10邻域滤波(卷积):左边的图像与中间的滤波器进行卷积,得到右边的图像。浅蓝色像素表示浅绿色目标像素的源邻域。

我们研究非线性算子,如形态学滤波器和距离变换。

最常用的邻域运算符是线性滤波器,其中输出像素的值是小邻域N(图3.10)内像素值的加权和,                                    

(3.12)

权重核或掩模h(k,l)中的条目通常被称为滤波器系数。上述相关算子可以更简洁地表示为

g = f    h.                                                 (3.13)

该公式的常见变体是

其中f的偏移量的符号被反转了,这被称为卷积算子,

g = f * h,                                                 (3.15)

然后,h被称为脉冲响应函数。5这个名称的原因是,核函数h与脉冲信号δ(i,j)(一个除原点外处处为0的图像)卷积后会重现自身,即h * δ = h,而相关则会产生反射信号。(你可以自己尝试验证这一点。)

5连续卷积可以写成g(x)=f(x-u)h(u)du。

图3.11某些邻域操作:(a)原始图像;(b)模糊;(c)锐化;(d)使用边缘保持滤波器平滑;(e)二值图像;(f)膨胀;(g)距离变换;(h)连通分量。对于膨胀和连通分量,假设黑色(墨水)像素为活跃像素,即在公式(3.44–3.48)中值为1。

图3.12一维信号卷积作为稀疏矩阵-向量乘法,g = Hf。

事实上,公式(3.14)可以解释为移位脉冲响应函数h(i-k,j-l)与输入像素值f(k,l)的叠加(相加)。卷积具有额外的优良性质,例如,它既可交换又可结合。此外,两个卷积图像的傅里叶变换是它们各自傅里叶变换的乘积(第3.4节)。

相关和卷积都是线性移位不变(LSI)算子,它们都遵循叠加原理(3.5),

h o (f0 + f1 ) = h o f0 + h o f1 ,                                (3.16)

以及变换不变性原理,

g(i, j) = f (i + k, j + l)    ,    (h o g)(i, j) = (h o f)(i + k, j + l),          (3.17)

这意味着移动信号与应用算子是等价的(o代表LSI算子)。另一种理解移位不变性的方式是,算子“在任何地方都表现相同”。

偶尔,可能会使用相关或卷积的移位变体版本,例如,                                  

(3.18)

其中h(k,l;i,j)是像素(i,j)处的卷积核。例如,这种空间变化的核可以用来模拟由于深度依赖的离焦而引起的图像模糊。

如果我们将二维图像f (i,j)和g(i,j)转换为栅格顺序向量f和g,相关性和卷积都可以写成矩阵-向量乘法,

g = Hf ,                                                  (3.19)

其中(稀疏)H矩阵包含卷积核。图3.12显示了一维卷积如何以矩阵-向量形式表示。

图3.13边框填充(上排)和模糊填充图像的结果(下排)。归一化零图像是将模糊零填充RGBA图像除以相应的软阿尔法值的结果。

边距(边框效果)

精明的读者会注意到,图3.10所示的相关性结果比原始图像要小,这在许多应用中可能并不理想。这是因为典型的相关性和卷积操作的邻域延伸到了图像边缘附近,因此滤波后的图像受到了边界效应的影响。

为了解决这个问题,已经开发了多种不同的填充或扩展模式用于邻域操作(图3.13):

零:将源图像外的所有像素设置为0(alpha-matted剪切图像的好选择);

constant(边框颜色):将源图像外部的所有像素设置为指定的边框值;

-clamp(复制或夹紧到边缘):无限重复边缘像素;

•(循环)缠绕(重复或拼接):以“环形”配置在图像上“环绕”;

•镜头:在图像边缘反射像素;

-扩展:通过从边缘像素值中减去信号的镜像版本来扩展信号。

在计算机图形学文献中(Akenine-Mo...ller和Haines2002,第124页),这些机制被称为“包装模式”(OpenGL)或“纹理寻址模式”(Direct3D)。这些模式的公式留给读者自己去研究(练习3.9)。

图3.13展示了使用上述每种机制对图像进行填充,然后对填充后的图像进行模糊处理的效果。如你所见,零填充会使边缘变暗,夹紧(复制)填充会将边界值向内传播,镜像(反射)填充则保留靠近边界的颜色。扩展填充(未显示)在模糊过程中保持边界像素不变。

零填充的RGBA图像的替代方法是模糊零填充的RGBA图像,然后将得到的图像除以其alpha值以消除变暗效果。结果可以相当好,如图3.13中的归一化零图像所示。

3.2.1可分离过滤

执行卷积的过程需要对每个像素进行K2次(乘加)运算,其中K是卷积核的大小(宽度或高度),例如图3.14a中的框滤波器。在许多情况下,可以通过先进行一维水平卷积,再进行一维垂直卷积来显著加速这一操作,这总共需要每像素2K次运算。能够这样操作的卷积核被称为可分离的。

很容易证明,与水平核h和垂直核v连续卷积对应的二维核K是这两个核的外积,

K = vhT                                                                              (3.20)

(见图3.14的一些示例)。由于效率的提高,计算机视觉应用中卷积核的设计通常受到其可分离性的影响。

我们如何判断给定的核函数K是否确实可分离?这通常可以通过检查或查看核函数的解析形式来完成(Freeman和Adelson1991)。更直接的方法是将二维核函数视为二维矩阵K,并对其进行奇异值分解(SVD),

(SVD的定义见附录A.1.1)。如果只有第一个奇异值σ0是非零的,那么核是可分离的,√σ0 u0和√σ0 v提供垂直和水平方向

(上)为对应的水平一维核(中),(下)为滤波后的图像。滤波后的Sobel和角点图像分别以2×和4×的尺度放大,并在显示前加上灰度偏移。

核函数(Perona1995)。例如,高斯拉普拉斯核函数(3.26和7.23)可以实现为两个可分离滤波器的总和(7.24)(Wiejak,Buxton,and Buxton1985)。

如果你的核函数不可分离,但你仍然希望找到一种更快的实现方法呢?Perona(1995)首次建立了核函数可分离性与奇异值分解之间的联系,建议在(3.21)系列中使用更多的项,即累加多个可分离卷积。这样做是否值得,取决于K的相对大小以及显著奇异值的数量,以及其他考虑因素,如缓存一致性与内存局部性。

3.2.2线性滤波器示例

现在我们已经描述了执行线性滤波的过程,让我们来研究一些常用的滤波器。

最简单的滤波器是移动平均或箱型滤波器,它只是在K×K窗口内对像素值进行平均。这相当于用全为1的核卷积图像,然后进行缩放(图3.14a)。对于较大的核,更高效的实现方式是在每条扫描线上滑动一个移动窗口(在可分离滤波器中),同时累加

最新的像素和从运行总和中减去最旧的像素。这与我们稍后描述的累加面积表的概念有关。

通过将图像与分段线性“帐篷”函数(也称为巴特莱特滤波器)进行分离卷积,可以获得更平滑的图像。图3.14b展示了该滤波器的3×3版本,称为双线性核,因为它是由两个一阶线性样条的外积构成的(见第3.5.2节)。

将线性帐篷函数与其自身卷积得到三次近似样条,这被称为“高斯”核(图3.14c),在伯特和阿德森(1983a)的拉普拉斯金字塔表示中(第3.5节)。请注意,通过与盒滤波器迭代卷积也可以获得近似的高斯核(威尔斯1986)。在滤波器确实需要旋转对称的应用中,应使用精心调整的采样高斯核版本(弗里曼和阿德森1991)(练习3.11)。

我们刚刚讨论的内核都是模糊(平滑)或低通内核的例子,因为它们通过了较低频率的信号,同时衰减了较高频率的信号。它们在这方面做得如何呢?在第3.4节中,我们将使用频域傅里叶分析来检验这些滤波器的确切频率响应。我们还将介绍sinc((sin x)/x)滤波器,它执行理想的低通滤波。

在实际应用中,平滑核常用于减少高频噪声。关于使用平滑变体来消除噪声,我们稍后会详细讨论(参见第3.3.1节、第3.4节以及第4章和第5章)。

令人惊讶的是,平滑核也可以用于使用一种称为非锐化掩模的过程来锐化图像。由于模糊图像会减少高频,添加一些原始图像和模糊图像之间的差异会使它更清晰,

gsharp = f + √ (f — hblur * f).                                (3.22)

事实上,在数码摄影出现之前,这是在暗房里锐化图像的标准方法:通过错误对焦从原始负片中创建一个模糊的(“正片”)负片,然后在打印最终图像之前将两个负片叠加在一起,这对应于

gunsharp = f (1 — √ hblur * f).                                 (3.23)

这不再是线性滤波器,但它仍然工作良好。

线性滤波也可用作边缘提取(第7.2节)和兴趣点检测(第7.1节)算法的预处理阶段。图3.14d展示了一个简单的3×3边缘提取器,称为Sobel算子,它是水平中心差分(之所以这样命名是因为水平导数以像素为中心)和垂直的可分离组合。

平滑滤镜(用于平滑结果)。如下面的图像所示,该滤镜有效地强调了垂直边缘。

简单的角点检测器(图3.14e)寻找同时存在的水平和垂直二阶导数。然而,如你所见,它不仅对正方形的角点有反应,还对对角线边缘有反应。更好的角点检测器,或者至少是旋转不变性更强的兴趣点检测器,在第7.1节中有所描述。

3.2.3带通和可调滤波器

Sobel和角点算子是带通和定向滤波器的简单示例。通过首先用高斯(单位面积)滤波器平滑图像,可以创建更复杂的内核,                                          

(3.24)

然后取一阶或二阶导数(Marr1982;Witkin1983;Freeman和Adelson 1991)。这些滤波器统称为带通滤波器,因为它们可以滤除低频和高频。

二维图像的(无向)二阶导数,                                 

(3.25)

被称为拉普拉斯算子。用高斯模糊图像,然后取其拉普拉斯算子等同于直接与高斯拉普拉斯(LoG)滤波器卷积,

                       (3.26)

具有某些良好的尺度空间特性(Witkin1983;Witkin、Terzopoulos和Kass 1986)。五点拉普拉斯算子只是这种更复杂的滤波器的紧凑近似。

同样,Sobel算子是方向或定向滤波器的简单近似,可以通过用高斯(或其他滤波器)进行平滑,然后取方向导数▽获得

梯度场▽和单位方向=(cos θ,sin θ),

 · ▽(G * f) = ▽ (G * f) = (▽ G) * f.                          (3.27)

平滑的方向导数滤波器,

(3.28)

图3.15二阶可转向滤波器(Freeman1992)©1992 IEEE:(a)爱因斯坦的原始图像;(b)从二阶定向能量计算出的方向图;(c)增强定向结构的原始图像。

其中=(u,v)是一个可转向滤波器的例子,因为图像与G卷积后的值可以通过首先与一对滤波器(Gx,Gy)卷积,然后通过将这个梯度场与单位向量相乘(自由曼和阿德森1991)来局部地调整滤波器。这种方法的优点是可以在几乎不增加成本的情况下评估整个滤波器族。

如何引导一个方向二阶导数滤波器▽·▽G,它是取(平滑的)方向导数,然后再次取方向导数的结果?例如,Gxx是x方向上的二阶方向导数。

乍一看,似乎转向技巧不起作用,因为对于每一个二-

修正,我们需要计算一个不同的第一方向导数。有点令人惊讶的是,

Freeman和Adelson(1991)表明,对于方向高斯导数,可以用相对较少的基函数来控制任何阶导数。例如,只需要三个基函数就可以得到二阶方向导数,

G ^u^u = u2 Gxx + 2uvGxy + v2 Gyy .                            (3.29)

此外,每个基础滤波器虽然不一定可分离,但可以使用少量可分离滤波器的线性组合进行计算(Freeman和Adelson,1991)。

这一显著成果使得构建方向选择性逐渐增强的方向导数滤波器成为可能,即仅对具有强烈局部方向一致性的边缘作出响应的滤波器(图3.15)。此外,高阶可转向滤波器可以在给定位置对多个边缘方向作出响应,并且可以同时对条状边缘(细线)和经典的阶梯边缘作出响应(图3.16)。然而,为了实现这一点,需要使用完整的希尔伯特变换对来处理二阶和

图3.16四阶可调滤波器(Freeman和Adelson 1991)©1991 IEEE:(a)测试图像包含不同方向的条纹(线)和台阶边缘;(b)平均定向能量;(c)主要定向;(d)定向能量随角度变化(极坐标图)。

如(Freeman和Adelson1991)所述,使用更高滤波器。

可转向滤波器常用于构建特征描述符(第7.1.3节)和边缘检测器(第7.2节)。虽然弗里曼和阿德森(1991)开发的滤波器最适合检测线性(边缘状)结构,但科特(2003)的最新研究展示了如何使用2×2边界张量来编码边缘和连接点(“角”)特征。练习3.13要求你实现这样的可转向滤波器,并将其应用于寻找边缘和角特征。

面积总和表(积分图像)

如果一个图像将被重复卷积不同的盒滤波器(特别是不同位置的不同大小的滤波器),你可以预先计算总和面积表(Crow 1984),它只是从原点开始的所有像素值的累加                                        

(3.30)

这可以通过递归(光栅扫描)算法高效地计算,

s(i, j) = s(i - 1, j) + s(i, j - 1) - s(i - 1, j - 1) + f (i, j).          (3.31)

图像s(i,j)也常被称为积分图像(见图3.17),如果使用单独的行和,实际上每个像素只需进行两次加法即可计算(Viola和Jones 2004)。为了找到矩形[i0,i1]×[j0,j1]内的累加面积(积分),我们只需将累加面积表中的四个样本合并,

S(i0. . . i1 , j0. . . j1 ) = s(i1 , j1 ) - s(i1 , j0 - 1) - s(i0 - 1, j1 ) + s(i0 - 1, j0 - 1). (3.32)

图3.17汇总面积表:(a)原始图像;(b)汇总面积表;(c)面积总和计算。汇总面积表中的每个值(i,j)(红色)都是从其三个相邻的(蓝色)邻居递归计算得出的(3.31)。面积总和S(绿色)是通过结合矩形四个角上的四个值(紫色)计算得出的(3.32)。正值用粗体表示,负值用斜体表示。

潜在的缺点是,与原始图像相比,累加图像需要额外的M + log N位来表示,其中M和N分别是图像的宽度和高度。累加表的扩展也可以用于近似其他卷积核(Wolberg(1990,第6.5.2节)包含了相关综述)。

在计算机视觉中,累加面积表被用于人脸检测(Viola和Jones 2004),以计算简单的多尺度低级特征。这些特征由正负值相邻的矩形组成,也被称为盒单元(Simard、Bottou等1998)。原则上,累加面积表也可以用于计算平方差和(SSD)立体和运动算法中的总和(第12.4节)。实际上,除非需要考虑多种不同的窗口形状和大小,通常更倾向于使用可分离的移动平均滤波器(Kanade、Yoshida等1996),Veksler(2003)指出。

递归过滤

增量公式(3.31)用于求和面积,是递归滤波器的一个例子,即其值依赖于先前的滤波器输出。在信号处理文献中,这类滤波器被称为无限脉冲响应(IIR),因为当输入一个脉冲(单个非零值)时,滤波器的输出会持续不断。例如,对于求和面积表,脉冲会在其下方和右侧生成一个无限长的1矩形。我们在本章之前研究过的涉及有限范围核图像的滤波器,则被称为有限脉冲响应(FIR)。

二维IIR滤波器和递归公式有时用于计算量化

图3.18中值滤波和双边滤波:(a)原始图像,带有高斯噪声;(b)

高斯滤波;(c)中值滤波;(d)双边滤波;(e)原始图像带散粒噪声;(f)高斯滤波;(g)中值滤波;(h)双边滤波。请注意,双边滤波未能去除散粒噪声,因为噪声像素与其邻近像素差异过大。

涉及大面积相互作用的实体,如二维距离函数(第3.3.3节)和连通分量(第3.3.3节)。

然而,更常见的是,在一维可分离滤波阶段内部使用IIR滤波器来计算大范围平滑核,例如高斯函数和边缘滤波器的有效近似(Deriche1990;Nielsen、Florack和Deriche1997)。基于金字塔的算法(第3.5节)也可以用于执行此类大面积平滑计算。

3.3更多社区运营商

正如我们刚才所见,线性滤波器可以执行多种图像变换。然而,非线性滤波器,如边缘保持中值滤波器或双边滤波器,在某些情况下表现得更好。其他邻域算子的例子包括作用于二值图像的形态学算子,以及计算距离变换和查找二值图像中连通组件的半全局算子(图3.11f–h)。

图3.19中值滤波和双边滤波:(a)中值像素(绿色);(b)选择Q-

精简的像素;(c)域滤波器(边缘上的数字是像素距离);(d)范围滤波器。

3.3.1非线性滤波

我们迄今为止所讨论的滤波器都是线性的,即它们对两个信号之和的响应与这两个信号各自响应之和相同。这相当于说每个输出像素是若干个输入像素的加权总和(3.19)。线性滤波器更容易组合,并且适合进行频率响应分析(第3.4节)。

然而,在许多情况下,通过使用相邻像素的非线性组合可以获得更好的性能。例如,考虑图3.18e中的图像,其中噪声不是高斯噪声,而是散粒噪声,即偶尔会出现非常大的值。在这种情况下,使用高斯滤波器进行常规模糊处理无法去除这些噪声像素,反而会使它们变成更柔和(但仍然可见)的斑点(图3.18f)。

中值过滤

在这种情况下,更好的滤波器是中值滤波器,它从每个像素的邻域中选择中值(图3.19a)。中值可以通过随机选择算法(Cormen2001)以预期的线性时间计算出来,增量变体也已开发(Tomasi和Manduchi1998;Bovik2000,第3.2节),以及一个与窗口大小无关的常数时间算法(Perreault和Hbert2007)。由于散粒噪声值通常远高于邻域内的真实值,中值滤波器能够过滤掉这些不良像素(图3.18g)。

中值滤波器的一个缺点是,除了其适度的计算成本外,由于它仅选择一个输入像素值来替换每个输出像素,因此在平均消除常规高斯噪声方面效率较低(Huber 1981;Hampel,Ronchetti等1986;Stewart 1999)。更好的选择可能是Q剪切均值(Lee和Redner 1990;Crane 1997,

p. 109),它将除最小和最大α分数以外的所有像素平均(图3.19b)。

另一种可能性是计算加权中值,其中每个像素根据其与中心的距离被使用若干次。这等同于最小化加权目标函数                                  

(3.33)

其中g(i,j)是期望输出值,对于加权中位数,p = 1。p = 2则是常用的加权平均值,在归一化后相当于相关系数(3.12),通过权重之和进行归一化(Haralick和Shapiro 1992,第7.2.6节;Bovik 2000,第3.2节)。加权平均值还与其他稳健统计方法有深刻联系(见附录B.3),例如影响函数(Huber 1981;Hampel、Ronchetti等1986)。

非线性平滑具有另一个也许更为重要的特性,尤其是在当今的摄像机中,光子噪声很少。这种滤波更有利于边缘保持,即在滤除高频噪声的同时,它对边缘软化的作用更小。

考虑图3.18a中的噪声图像。为了去除大部分噪声,高斯滤波器被迫平滑掉高频细节,这在强边缘附近尤为明显。中值滤波效果更好,但如前所述,在平滑不连续处的效果较差。有关边缘保持平滑技术的更多参考文献,请参见Tomasi和Manduchi(1998)。

虽然我们可以尝试使用α修剪的平均值或加权中位数,但这些技术仍然倾向于圆滑锐角,因为平滑区域中的大多数像素来自背景分布。

3.3.2双边滤波

如果我们把加权滤波核的概念与更好的异常值拒绝方法结合起来会怎样?如果不用固定比例α来拒绝,而是简单地(以一种柔和的方式)拒绝那些值与中心像素值差异过大的像素呢?这就是双边滤波的核心思想,这一概念最初由汤马西和曼杜奇(1998年)在计算机视觉领域推广开来,尽管奥里奇和韦勒(1995年)以及史密斯和布雷迪(1997年)在此之前已经提出了类似的方法。帕里斯、科尔普罗斯特等人(2008年)对这一领域的研究进行了很好的综述,并介绍了其在计算机视觉、图形学和计算摄影中的广泛应用。在双滤波器中,输出像素值取决于邻近像素的加权组合。

枯燥的像素值                                      

(3.34)

加权系数w(i,j,k,l)取决于域核的乘积(图3.19c),                            

(3.35)

以及一个数据依赖的范围核(Figure3.19d),                             

图3.20显示了噪声阶跃边缘的双边滤波的一个例子。注意域内核是通常的高斯核,范围核测量外观(强度)与中心像素的相似性,而双边滤波核是这两个的乘积。

注意,对于彩色图像,范围滤波器(3.36)使用中心像素与相邻像素之间的向量距离。这在彩色图像中非常重要,因为任何一个颜色带中的边缘都表示材料的变化,因此需要降低像素的影响。7

由于双边滤波相比常规可分离滤波速度较慢,因此开发了多种加速技术,如Durand和Dorsey(2002)、Paris和Durand(2009)、Chen、Paris和Durand(2007)以及Paris、Kornprobst等人(2008)所讨论的。特别是双边网格(Chen、Paris和Durand 2007),它在高维颜色/位置空间上以均匀网格进行子采样,至今仍被广泛使用,包括双边求解器的应用(第4.2.3节和Barron及Poole(2016))。通过Adams、Baek和Davis(2010)开发的置换体晶格方法,可以实现更快的双边滤波。

迭代自适应平滑和各向异性扩散

双边(和其他)滤波器也可以以迭代方式应用,特别是如果需要更像“卡通”的外观时(Tomasi和Manduchi1998)。当应用迭代滤波时,通常可以使用更小的邻域。

图3.20双边滤波(Durand和Dorsey2002)©2002 ACM:(a)噪声阶跃边缘输入;(b)域滤波器(高斯);(c)范围滤波器(与中心像素值相似);(d)

双滤波器;(e)滤波后的台阶边缘输出;(f)像素之间的三维距离。

例如,考虑仅使用最近的四个邻居,即限制jk -ij + j l - jj≤1在(3.34)中。观察到                           

因此,我们可以将(3.34)重写为

其中R = Σ(k,l)r(i,j,k,l),(k,l)是(i,j)的N4(最近的四个)邻居,我们已经明确地表明了过滤的迭代性质。

正如Barash(2002)指出的,(3.40)与离散各向异性扩散方程相同。

最初由佩罗纳和马利克(1990b)提出。自首次引入以来,各向异性扩散已被扩展并应用于广泛的问题(尼尔森、弗洛拉克和德里奇1997;布莱克、萨皮罗等人1998;魏克特、特哈·罗梅尼和维尔热弗1998;魏克特1998)。它还被证明与其它自适应平滑技术密切相关(圣马尔克、陈和Medioni1991;Barash2002;Barash及科马尼丘2004),以及带有非线性平滑项的贝叶斯正则化,该平滑项可以从图像统计中推导出来(沙尔、布莱克和豪塞克2003)。

在其一般形式中,范围核r(i,j,k,l)= r(Ⅱf(i,j)- f(k,l)Ⅱ),通常称为增益或边缘停止函数,或扩散系数,可以是任何单调递增的函数,且当x→∞时,r(x)→0。Black、Sapiro等人(1998)展示了各向异性扩散等价于最小化图像梯度上的稳健惩罚函数,我们将在第4.2节和第4.3节中讨论这一点。Scharr、Black和Haussecker(2003)展示了如何从局部图像统计中以原则性的方式推导出边缘停止函数。他们还将扩散邻域从N4扩展到N8,这使得他们能够创建一个既旋转不变又包含局部结构张量特征值信息的扩散算子。

请注意,如果没有偏向于原始图像的偏差项,各向异性扩散和迭代自适应平滑会收敛到一个恒定的图像。除非迭代次数很少。

(例如,用于速度),通常最好将平滑问题表述为平滑项和数据保真度项的联合最小化,如第4.2节和第4.3节以及Scharr、Black和Haussecker(2003)所述,他们以一种有原则的方式引入了这种偏差。

引导图像滤波

虽然到目前为止我们讨论了用于滤除图像以获得改进版本的技术,例如减少噪声或锐化边缘的版本,但也可以使用不同的引导图像来自适应地滤除噪声输入(Eisemann和Durand 2004;Petschnigg、Agrawala等人2004;He、Sun和Tang 2013)。一个例子是使用闪光灯图像,该图像具有强烈的边缘但色彩较差,来自适应地滤除低光非闪光彩色图像,后者含有大量噪声,如第10.2.2节所述。在他们的论文中,Eisemann和Durand(2004)将他们应用范围滤波器(3.36)到不同引导图像h()的方法称为交叉双边滤波,而Petschnigg、Agrawala等人(2004)则称之为联合双边滤波。

He、Sun和Tang(2013)指出,这些论文只是引导图像滤波这一更一般概念的两个例子,在该概念中,引导图像h()用于计算

8 1/(1 + ηR)因子在各向异性扩散中不存在,但当η→0时变得可以忽略不计。

图3.21指导图像滤波(He、Sun和Tang 2013)©2013 IEEE。与左侧所示的联合双边滤波不同,后者从指导图像(图中表示为I,文中表示为h)计算每个像素的权重掩模,指导图像滤波将输出值(图中表示为qi,文中表示为g(i,j))建模为指导像素的局部仿射变换。

局部适应的像素间权重w(i,j,k,l),即,

(3.41)

在他们的论文中,作者建议使用局部仿射变换来建模引导图像和输入图像之间的关系,

g(i,j)=Ak,lh(i,j)+bk,l,                                    (3.42)

其中,Ak,l和bk,l的估计值是通过在以像素(k,l)为中心的正方形邻域上进行正则化最小二乘拟合而获得的,即最小化

ⅡAk,lh(i,j

)+ bk,l - f(i,j)Ⅱ2 + λⅡAⅡ2。                  (3.43)

这类正则化最小二乘问题被称为岭回归(第4.1节)。该算法背后的原理如图3.21所示。

不是仅仅从该像素为中心的窗口中获取过滤像素g(i,j)的预测值,而是使用覆盖该像素的所有窗口的平均值。所得算法(He,Sun和Tang 2013,算法1)包括一系列局部均值图像和图像矩滤波器、逐像素线性系统求解(如果引导图像是标量,则简化为除法),以及另一组滤波步骤。作者描述了这一快速简便的过程如何应用于各种计算机视觉问题,包括图像抠图(第10.4.3节)、高动态范围图像色调映射(第10.2.1节)、立体匹配(Hosni,Rhemann等2013)和图像去噪。

图3.22二值图像形态学:(a)原始图像;(b)膨胀;(c)腐蚀;(d)多数;(e)开运算;(f)关闭运算。所有示例的结构元素均为5×5的正方形。多数效应会使尖角变得略微圆润。由于宽度不足,开运算无法消除点。

3.3.3二值图像处理

虽然非线性滤波器通常用于增强灰度和彩色图像,但它们也广泛用于处理二进制图像。这种图像通常是在阈值操作之后出现的,  

(3.44)

例如,将扫描的灰度文档转换为二进制图像以进行进一步处理,例如光学字符识别。

形态学

最常见的二值图像操作称为形态学操作,因为它们会改变底层二值对象的形状(Ritter和Wilson 2000,第7章)。要执行此类操作,我们首先用二值结构元素对二值图像进行卷积,然后根据卷积结果的阈值选择一个二值输出值。(这并不是通常描述这些操作的方式,但我认为这是一种简单而统一的方法。)结构元素可以是任意形状,从简单的3×3盒滤波器到更复杂的圆盘结构。它甚至可以对应于图像中要寻找的特定形状。

图3.22显示了二进制图像f与3×3结构的卷积的放大图

图灵元件和下面描述的操作的图像结果。设

c = f    s                                                  (3.45)

S为结构元素的大小(像素数),S为在图像上扫描时每个结构元素内部1的数量的整数值。二值形态学中使用的标准操作包括:

扩增:扩增(f,s) = θ(c,1);

侵蚀:侵蚀(f,s) = θ(c,S);

多数数:maj(f,s)= θ(c,S/2);

打开:打开(f,s) =扩张(侵蚀(f,s),s);

•结束:close(f,s)= erode(dilate(f,s),s)。

从图3.22可以看出,膨胀作用使由1组成的对象变大(变厚),而腐蚀作用使对象变小(变薄)。开运算和闭运算往往不会影响大的区域和平滑的边界,而会去除小的对象或孔洞并平滑边界。

虽然在本书其余部分我们不会大量使用数学形态学,但当你需要清理一些阈值图像时,它是一个非常有用的工具。关于形态学的更多细节,你可以在其他计算机视觉和图像处理教科书中找到(Haralick和Shapiro 1992,第5.2节;Bovik 2000,第2.2节;Ritter和Wilson 2000,第7节),以及专门讨论这一主题的文章和书籍中(Serra 1982;Serra和Vincent 1992;Yuille、Vincent和Geiger 1992;Soille 2006)。

距离转换

距离变换在使用两遍光栅算法快速预计算到曲线或点集的距离方面非常有用(Rosenfeld和Pfaltz 1966;Danielsson 1980;Borge-Fors 1986;Paglieroni 1992;Breu、Gil等1995;Felzenszwalb和Huttenlocher 2012;Fabbri、Costa等2008)。它有许多应用,包括水平集(第7.3.2节)、快速查姆匹配(二值图像对齐)(Huttenlocher、Klanderman和Rucklidge 1993)、图像拼接和融合中的羽化处理(第8.4.2节),以及最近点对齐(第13.2.1节)。

二值图像b(i,j)的距离变换D(i,j)定义如下。设d(k,l)为像素偏移之间的距离度量。两种常用的度量包括城市街区或曼哈顿距离

d1 (k, l) = jk j + j lj                                             (3.46)和欧几里得距离

                                                (3.47)距离变换定义为

图3.23城市街区距离变换:(a)原始二值图像;(b)从上到下

(前向)光栅扫描:使用绿色值计算橙色值;(c)从底部到顶部

(后向)光栅扫描:绿色值与旧的橙色值合并;(d)最终距离变换。

即,它是到最近的背景像素的距离,其值为0。

D1城市街区距离变换可以通过简单的光栅扫描算法的前向和后向遍历来高效计算,如图3.23所示。在前向遍历时,b中的每个非零像素被其北或西邻居的距离的最小值+1所替代。在后向遍历时,情况相同,只是最小值同时取当前值D和南或东邻居距离的最小值+1(图3.23)。

高效计算欧几里得距离变换更为复杂(Danielsson 1980;Borgefors 1986)。这里,仅在两次遍历中保留与边界之间的最小标量距离是不够的。相反,需要保留一个包含距离边界的儿和y坐标的向量值距离,并使用平方距离(斜边)规则进行比较。此外,为了获得合理的结果,还需要使用更大的搜索区域。

图3.11g展示了一个从二值图像计算出的距离变换。请注意,数值如何远离黑色(墨水)区域并形成原始图像白色区域的脊线。由于这种从起始边界像素开始的线性增长,距离变换有时也被称为草火变换,因为它描述了从黑色区域内开始的火灾会消耗任何给定像素或切角的时间,因为这类似于木工和工业设计中使用的类似形状。距离变换中的脊线成为该变换计算区域的骨架(或中轴变换(MAT)),由与两个(或更多)边界等距的像素组成(Tek和Kimia2003;Sebastian和Kimia2005)。

基本距离变换的一个有用的扩展是带符号距离变换,它计算所有像素到边界像素的距离(Lavall e和Szeliski1995)。创建它的最简单方法是计算原始二进制的两

距离变换。

图像及其补集,在结合之前先否定其中一个。由于这些距离场通常较为平滑,因此可以使用定义在四叉树或八叉树数据结构上的样条函数来更紧凑地存储它们(相对精度损失最小)(Lavalle和Szeliski 1995;Szeliski和Lavalle 1996;Frisken、Perry等2000)。这种预计算的带符号距离变换对于高效对齐和合并二维曲线和三维表面非常有用(Huttenlocher、Klanderman和Rucklidge 1993;Szeliski和Lavalle 1996;Curless和Levoy 1996),特别是当存储并插值了距离变换的向量版本,即每个像素或体素到最近边界或表面元素的指针时。带符号距离场也是水平集演化的关键组成部分(第7.3.2节),在那里它们被称为特征函数。

连通分量

另一个有用的半全局图像操作是寻找连通区域,定义为具有相同输入值或标签的相邻像素区域。如果像素在水平或垂直方向上紧邻,则称为N4相邻;如果它们还可以对角线相邻,则称为N8相邻。连通区域的这两种变体在各种应用中被广泛使用,例如在扫描文档中识别单个字母,或在阈值图像中找到对象(如细胞)并计算其面积统计。多年来,已经开发出多种高效的算法来查找这些区域,包括Haralick和Shapiro ( 1992年,第2.3节)以及He、Ren等人(2017年)所描述的方法。这些算法通常包含在图像处理库中,如OpenCV。

一旦二值或多值图像被分割成其连通分量,通常对每个单独区域R计算面积统计是很有用的。这些统计包括:

区域(像素数);

周长(边界像素数);

质心(平均x和y值);

第二矩,

(3.49)

通过该方法可以使用特征值分析计算出主轴和副轴的方向和长度。

这些统计量可以用于进一步处理,例如,按区域大小对区域进行排序(以考虑最大的区域)或对不同图像中的区域进行初步匹配。

3.4傅里叶变换

在第3.2节中,我们提到傅里叶分析可以用于分析各种滤波器的频率特性。本节将解释傅里叶分析如何帮助我们确定这些特性(即图像的频率成分),以及如何利用快速傅里叶变换(FFT)在时间上执行与核大小无关的大核卷积。关于傅里叶变换的更全面介绍,可参见布雷斯韦尔(1986)、格拉斯纳(1995)、奥本海姆和沙弗(1996)以及奥本海姆、沙弗和巴克(1999)。

我们如何分析给定滤波器对高频、中频和低频的作用呢?答案很简单,就是让一个已知频率的正弦波通过滤波器,然后观察它被衰减了多少。

s(x) = sin(2πfx + φi)= sin(ωx + φi)                            (3.50)

作为输入的正弦波,其频率为f,角频率为ω = 2πf,相位为φi。请注意,在本节中,我们使用变量x和y来表示图像的空间坐标,而不是像前几节中使用的i和j。这既是因为字母i和j常用于表示虚数(具体取决于你是在阅读复变量还是电气工程文献),也是因为这样更容易区分频率空间中的水平(x)和垂直(y)分量。在本节中,我们使用字母j来表示虚数,因为这是信号处理文献中最常见的形式(Bracewell1986;Oppenheim和Schafer1996;Oppenheim,Schafer,和Buck1999)。

如果我们用一个脉冲响应为h(x)的滤波器对正弦信号s(x)进行卷积,我们得到另一个相同频率但幅度A和相位φo不同的正弦波,

o(x) = h(x) * s(x) = A sin(ωx + φo),                             (3.51)

如图3.24所示。要了解这一点,记住卷积可以表示为移位输入信号的加权求和(3.14),而一组相同频率的移位正弦波的求和只是一个该频率的单个正弦波。

图3.24傅里叶变换作为滤波器h(x)对输入正弦波s(x) = ejωx的响应,产生输出正弦波o(x) = h(x) * s(x) = Aej(ωx+φ)。

新的幅度A称为滤波器的增益或幅度,而相位差

△φ=φo-φi称为移位或相位。

实际上,更紧凑的符号是使用复数值正弦波

s (x) = ejωx = cos!x + j sin!x.                                (3.52)

在这种情况下,我们可以简单地写,

o (x) = h (x) * s (x) = Aej(ωx+φ) .                                (3.53)

傅里叶变换只是每个频率的幅度和相位响应的列表,

H(!) = F {h (x)} = Aejφ ;                                     (3.54)

即,它是频率为!的复数正弦波通过滤波器h(x)后的响应。傅里叶变换对也常写成

h(x)

F

$ H(!).

(3.55)

不幸的是,(3.54)并没有给出计算傅里叶变换的实际公式。

相反,它给出一个配方,即,将滤波器与正弦波卷积,观察幅度和相位偏移,重复。幸运的是,傅里叶变换在连续域中都存在闭式方程,

这是音响发烧友的噩梦,他们坚持使用没有谐波失真的设备。现在数字音频已经引入了纯无失真的声音,一些音响发烧友开始购买复古的电子管放大器或模拟这种失真的数字信号处理器,因为它们“更温暖的声音”。

在离散域中,                                         

(3.57)

其中,N是信号或分析区域的长度。这些公式既适用于滤波器,如h(x),也适用于信号或图像,如s(x)或g(x)。

傅里叶变换的离散形式(3.57)被称为离散傅里叶变换(DFT)。注意,虽然(3.57)可以为任何k值求解,但只有在以下情况下才有意义 

表面上看,DFT需要O(N^2)次运算(乘加)来计算。幸运的是,存在一种更快的算法,称为快速傅里叶变换(FFT),它只需要O(N log2 N)次运算(Bracewell 1986;Oppenheim,Schafer和Buck 1999)。我们在这里不详细解释该算法的细节,只是说明它涉及一系列log2 N阶段,每个阶段执行小的2×2转换(带有已知系数的矩阵乘法),随后进行一些半全局置换。(你经常会看到“蝶形”一词用于这些阶段,因为涉及的信号处理图具有这种形状。)大多数数值和信号处理库中都提供了FFT的实现。

傅里叶变换具有一系列极其有用的性质,这些性质涉及原始信号及其傅里叶变换之间的关系,包括叠加、平移、反转、卷积、相关、乘法、微分、域缩放(拉伸)以及能量守恒(帕斯卡定理)。为了容纳第二版中所有新的内容,我删除了所有这些细节,以及常用傅里叶变换对的讨论。感兴趣的读者可以参考(Szeliski2010,第3.1节,表3.1-3.3)或信号处理和傅里叶变换的标准教科书(Bracewell1986;Glassner 1995;Oppenheim和Schafer1996;Oppenheim,Schafer,和Buck1999)。

我们还可以计算图3.14中所示的小离散核的傅里叶变换(见表3.1)。请注意,移动平均滤波器并不能均匀地抑制高频,因此可能导致振铃效应。伯特和阿德森(1983a)在拉普拉斯金字塔中使用的二项式滤波器(Gomes和Velho 1997)作为“高斯”滤波器(见第3.5节),在分离高低频方面表现不错,但仍保留了相当多的高频细节,这可能导致降采样后的混叠。索贝尔边缘检测器最初线性增强频率,但在更高频率处衰减,因此难以检测细小的边缘,例如相邻的黑白像素。

表3.1图3.14所示的可分离核的傅里叶变换,通过计算Σk h(k)e-jkw得到。

列。我们在第3.5.2节中查看了小核傅里叶变换的其他示例,其中我们研究了在抽取(尺寸缩减)之前更好的预滤波器核。

3.4.1二维傅立叶变换

我们为一维信号及其变换开发的公式和见解可以直接应用于二维图像。在这里,我们不必仅仅指定一个水平或垂直频率!x或!y,我们可以创建一个频率为(!x;!y)的定向正弦波,

s (x; y) = sin(!xx + !yy).                                     (3.58)

相应的二维傅里叶变换为

(3.59)

在离散域中,

其中M和N是图像的宽度和高度。

所有一维傅里叶变换的性质在二维情况下同样适用,只需将标量变量x、!、x0和a替换为它们的二维向量对应物x =(x;y),! =(!x;!y),x0 =(x0;y0),以及a =(ax;ay),并使用向量内积代替乘法。

维纳滤波

虽然傅里叶变换是分析滤波器核或图像的频率特性的有用工具,但它也可以用于分析整个类别的图像的频谱。

图像的一个简单模型是假设它们是随机噪声场,其在每个频率上的预期幅度由功率谱Ps(!x;!y)给出,即,

([S(!x ; !y )]2〉= Ps (!x ; !y );                                   (3.61)

其中,尖括号〈·〉表示随机变量的期望(均值)值。为了生成这样的图像,我们只需创建一个随机高斯噪声图像S(!x;!y),其中每个“像素”是一个零均值、方差为Ps(!x;!y)的高斯分布,然后取其逆FFT。

10也常用符号E[·]表示。

图3.25离散余弦变换(DCT)基函数:第一个DC(即常数)基函数是水平蓝线,第二个是棕色半周期波形等。这些基函数广泛用于图像和视频压缩标准中,如JPEG。

信号频谱捕捉空间统计的一阶描述这一观察结果,在信号和图像处理中被广泛使用。特别是,假设图像是从一个相关的高斯随机噪声场中抽取的样本,并结合测量过程的统计模型,可以得到一个最优恢复滤波器,即维纳滤波器。

本书的第一版包含Wiener滤波器的推导(Szeliski2010,第3.4.3节),但我决定从当前版本中删除这一部分,因为它在实践中几乎不再使用,已经被性能更好的非线性滤波器所取代。

离散余弦变换

离散余弦变换(DCT)是傅里叶变换的一种变体,特别适合以块状方式压缩图像。一维DCT是通过将每个N宽像素块与一组不同频率的余弦值进行点积来计算的,                                   

(3.62)

其中k是系数(频率)索引,1/2像素偏移用于使基函数系数对称(Wallace1991)。图3.25显示了一些离散余弦基函数。如你所见,第一个基函数(蓝色直线)编码了像素块中的平均直流值,而第二个基函数则编码了一个略微弯曲的斜率版本。

结果表明,DCT是自然图像统计量在小块上的最优Karhunen-Love分解的良

近似,这可以通过对图像进行主成分分析(PCA)获得,如第5.2.3节所述。KL-

变换可对信号进行最佳去相关(假设信号由其频谱描述),因此,理论上,可实现最佳压缩。

DCT的二维版本定义类似,+)l) f(i,j)。(3.63)与二维快速傅里叶变换类似,二维离散余弦变换也可以分离实现,即首先计算块中每行的离散余弦变换,然后计算每个结果列的离散余弦变换。与FFT一样,每次离散余弦变换也可以在O(N log N)时间内完成。

正如我们在第2.3.3节中提到的,DCT在当今的图像和视频压缩算法中被广泛应用,尽管如小波变换(Simoncelli和Adelson 1990b;Taubman和Marcellin 2002)等替代方法,以及JPEG2000和JPEG XR标准中使用的DCT的重叠变体(Malvar 1990,1998,2000),在第3.5.4节中讨论过。这些较新的算法较少受到块效应的影响(即每个块(通常是8×8)中的像素独立变换和量化导致的边缘对齐不连续性)。有关如何从压缩的JPEG图像中去除块效应的想法,请参见练习4.3。

3.4.2应用:锐化、模糊和去噪

图像处理的另一个常见应用是通过使用锐化和去噪操作来增强图像,这些操作需要某种邻域处理。传统上,这类操作是通过线性滤波(见第3.2节和第3.4.1节)来完成的。如今,更常用的是非线性滤波器(第3.3.1节),例如加权中值或双边滤波器(3.34–3.37)、各向异性扩散(3.39–3.40)或非局部均值(Buades、Coll和Morel 2008)。变分方法(第4.2节),特别是那些使用非二次(鲁棒)范数的方法,如L1范数(称为全变差),也经常被采用。最近,深度神经网络已经主导了去噪领域(第10.3节)。图3.19展示了一些使用线性和非线性滤波器去除噪声的例子。

在测量图像去噪算法的有效性时,通常将结果报告为峰值信噪比(PSNR)测量值(2.120),其中I(x)是

原始(无噪声)图像和(x)是去噪后的图像;这是在以下情况下的结果

噪声图像已被合成生成,因此干净的图像是已知的。更好的质量测量方法是使用基于感知的相似性度量,例如结构相似性(SSIM)指数(王、博维克等,2004;王、博维克和西蒙切利,2005)或FLIP图像差异评估器(安德森、尼尔松等,2020)。最近,

人们开始使用神经“感知”相似度指标来衡量相似性(John- son,Alahi和Fei-Fei 2016;Dosovitskiy和Brox 2016;Zhang,Isola等2018;Tariq,Tursun等2020;Czolbe,Krause等2020),这些指标与L2(PSNR)或L1指标不同,后者倾向于平滑或平坦的平均结果,而前者更偏好具有相似纹理量的图像(Cho,Joshi等2012)。当干净的图像不可用时,也可以使用无参考图像质量评估来评估图像质量(Mittal,Moorthy和Bovik 2012;Talebi和Milanfar 2018)。

练习3.12,3.21和3.28要求你实现一些操作并比较它们的有效性。更复杂的去模糊技术和相关的超分辨率任务在第10.3节中讨论。

3.5塔和波浪

到目前为止,在本章中我们研究的所有图像变换都生成与输入图像相同大小的输出图像。然而,很多时候,我们可能希望在继续之前改变图像的分辨率。例如,我们需要插值一个小图像,使其分辨率与输出打印机或计算机屏幕相匹配。或者,我们可能希望减小图像的尺寸,以加快算法执行速度,节省存储空间或传输时间。

有时,我们甚至不知道图像的适当分辨率应该是多少。例如,在图像中寻找人脸的任务(第6.3.1节)。由于我们不知道人脸出现的比例,因此需要生成一系列不同大小的图像金字塔,并逐一扫描以寻找可能的人脸。(生物视觉系统也遵循比例层次结构(Marr1982)。)这样的金字塔还可以通过首先在金字塔的较粗层次找到该对象的小实例,然后仅在粗略检测区域附近寻找全分辨率的对象,从而加速对象的搜索(第9.1.1节)。最后,图像金字塔对于执行多尺度编辑操作非常有用,如在保持细节的同时融合图像。

在本节中,我们首先讨论用于改变图像分辨率的良好滤波器,即上采样(插值,Section3.5.1)和下采样(降采样,Section3.5.2)。然后,我们介绍多分辨率金字塔的概念,它可以用来创建不同大小图像的完整层次结构,并支持多种应用(第3.5.3节)。一个密切相关概念是小波,这是一种具有更高频率选择性和其他有用特性的特殊金字塔(第3.5.4节)。最后,我们介绍了一种金字塔的有用应用,即将不同图像融合在一起,以隐藏图像边界之间的接缝(第3.5.5节)。

图3.26信号插值,g(i) = Σk f (k)h(i - rk):输入值的(a)加权求和;(b)多相滤波器解释。

3.5.1插值

为了将图像插值(或上采样)到更高的分辨率,我们需要选择一些插值核来与图像进行卷积,                                   

(3.64)

什么样的核函数是好的插值器?答案取决于应用和计算时间。表3.1中所示的任何平滑核函数都可以在适当重新缩放后使用。线性插值器(对应于帐篷核)生成分段线性曲线,应用于图像时会产生不美观的折痕(图3.27a)。立方B样条,其离散1/2像素采样在表3.1中表现为二项式核,是一种近似核(插值图像不会穿过输入数据点),生成具有减少高频细节的柔和图像。立方B样条的方程最简单地通过将帐篷函数(线性B样条)与自身卷积来推导。

11平滑核在Table3.1have中是一个单位面积。要将它们转换为插值核,我们只需进行缩放

图3.27二维图像插值:(a)双线性;(b)双三次(=-1);(c)双三次(=-0.5);(d)窗口sinc(9个抽头)。

虽然大多数显卡使用双线性内核(可选地与MIP映射结合——见第3.5.3节),但大多数照片编辑软件使用双三次插值。双三次插值是一种C1(导数连续)分段三次样条(“样条”一词等同于“分段多项式”)12,其方程为其中a指定在x = 1处的导数(Parker,Kenyon和Troxel 1983)。a的值通常设为-1,因为这最符合sinc函数的频率特性(图3.28)。它还引入了一点锐化效果,这种效果可能具有视觉吸引力。不幸的是,这一选择并不能线性插值直线(强度渐变),因此可能会出现一些可见的振铃现象。对于大量插值,更好的选择可能是a = -0.5,这会产生一个二次样条;它可以精确插值线性和二次函数(Wolberg 1990,第5.4.3节)。图3.28显示了a = -1的情况。

图3.28 (a)一些窗函数的sinc函数及其对数傅里叶变换:蓝色表示升余弦窗函数,绿色和紫色表示三次插值器(a = -1和a = -0.5),棕色表示帐篷函数。这些函数常用于执行高精度低通滤波操作。

以及一个= -0.5立方插值核及其傅里叶变换;图3.27b和c显示了它们在二维插值中的应用。

样条曲线因其能够精确指定控制点处的导数以及高效的增量算法进行评估,长期以来一直被用于函数和数据值插值(Bartels,Beatty和Barsky 1987;Farin 1992,2002)。样条曲线广泛应用于几何建模和计算机辅助设计(CAD)领域,尽管它们已经开始被细分曲面所取代(Zorin,Schroeder和Sweldens 1996;Peters和Reif 2008)。在计算机视觉中,样条曲线常用于弹性图像变形(第3.6.2节)、散点数据插值(第4.1节)、运动估计(第9.2.2节)和表面插值(第13.3节)。事实上,通过将图像表示为样条曲线并在多分辨率框架下对其进行操作,可以执行大多数图像处理任务(Unser 1999;Nehab和Hoppe 2014)。

高质量插值器通常被认为是窗函数sinc,因为它既能保留低分辨率图像中的细节,又能避免混叠。(也可以通过匹配其导数在零点处来构建窗函数sinc的C1分段三次逼近(Szeliski和Ito 1986)。)然而,有些人反对窗函数sinc可能引入的过度振铃现象以及振铃频率的重复性(见图3.27d)。因此,一些摄影师倾向于以较小的比例多次插值图像(这有助于使原始像素网格与最终图像去相关)。其他选择包括使用双边滤波器作为插值器(Kopf,Cohen等2007),采用全局优化(第3.6节)或

图3.29信号抽取:(a)原始样本与低通滤波器(b)卷积

在下采样之前进行过滤。

幻觉性细节(第10.3节)。

3.5.2消减

虽然插值可以用来提高图像的分辨率,但降低分辨率则需要进行抽取(降采样)。为了执行抽取,我们首先(概念上)用低通滤波器对图像进行卷积(以避免混叠),然后保留每第r个样本。实际上,我们通常只在每第r个样本处评估卷积,                                   

(3.66)

如图3.29所示。注意,在这种情况下,平滑核h(k,l)通常是插值核的拉伸和重新缩放版本。或者,我们可以写为

(3.67)

并且保持相同的内核h(k,l)用于插值和抽取。

常用的(r = 2)抽取滤波器是伯特和阿德森(1983a)引入的二项式滤波器。如表3.1所示,该核函数在分离高低频方面表现良好,但仍保留了相当数量的高频细节,这可能导致降采样后的混叠。然而,对于图像融合等应用(本节后文将讨论),这种混叠影响不大

对于高降采样率,窗形sinc预滤波器是一个很好的选择(图3.28)。但是,对于小降采样率,例如r = 2,则需要更仔细的滤波器设计。

表3.2显示了一些常用的r = 2下采样滤波器,而图-

图3.30显示了它们对应的频率响应。这些滤波器包括:

线性[1;2;1]滤波器给出的响应较差;

二项式[1;4;6;4;1]滤波器截断了很多频率,但对计算机视觉分析金字塔很有用;

立方滤波器来自(3.65);a = -1滤波器的衰减比a = -0.5滤波器更陡峭(图3.30);

cosine窗口sinc函数;

Simoncelli和Adelson(1990b)的QMF-9滤波器用于小波去噪,并对相当多的滤波器系数进行了别名处理(注意,原始滤波器系数被归一化为√2增益,因可以“自反”);

?JPEG 2000的9/7分析滤波器(Taubman和Marcellin2002)。

请参阅原始论文,了解这些系数的全精度值。

3.5.3多分辨率表示

现在我们已经描述了插值和抽取算法,我们可以构建一个完整的图像金字塔(图3.31)。正如我们之前提到的,金字塔可以用来加速

表3.2 2×抽取滤波器系数。这些滤波器的长度为奇数,是对称的,并且归一化为具有单位直流增益(总和为1)。它们的频率响应见图3.30。

图3.30一些2×抽取滤波器的频率响应。立方a = -1滤波器衰减最陡峭,但也有点振铃;小波分析滤波器(QMF-9和JPEG 2000)虽然用于压缩,但有更多混叠。

粗到细的搜索算法,用于在不同尺度上寻找对象或模式,并执行多分辨率混合操作。它们还广泛用于计算机图形硬件和软件中,以使用MIP-map执行分数级减缩,我们将在第3.6节中讨论。

计算机视觉中最著名(也可能是使用最广泛)的金字塔是伯特和阿德森(1983a)提出的拉普拉斯金字塔。构建金字塔时,我们首先将原始图像模糊并以两倍的比例下采样,并将其存储在金字塔的下一层(图3.31和3.32)。由于金字塔中相邻层次之间的采样率r = 2,这种金字塔被称为八度金字塔。伯特和阿德森最初提出了一种五抽头核的形式

,                                           (3.68)

b = 1/4,c = 1/4 - a/2。实际上,他们和其他人都使用= 3/8,这导致了熟悉的二项式核,

图3.31传统图像金字塔:每一层的分辨率(宽度和(高度),因此是其父级的四分之一像素。

图3.32高斯金字塔作为信号处理图示:(a)分析和(b)重合成阶段使用了类似的计算。白色圆圈表示由↑2上采样操作插入的零值。请注意,重建滤波器系数是分析系数的两倍。无论我们是从粗到细还是从细到粗,计算过程都沿着页面向下流动。

图3.33拉普拉斯金字塔。黄色图像构成高斯金字塔,这是通过依次对输入图像进行低通滤波和下采样获得的。蓝色图像与最小的低通图像一起构成了拉普拉斯金字塔,该最小低通图像是重建所需的。每个带通(蓝色)图像都是通过对低分辨率高斯金字塔图像进行上采样和插值计算得出的,结果是该层级低通图像的模糊版本,然后从低通图像中减去这个模糊版本以得到蓝色带通图像。在重建过程中,从最粗略的层级开始,将插值图像和(可选过滤的)高通图像重新加在一起。Q框表示量化或其他金字塔处理,例如通过核心化(将小波值设为0)来去除噪声。

为了计算拉普拉斯金字塔,伯特和阿德森首先将低分辨率图像插值以获得原始图像的低通版本(图3.33)。然后,他们从原始图像中减去这个低通版本,得到带通“拉普拉斯”图像,该图像可以存储起来以便进一步处理。由此产生的金字塔具有完美的重建性,即拉普拉斯图像加上基级高斯(图3.33中的L2)足以精确地重建原始图像。图3.32以信号处理图的形式展示了相同的一维计算过程,完全捕捉了分析和再合成阶段所进行的计算。

伯特和阿德尔森还描述了拉普拉斯金字塔的一个变体,其中低通滤波图像取自原始模糊图像,而不是重建的金字塔(piping

图3.34两个低通滤波器的差值产生一个带通滤波器。虚线蓝色表示与高斯半八度拉普拉斯的接近拟合。

L盒的输出直接用于图3.33中的减法运算)。这种变体的混叠现象较少,因为它避免了下采样和上采样循环往返,但不是自反的,因为拉普拉斯图像不再足以再现原始图像。

与高斯金字塔一样,Laplacian这个词有点名不副实,因为它们的带通图像实际上是(近似)高斯函数或DoGs的差异,

DoG{I;σ1,σ2 } = Gσ1 * I - Gσ2 * I =(Gσ1 - Gσ2)* I。             (3.70)

高斯拉普拉斯(我们在(3.26)中看到的)实际上是它的二阶导数,

LoG{I;σ} =▽2(Gσ*I)=(▽2 Gσ)* I,                           (3.71)

在哪里

                                            (3.72)

是函数的拉普拉斯(算子)。图3.34显示了高斯差分和高斯拉普拉斯在空间和频率上的表现。

高斯拉普拉斯算子具有优雅的数学特性,这些特性在尺度空间领域得到了广泛研究(Witkin1983;Witkin、Terzopoulos和Kass1986;Lindeberg1990;Nielsen、Florack和Deriche1997),并且可以用于多种应用,包括边缘检测(Marr和Hildreth1980;Perona和Malik1990b)、立体匹配(Witkin、Terzopoulos和Kass1987)和图像增强(Nielsen、Florack和Deriche1997)。

拉普拉斯金字塔的一个特别有用的应用是在局部对比度的处理以及高动态范围图像的色调映射(第10.2.1节)。帕里斯、哈辛诺夫和考茨(2011)提出了一种称为局部拉普拉斯滤波器的技术,该技术在构建修改后的拉普拉斯金字塔时使用了局部范围裁剪,以及

图3.35多分辨率金字塔:(a)金字塔采用半八度(五点)采样(奇数层级以灰色显示,便于清晰区分)。(b)小波金字塔——每个小波层级存储原始像素的3/4(通常是水平、垂直和混合梯度),因此小波系数和原始像素的总数相同。

针对小细节和大细节采用不同的强调和衰减曲线,实现边缘保持滤波和色调映射。Aubry、Paris等人(2014)讨论了如何加速单调(单通道)图像的处理,并展示了风格转换应用。

一种较少使用的变体是半八度金字塔,如图3.35a所示。这些最早由克劳利和斯特恩(1984)引入视觉领域,他们称之为低通差分(DOLP)变换。由于相邻层次之间的尺度变化较小,作者认为粗到细的算法表现更好。在图像处理领域,半八度金字塔与棋盘采样网格结合被称为五点采样(费尔纳、范德维尔和昂瑟2005)。在检测多尺度特征时(第7.1.1节),通常会使用半八度甚至四分之一八度金字塔(洛2004;特里格斯2004)。然而,在这种情况下,子采样仅发生在每个八度级别,即图像通过更宽的高斯函数反复模糊,直到实现一个完整的八度分辨率变化(图7.11)。

3.5.4小波

虽然金字塔在计算机视觉应用中被广泛使用,但有些人选择小波分解作为替代方案。小波是能够在空间和频率上局部化信号的滤波器(类似于Gabor滤波器),并且定义在一个尺度层次结构上。小波提供了一种平滑地将信号分解为频率成分的方法,不会产生块状效应,并且与金字塔密切相关。

图3.36图像的小波分解:(a)单层分解,使用PyWavelet代码(https: //pywavelets.readthedocs.io)构建水平、垂直和对角细节小波;(b)多层分解的系数幅度,高-高成分位于右下角,基底位于左上角(Buccigrossi和Simoncelli 1999)©1999 IEEE。请注意,低-高和高-低成分增强了水平和垂直边缘及梯度,而高-高成分则存储了较少出现的混合导数。

小波最初是在应用数学和信号处理领域发展起来的,并由马莱特(1989)引入计算机视觉社区。斯特兰格(1989)、西蒙切利和阿德森(1990b)、里奥尔和维特利(1991)、崔(1992)以及迈耶(1993)都提供了对该主题的良好介绍及历史回顾,而崔(1992)则提供了更全面的应用综述。斯韦尔登斯(1997)描述了我们稍后将讨论的小波提升方法。

小波在计算机图形学领域被广泛用于执行多分辨率几何处理(Stollnitz、DeRose和Salesin1996),并且也被用于计算机视觉中的类似应用(Szeliski1990b;Pentland1994;Gortler和Cohen1995;Yaou和Chang1994;Lai和Vemuri1997;Szeliski2006b;Krishnan和Szeliski2011;Krishnan、Fattal和Szeliski2013),以及多尺度定向滤波(Simoncelli、Freeman等人1992)和去噪(Portilla、Strela等人2003)。

作为图像金字塔和小波分解将图像分解为多分辨率描述,这些描述在空间和频率上都是局部化的,它们之间有何不同?通常的回答是传统金字塔过于冗余,即它们使用比原始图像更多的像素来表示分解,而小波则提供了一个紧密框架,即它们保持分解的大小与图像相同(图3.35b)。然而,某些小波家族实际上也是过度冗余的,以提供更好的平移性或方向控制(Simoncelli,Freeman等,1992)。因此,更好的区分可能是小波比常规带通金字塔更具有方向选择性。

图3.37二维小波分解:(a)高层次图,显示低通和高通变换为单个方框;(b)可分离实现,首先水平进行小波变换,然后垂直进行。I和F方框是用于从其小波分量重新合成图像所需的插值和滤波方框。

二维小波是如何构建的?图3.37a展示了(递归)粗到细构造(分析)流程的一个阶段的高层次示意图,以及互补的重构(合成)阶段。在这个图中,高通滤波器后接抽取,保留了原始像素的3/4,而低频系数的1/4则传递给下一阶段进行进一步分析。实际上,滤波通常被分解为两个可分离的子阶段,如图3.37b所示。生成的三个小波图像有时被称为高-高(HH)、高-低(HL)和低-高(LH)图像。高-低和低-高图像突出了水平和垂直边缘及梯度,而高-高图像则包含较少出现的混合导数(图3.36)。

图3.37b中所示的高通H滤波器和低通L滤波器是如何选择的,以及如何

图3.38一维小波变换:(a)通常使用高通+低通滤波器,随后进行奇数(↓2o)和偶数(↓2e )降采样;(b)提升版本,首先选择奇数和偶数子序列,然后以易于逆向的方式应用低通预测阶段L和高通校正阶段C。

相应的重构滤波器I和F能否计算出来?能否设计出所有都具有有限脉冲响应的滤波器?这一主题在过去二十多年里一直是小波研究领域的主攻方向。答案很大程度上取决于预期的应用,例如,小波是否用于压缩、图像分析(特征提取)或去噪。西蒙切利和阿德森(1990b)在表4.1中展示了一些良好的奇长正交镜像滤波器(QMF)系数,在实际应用中表现良好。

由于小波滤波器的设计是一门极其复杂的艺术,或许有更好的方法?确实,一种更简单的方法是将信号分解为其偶数和奇数部分,然后对每个序列执行可逆的滤波操作,从而产生所谓的提升小波(Figures3.38和3.39)。Sweldens(1996)对第二代小波的提升方案进行了非常易懂的介绍,随后又进行了全面的综述(Sweldens 1997)。

如图3.38所示,而不是首先过滤整个输入序列(图像)

图3.39提升变换以信号处理图形式展示:(a)分析阶段首先从其偶数邻居预测奇数值,存储差分小波,然后通过加入一小部分小波来补偿较粗的偶数值。(b)合成阶段则简单地反转计算流程和某些滤波器及操作的符号。浅蓝色线条显示了使用四个抽头进行预测和校正时的情况,而不仅仅是两个。

使用高通和低通滤波器,然后保留奇数和偶数子序列,提升方案首先将序列分为其偶数和奇数子部分。用低通滤波器L过滤偶数序列,并从奇数序列中减去结果是可逆的:只需执行相同的过滤操作,然后将结果加回去即可。此外,此操作可以原地完成,从而节省大量空间。同样的方法适用于用校正滤波器C过滤差值信号,以确保偶数序列为低通。一系列这样的提升步骤可用于创建更复杂的滤波响应,同时具有较低的计算成本和保证的可逆性。

通过考虑图3.39中的信号处理图,可以更容易地理解这一过程。在分析过程中,从奇数值中减去偶数值的平均值,以获得高通小波系数。然而,偶数样本仍然包含低频信号的混叠样本。为了补偿这一点,向偶数序列中添加一小部分高通小波,使其正确地经过低通滤波。(很容易证明有效的低通滤波器是[- 1/8;1/4;3/4;1/4;- 1/8],这确实是一个低通滤波器。)在合成过程中,同样的操作会通过巧妙地改变符号来反转。

当然,我们不必局限于两抽头滤波器。图3.39以浅蓝色箭头显示了可以选加入提升方案中的额外滤波系数,这不会影响其可逆性。实际上,低通和高通滤波操作可以互换,例如,我们可以先对奇数序列(加上中心值)使用五抽头立方低通滤波器,然后用四抽头立方低通预测器来估计小波,

图3.40可转向可移动的多尺度变换(Simoncelli,Freeman         (et al.1992)©1992 IEEE:(a)径向多尺度频域分解;(b)原始图像;(c)一组四个可操纵滤波器;(d)径向多尺度小波分解。

虽然我没有看到这个计划被写下来。

提升小波被称为第二代小波,因为它们能够轻松适应非规则采样拓扑结构,例如计算机图形学应用中出现的多分辨率表面操作(Schroeder和Sweldens 1995)。事实证明,提升加权小波,即其系数能适应所解决的基本问题的小波(Fattal 2009),在低级图像处理任务中以及预处理基于优化的视觉算法中出现的稀疏线性系统时,效果极为显著。这些算法在第四章中讨论(Szeliski 2006b;Krishnan和Szeliski 2011;Krishnan、Fattal和Szeliski 2013)。

  一种替代广泛使用的“可分离”小波构造方法的方法是使用一种更具旋转对称性和方向选择性的表示方式,同时避免了采样信号低于奈奎斯特频率时固有的混叠问题。15西蒙切利、弗里曼等人(1992)引入了一种这样的表示方法,他们称之为可平移多尺度变换的金字塔径向频率实现,或更简洁地说,可转向金字塔。他们的表示不仅过完备(消除了混叠问题),而且

15通常,这种混叠现象可视为信号内容在频带之间移动,而原始信号则缓慢移动。

同时,它具有方向选择性,并且具有相同的分析和合成基函数,即它是自反转的,就像“常规”小波一样。因此,这使得可转向金字塔成为计算机视觉中常用的结构分析和匹配任务的更有用的基础。

图3.40a展示了这种分解在频率空间中的表现。与将频域递归地划分为2×2的正方形不同,这里使用了径向弧线。图3.40d展示了由此产生的金字塔子带。即使这种表示是过度完备的,即小波系数的数量超过了输入像素的数量,但额外的频率和方向选择性使得这种表示在纹理分析和合成(Portilla和Simon-celli 2000)以及图像去噪(Portilla,Strela等2003;Lyu和Simoncelli 2009)等任务中更为优越。

3.5.5应用:图像融合

第3.5.3节中介绍的拉普拉斯金字塔最引人入胜且有趣的应用之一是创建混合复合图像,如图3.41所示(Burt和Adelson 1983b)。虽然将苹果和橙子图像沿中线拼接会产生明显的切口,但通过分段拼接(Burt和Adelson(1983b)称之为他们的方法)则能创造出一种美丽的混合水果的错觉。他们方法的关键在于,红色苹果与橙子之间的低频色彩变化被平滑地融合在一起,而每种水果上的高频纹理则更快地融合,以避免两种纹理叠加时产生的“重影”效果。

为了创建混合图像,首先将每个源图像分解为其自身的拉普拉斯金字塔(图3.42,左列和中列)。然后,每个波段分别乘以一个平滑的权重函数,该函数的范围与金字塔层级成正比。最简单且通用的方法是使用二值掩模图像(图3.41g),并从这个掩模构建高斯金字塔。接着,将每个拉普拉斯金字塔图像与其对应的高斯掩模相乘,这两个加权金字塔的总和用于构建最终图像(图3.42,右列)。

图3.41e–h显示了这一过程可以应用于任意掩模图像,并取得了令人惊讶的结果。将金字塔融合扩展到任意数量的图像也非常简单,这些图像的像素来源由一个整数值标签图像表示(见练习3.18)。这在图像拼接和合成应用中特别有用,因为不同图像之间的曝光可能有所不同,如第8.4.4节所述,在该节中我们还介绍了更近期的变体,例如泊松融合和梯度域融合(P rez,Gangnet和Blake 2003;Levin,Zomet等2004)。  

图3.41拉普拉斯金字塔融合(Burt和Adelson 1983b)©1983 ACM:苹果的原始图像,(b)橙子的原始图像,(c)常规拼接,(d)金字塔融合。两个图像的掩码融合:(e)第一输入图像,(f)第二输入图像,(g)区域掩码,(h)融合后的图像。

图3.42拉普拉斯金字塔融合细节(Burt和Adelson 1983b)©1983 ACM。前三个行显示了拉普拉斯金字塔的高频、中频和低频部分(分别取自第0、2和4层)。左列和中列显示了原始苹果和橙子图像,经过平滑插值函数加权后,而右列则显示了平均贡献。

图3.43图像变形涉及修改图像函数的域,而不是其范围。

3.6几何变换

在前几节中,我们探讨了如何通过插值和抽取来改变图像的分辨率。本节我们将研究如何执行更一般的变换,例如图像旋转或一般变形。与第3.1节中讨论的点过程不同,在点过程中应用于图像的函数会转换图像的范围,

g(x) = h(f (x));                                             (3.73)

在这里,我们研究那些改变域的函数,

g(x) = f (h(x));                                             (3.74)

如图3.43所示。

我们首先研究第2.1.1节中首次介绍的全局参数化二维变换(这种变换被称为参数化,因为它由少量参数控制)。接着,我们将注意力转向更局部的一般变形,例如定义在网格上的变形(第3.6.2节)。最后,在第3.6.3节中,我们将展示如何将图像扭曲与交叉溶解结合,以创建有趣的变形(中间动画)。对于对这些主题感兴趣的读者,有赫克伯特(1986)的优秀综述,以及沃尔伯格(1990)、戈梅斯、达萨等人(1999)和阿肯宁-莫勒与海恩斯(2002)的非常易懂的教科书。请注意,赫克伯特的综述是关于纹理映射的,这是计算机图形学界对将图像扭曲到表面这一主题的称呼。

3.6.1参数变换

参数变换对图像应用全局变形,其中变换的行为由少量参数控制。图3.44显示了几个例子。

  图3.44二维几何图像变换的基本集合。

变换

矩阵

# DoF

保护

图标

翻译

刚性(欧几里得)

[I   t]2×3

[R   t]2×3

2

3

  方向

长                

相似仿射

[sR t]2×3

[A]2×3

4

6

角                   

  平行         /   /

与投影有关的

[]3×3

8

      直线

表3.3二维坐标变换层次。每个变换还保留了其下方行中列出的属性,即相似性不仅保持角度,还保持平行性和直线。2×3矩阵通过增加第三行[0T 1]扩展为完整的3×3矩阵,用于齐次坐标变换。

这些变换的示例基于图2.4所示的二维几何变换。这些变换的公式最初列于表2.1中,为便于参考,此处重印于表3.3中。

一般来说,给定一个由公式xI = h(x)指定的变换和源图像f (x),我们如何计算新图像g(x)中像素的值,如公式(3.74)所示?思考一下这个问题,看看你能否解决。

如果你和大多数人一样,你会想出一个类似于算法3.1的算法。这个过程被称为前向变形或前向映射,如图3.45a所示。你能想到这种方法有什么问题吗?

事实上,这种方法存在一些局限性。当xI的值为非整数时,将像素f (x)复制到g中的位置xI的过程是不明确的。我们

图3.45前向变形算法:(a)将像素f (x)复制到图像g(x9)中对应位置x9 = h(x);(b)源和目标像素位置的细节。

过程forwardWarp(f;h;out g):

对于函数f (x)中的每个像素x

1.计算目标位置x9 = h(x)。

2.将像素f (x)复制到g(x9)。

算法3.1通过参数变换x9 = h(x)将图像f (x)转换为图像g(x9)的前向变形算法。

在这种情况下你会怎么做?你会怎么做?

你可以将x9的值四舍五入到最近的整数坐标并复制该像素,但生成的图像会出现严重的锯齿现象,且在动画变换时像素会频繁跳跃。你也可以以加权(双线性)方式将其值分配给四个最近邻,同时跟踪每个像素的权重并在最后进行归一化。这种技术称为“散射”,有时用于图形学领域的体绘制(Levoy和Whitted 1985;Levoy 1988;Westover 1989;Rusinkiewicz和Levoy 2000)。不幸的是,这种方法不仅存在一定程度的锯齿现象,还伴随着相当程度的模糊(高分辨率细节丢失)。

前向变形的第二个主要问题是出现裂缝和孔洞,特别是在放大图像时。用附近的邻居填充这些孔洞会导致进一步的混叠和模糊。

那么,我们能做些什么呢?一个更好的解决方案是使用逆变形(算法3.2),其中目标图像g(x9)中的每个像素都从原始图像f (x)中采样(图3.46)。

这与前向扭曲算法有何不同?首先,由于(x9)(大概)定义了g(x9)中的所有像素,我们不再有空洞。更重要的是,

图3.46反向变形算法:(a)像素g(x,)从图像f (x)中对应位置x = (x,)处采样;(b)源和目标像素位置的细节。

过程inverseWarp(f;h;out g):

对于每个像素x,在g(x,)中

1.计算源位置x = (x,)

2.在位置x处重新采样f (x),并复制到g(x,)

算法3.2逆变形算法,用于利用参数变换x、= h(x)从图像f (x)创建图像g(x,)。

在非整数位置重采样图像是一个研究得很好的问题(一般图像插值,参见第3.5.2节),可以使用控制混叠的高质量滤波器。

函数(x,)来自哪里?通常,它可以简单地计算为h(x)的逆。事实上,表3.3中列出的所有参数变换都有闭式解的逆变换:只需取指定变换的3×3矩阵的逆即可。

在其他情况下,最好将图像变形问题表述为根据映射关系x =(x,)从目标像素x到源像素x重新采样源图像f (x)。例如,在光流(第9.3节)中,我们估计流场是生成当前像素的位置,而不是计算它要去的目标像素。同样地,在校正径向畸变(第2.1.5节)时,我们通过计算最终(未畸变)图像中每个像素在原始(已畸变)图像中的对应位置来校准镜头。

哪些插值滤波器适合重采样过程?第3.5.2节中研究的所有滤波器都可以使用,包括最近邻、双线性、双三次和窗化sinc函数。虽然双线性滤波器常用于加速(例如,在补丁跟踪算法的内循环中,见第9.1.3节),但双三次和窗化sinc滤波器更为优选。

在视觉质量很重要的情况下。

为了计算非整数位置x处的f (x)值,我们只需应用通常的FIR重采样滤波器,

                                      (3.75)

其中(x,y)是子像素坐标值,h(x,y)是某种插值或平滑核。回想第3.5.2节,当进行抽取时,平滑核根据下采样率r被拉伸和重新缩放。

不幸的是,对于一般的(非缩放)图像变换,重采样率r并没有明确定义。考虑一种变换,它拉伸x方向而压缩y方向。重采样核应该沿x方向进行规则插值,并在y方向上平滑(以消除模糊图像的锯齿)。对于一般的仿射或透视变换,情况会变得更加复杂。

我们能做些什么呢?幸运的是,傅里叶分析可以提供帮助。一维域缩放定律的二维推广是

g(Ax),jAj -1G(A-T f)。                                     (3.76)

对于表3.3中除透视变换外的所有变换,矩阵A已经定义。对于透视变换,矩阵A是透视变换的线性化导数(图3.47a),即投影引起的拉伸的局部仿射近似(Heckbert1986;Wolberg1990;Gomes,Darsa等1999;Akenine-Mo...ller和Haines2002)。

为了防止混叠,我们需要使用一个频率响应为最终所需频谱通过A-T变换投影的滤波器来预滤图像f(x)(Szeliski,Winder,和Uyttendaele 2010)。通常情况下(对于非缩放变换),这个滤波器是非可分离的,因此计算速度非常慢。因此,在实际应用中,通常采用该滤波器的一些近似方法,包括MIP映射、椭圆加权高斯平均和各向异性滤波(Akenine-Mo...ller和Haines 2002)。

MIP-映射

  MIP映射最初由威廉姆斯(1983)提出,作为快速预滤用于计算机图形纹理映射的图像的一种方法。MIP图16是一种标准的图像金字塔(图3.31),其中每一层都用高质量滤波器预滤,而不是使用质量较差的近似方法,例如伯特和阿德森(1983b)提出的五抽头二项式滤波器。为了重新采样

图3.47各向异性纹理滤波:(a)变换A的雅可比矩阵及其诱导的水平和垂直重采样率{ax,x,ax,y,ay,x,ay,y };(b)椭圆形EWA平滑核的足迹;(c)沿主轴使用多个样本进行各向异性滤波。图像像素位于线段交点处。

从MIP图中获取图像,首先计算重采样率r的标量估计值。例如,r可以是A中绝对值的最大值(这抑制了混叠)或最小值(这减少了模糊)。Akenine-Mo...ller和Haines(2002)对此进行了更详细的讨论。

一旦指定了重采样率,就使用以2为底的对数计算出一个分数金字塔级别,

l = log2 r.                                                 (3.77)

一个简单的解决方案是从更高或更低的金字塔层级重新采样纹理,具体取决于减少混叠还是模糊更为重要。更好的方法是重新采样两幅图像,并使用l的分数部分线性混合它们。由于大多数MIP映射实现都在每个层级内使用双线性重采样,这种方法通常被称为三线性MIP映射。计算机图形渲染API,如OpenGL和Direct3D,提供了参数,可以根据所需的速度与质量之间的权衡选择不同的MIP映射变体(以及采样率r的计算方式)。练习3.22让你更详细地考察这些权衡。

椭圆加权平均值

椭圆加权平均(EWA)滤波器由格林和赫克伯特(1986)发明,基于这样的观察:仿射映射x=Ax‘在每个源像素x附近定义了一个偏斜的二维坐标系(图3.47a)。对于每一个目标像素x’,计算x‘上小像素网格到x的椭球投影(图3.47b)。然后使用高斯函数的逆来过滤源图像g(x)。

Figure 3.48     One-dimensional signal resampling (Szeliski, Winder, and Uyttendaele2010): (a) original sampled signal f (i); (b) interpolated signal g1 (); (c) warped signal g2 (); (d) ltered signal g3 (); (e) sampled signal f, (i).   The corresponding spectra are shown below the signals, with the aliased portions shown in red.

图3.48一维信号重采样(Szeliski,Winder和Uyttendaele 2010):(a)原始采样信号f (i);(b)插值信号g1(儿);(c)变形信号g2(儿);(d)滤波信号g3(儿);(e)采样信号f (i)。相应的频谱显示在信号下方,混叠部分以红色表示。

covariance matrix is this ellipsoid.

协方差矩阵就是这个椭球体。

尽管它以高质量滤波器著称(Akenine-Mo...ller和Haines 2002),我们在研究中发现(Szeliski、Winder和Uyttendaele 2010),由于使用了高斯核,该技术同时存在模糊和混叠问题,与更高品质的滤波器相比。EWA速度也相当慢,尽管已提出基于MIP映射的更快变体,如(Szeliski、Winder和Uyttendaele 2010)所述。

Anisotropic filtering

各向异性滤波

一种替代方法是使用各向异性滤波(Barkans1997;Akenine-Mo...ller和Haines2002),有时在图形硬件(GPU)中实现。这种方法通过沿EWA高斯分布的主要轴线结合不同分辨率的多个样本(MIP图中的分数级)来实现(图3.47c)。

Multi-pass transforms

多遍变换

处理图像时,最佳的方法是在每个像素处使用理想的低通滤波器自适应预滤源图像,以避免过度模糊或混叠,即使用定向偏斜的sinc函数或低阶(例如三次)近似(图3.47a)。图3.48展示了这一过程在一维中的实现方式。信号首先(理论上)被插值为连续波形,(理想情况下)低通滤波至新的奈奎斯特率以下,然后重新采样到

图3.49图像变形的替代方案(Gomes,Darsa等,1999)©1999 Morgan Kauf-man:(a)稀疏控制点-→变形网格;(b)密集的控制点对应集;(c)方向线对应;(d)均匀四边形网格。

the final desired resolution.  In practice, the interpolation and decimation steps are concate- nated into a single polyphase digital filtering operation (Szeliski, Winder, and Uyttendaele 2010).

最终所需的分辨率。在实践中,插值和抽取步骤被合并为一个单一的多相数字滤波操作(Szeliski、Winder和Uyttendaele 2010)。

对于参数变换,定向二维滤波和重采样操作可以通过一系列一维重采样和剪切变换来近似实现(Catmull和Smith 1980;Heckbert 1989;Wolberg 1990;Gomes、Darsa等1999;Szeliski、Winder和Uyttendaele 2010)。使用一系列一维变换的优势在于,它们比大型、不可分离的二维滤波器核更高效(就基本算术运算而言)。然而,为了防止混叠,可能需要在应用剪切变换之前反方向上采样(Szeliski、Winder和Uyttendaele 2010)。

3.6.2    Mesh-based warping

3.6.2基于网格的变形

例如,考虑将一张脸从皱眉变成微笑(图3.49a)。在这种情况下,需要做的是将嘴角向上弯曲

保持脸部其他部分不变。17要实现这种变换,需要在图像的不同部位进行不同程度的运动。图3.49显示了一些常用的方法。

第一种方法如图3.49a-b所示,是指定一组稀疏的对应点。然后可以使用多种技术(详见第9章)将这些点的位移插值到一个密集的位移场中,具体方法在第4.1节关于散点数据插值的部分有详细描述。一种可能性是在一张图像中的点集进行三角化(de Berg,Cheong等人,2006;Litwinowicz和Williams,1994;Buck,Finkelstein等人,2000),并使用由每个三角形内的三个顶点指定的仿射运动模型(表3.3)。如果目标图像根据新的顶点位置进行了三角化,则可以使用逆变形算法(图3.46)。如果源图像进行了三角化并用作纹理贴图,则可以使用计算机图形渲染算法来绘制新图像(但在三角形边缘处需谨慎操作以避免潜在的混叠现象)。

插值稀疏位移集的替代方法包括移动附近的四边形网格顶点,如图3.49a所示,使用变分(能量最小化)插值器,例如正则化(Litwinowicz和Williams1994),参见第4.2节,或使用局部加权(径向基函数)组合的位移(Section4.1.1)。(参见第4.1节了解其他散数据插值技术。)如果使用四边形网格,则可能需要使用平滑插值器,如二次B样条(Farin2002;Lee、Wolberg等人1996),将位移插值到单个像素值。

在某些情况下,例如,如果已经为图像估计了一个密集深度图(Shade,Gortler等,1998),我们只知道每个像素的前向位移。如前所述,在目标位置绘制源像素,即前向变形(图3.45),会遇到多个潜在问题,包括混叠和小裂缝的出现。在这种情况下,另一种技术是将位移场(或深度图)前向变形到新位置,填补结果地图中的小孔,然后使用逆向变形进行重采样(Shade,Gortler等,1998)。这种方法通常比前向变形效果更好,因为位移场往往比图像平滑得多,所以在位移场的前向变形过程中引入的混叠现象要少得多。

  第二种指定局部变形位移的方法是使用对应的定向线段(Beier和Neely 1992),如图3.49c和3.50所示。每条线段上的像素按照指定的方式从源转移到目标,其他像素则通过这些位移的平滑插值进行扭曲。每条线

图3.50基于线的图像变形(Beier和Neely1992)©1992 ACM:(a) distance

计算和位置转移;(b)渲染算法;(c)用于变形的两个中间扭曲。

段对应关系指定了邻近像素的平移、旋转和缩放,即相似变换(表3.3),如图3.50a所示。线段通过一个权重函数影响图像的整体位移,该权重函数取决于与线段的最小距离(如果u∈[0,1],则为图3.50a中的v;否则取P和Q之间较短的距离)。

指定位移场的最后一种方法是使用专门适应底层图像内容的网格,如图3.49d所示。手动指定这样的网格可能涉及相当多的工作;Gomes、Darsa等人(1999)描述了一个交互式系统来实现这一点。一旦两个网格被指定,就可以通过线性插值生成中间变形,并使用样条函数插值网格节点处的位移。

3.6.3应用:基于特征的变形

虽然扭曲可以用来改变单个图像的外观或动画效果,但通过使用现在通常称为变形(Beier和Neely1992;Lee、Wolberg等人1996;Gomes、Darsa等人1999)的过程来扭曲和混合两个或多个图像可以获得更强大的效果。

图3.51展示了图像变形的本质。与简单地在两张图像之间交叉溶解导致如上行所示的重影不同,每张图像在融合前都会向另一张图像进行变形,如下行所示。如果对应关系设置得当(使用图3.49中展示的任何技术),相应的特征将对齐,不会产生重影。

上述过程在变形过程中生成的每个中间帧上重复进行,每次间隔使用不同的混合(和变形量)。设t∈[0,1]是描述插值帧序列的时间参数。权重函数-

图3.51图像变形(Gomes,Darsa         (et al.1999)©1999摩根考夫曼。上排:如果两个图像只是简单混合,会出现可见的重影效果。下排:首先将两个图像分别变形到相同的中间位置(例如,向另一个图像的一半处),然后将变形后的图像混合,从而实现无缝变形。

对于混合图像中的两个扭曲图像,对应关系的参数是(1 - t)和t,像素的运动也通过线性插值来指定。定义部分扭曲图像向目标移动的意义时需谨慎,特别是当期望的运动远非线性时(Sederberg,Gao等,1993)。练习3.25要求你实现一个变形算法,并在这些具有挑战性的条件下进行测试。

3.7其他阅读材料

如果你对图像处理这一主题感兴趣,可以深入探索,一些受欢迎的教科书包括戈梅斯和韦尔霍(1997)、贾(1997)、普拉特(2007)、伯格和伯奇(2009)以及冈萨雷斯和伍兹(2017)。该领域的顶级会议和期刊是IEEE国际图像处理会议和IEEE图像处理汇刊。

对于图像合成操作,波特和达夫(1984)的开创性参考文献是该领域的权威,而布林(1994a,b)则提供了更详细的教程。在图像合成领域,史密斯和布林(1996)首次将这一主题带入图形学界,而王和科恩(2009)则提供了深入的综述。

在线性滤波领域,Freeman和Adelson(1991)对可分离和可控定向带通滤波器进行了很好的介绍,而Perona(1995)则展示了如何

将任何滤波器近似为可分离组件的总和。

非线性滤波的文献非常广泛且多样;它包括诸如双边滤波(Tomasi和Manduchi1998;Durand和Dorsey2002;Chen、Paris和Du-Rand2007;Paris和Durand2009;Paris、Kornprobst等人2008)、相关迭代算法(Saint-Marc、Chen和Medioni1991;Nielsen、Florack和Deriche1997;Black、Sapiro等人1998;Weickert、ter Haar Romeny和Viergever1998;Weickert1998;Barash2002;Scharr、Black和Haussecker2003;Barash和Comaniciu2004)以及变分方法(Chan、Osher和Shen2001;Tschumperl  和Deriche2005  ;Tschumperl2006;Kaftory,Schechner以及Zeevi2007)和引导滤波(Eisemann和Durand2004;Petschnigg、Agrawala等人2004;He、Sun和Tang2013)。

图像形态学的参考文献包括Haralick和Shapiro ( 1992,第5.2节)、Bovik (2000,第2.2节)、Ritter和Wilson (2000,第7节)、Serra(1982)、Serra和Vincent(1992)、Yuille、Vincent和Geiger(1992)以及Soille(2006)。

经典的图像金字塔和金字塔融合论文由伯特和阿德森(1983a,b)撰写。小波首次被引入计算机视觉领域是由马莱特(1989)提出的,相关的优秀教程、综述文章和书籍也已出版(斯特兰格1989;西蒙切利和阿德森1990b;里奥尔和Vetterli1991;Chui1992;Meyer1993;Sweldens1997).)。小波在计算机图形学中广泛用于多分辨率几何处理(斯托尔尼茨、德罗斯和塞利辛1996),并在计算机视觉中的类似应用中得到使用(舍利斯基1990b;彭特兰1994;戈特勒和科恩1995;雅乌和张1994;莱和维穆里1997;舍利斯基2006b;克里希南和舍利斯基2011;克里希南、法塔尔和舍利斯基2013),以及多尺度定向滤波(西蒙切利、弗里曼等人1992)和去噪(波蒂利亚、斯特雷拉等人2003)。

虽然图像金字塔(第3.5.3节)通常使用线性滤波器构建,但最近的研究采用了非线性滤波器,因为这些滤波器能更好地保留细节和其他显著特征。计算机视觉领域的代表性论文包括Gluckman(2006a,b);Lyu和Simoncelli(2008),以及计算摄影领域的Bae、Paris和Durand(2006),Farbman、Fattal等人(2008)和Fattal(2009)。

高质量的图像变形和重采样算法在图像处理文献(Wolberg 1990;Dodgson 1992;Gomes,Darsa等1999;Szeliski,Winder和Uyttendaele 2010)和计算机图形学(Williams 1983;Heckbert 1986;Barkans 1997;Weinhaus和Devarajan 1997;Akenine-Mo...ller和Haines 2002)中都有涉及,这些算法通常被称为纹理映射。图像变形和图像混合技术的结合用于实现图像之间的变形,这一主题在一系列文章中有所讨论。

开创性的论文和书籍(Beier和Neely1992;Gomes,Darsa et al.1999)。

3.8练习

例3.1:颜色平衡。编写一个简单的应用程序,通过将每个颜色值乘以不同的用户指定常数来改变图像的颜色平衡。如果您想更复杂一些,您可以使这个应用程序具有交互性,并使用滑块。

1.如果在乘法之前或之后进行伽玛变换,你得到的结果是否不同?为什么?

2.使用不同的色彩平衡设置(大多数相机通过菜单控制色彩平衡)用数码相机拍摄同一张照片。你能恢复不同设置之间的色彩平衡比例吗?你可能需要将相机放在三脚架上,并手动或自动对齐图像以实现这一点。或者,可以使用色卡(图10.3b),如第2.3节和第10.1.1节所述。

3.你能想到任何原因,为什么你可能想要对图像执行颜色扭曲(第3.1.2节)吗?参见练习2.8以了解一些相关的想法。

例3.2:去马赛克。如果你有相机的RAW图像,可以自行进行去马赛克处理(第10.3.1节)。如果没有,只需以拜耳马赛克模式对RGB图像进行降采样。除了简单的双线性插值外,还可以尝试第10.3.1节中描述的更高级技术。将你的结果与相机生成的结果进行比较。你的相机是否在RAW值和JPEG中的颜色平衡值之间执行简单的线性映射?一些高端相机具有RAW+JPEG模式,这使得这种比较变得更加容易。

例3.3:合成与反射。第3.1.3节描述了将一个alpha蒙版图像叠加到另一个图像上的合成过程。回答以下问题,并可选择通过实验验证:

1.大多数捕获的图像都应用了伽玛校正。这是否使基本合成公式(3.8)失效;如果是这样,应该如何修复?

2.添加剂(纯反射)模型可能有局限性。如果玻璃被染色,特别是非灰色调的?如果玻璃脏了或有污渍呢?如何建模波纹玻璃或其他类型的折射物体?

例3.4:蓝色背景遮罩。设置一个蓝色或绿色背景,例如通过购买一大块彩色海报板。先拍摄一张空白背景的照片,然后拍摄一张有新物体出现在背景前的照片。利用每个彩色像素与其假设对应的背景像素之间的差异来拉伸遮罩,可以采用第3.1.3节或史密斯和布林(1996)描述的技术之一。

例3.5:差分密钥。实现差分密钥算法(参见第3.1.3节)(Toyama,Krumm等人,1999年),包括以下步骤:

1.计算“空”视频序列中每个像素的均值和方差(或中位数和稳健方差)。

2.对于每个新帧,将每个像素分类为前景或背景(将背景像素设置为RGBA=0)。

3.(可选)计算alpha通道,并在新背景上合成。

4.(可选)使用形态学清理图像(第3.3.1节),标记连通分量(第3.3.3节),计算它们的质心,并从一帧到另一帧跟踪它们。利用此功能构建“人数计数器”。

例3.6:照片效果。编写各种照片增强或效果滤镜:对比度、太阳化(量化)等。哪些是实用的(执行合理的校正),哪些是更具创意的(创建不寻常的图像)?

例3.7:直方图均衡化。计算图像的灰度(亮度)直方图,并对其进行均衡化,使色调看起来更好(并且图像对曝光设置不那么敏感)。您可能需要使用以下步骤:

1.将彩色图像转换为亮度(第3.1.2节)。

2.计算直方图、累积分布和补偿传递函数(第3.1.4节)。

3.(可选)尝试通过确保一定比例的像素(例如,5%)映射到纯黑白来增加图像的“冲击力”。

4.(可选)限制传递函数中的局部增益f (I)。一种方法是在执行累积(3.9)时,将f (I) <吖I或f (I) <吖,同时保留任何未累积的值作为“储备”。(具体细节由你来确定。)

5.通过查找表补偿亮度通道,并使用颜色比率(2.117)重新生成彩色图像。

6.(可选)在原始图像中被裁剪的颜色值,即具有一个或多个饱和颜色通道的颜色值,在重新映射到非裁剪值时可能会显得不自然。扩展您的算法以以某种有用的方式处理这种情况。

例3.8:局部直方图均衡化。计算每个补丁的灰度(亮度)直方图,但根据距离(样条曲线)添加顶点。

1.在练习3.7(亮度计算)的基础上进行扩展。

2.将值(计数)分配给相邻顶点(双线性)。

3.转换为CDF(查找函数)。

4.(可选)使用CDF的低通滤波。

5.为最终查找插值相邻的CDF。

例3.9:邻域运算的填充。写出计算公式  

图3.13所示的每种填充模式的宽度和高度(M,N)。例如,对于复制(夹紧),

f (i, j) = f (k, l),

k = max(0,min(M - 1,i)),l = max(0,min(N - 1,j)),

(提示:除了常规算术运算符之外,您可能还需要使用最小值、最大值、模和绝对值运算符。)

详细描述这些不同模式的优缺点。

•(可选)通过绘制一个纹理坐标超出[0.0,1.0]范围的纹理映射矩形并使用不同的纹理限制模式来检查图形卡的功能。

例3.10:可分离滤波器。使用可分离核实现卷积。输入应为灰度或彩色图像,以及水平和垂直核。确保支持前一个练习中开发的填充机制。你将在后续的一些练习中需要这些功能。如果你已经在使用的图像处理包(如IPL)中可以访问可分离滤波器,则跳过此练习。

•(可选)使用Pietro Perona(1995)的技术将卷积近似为多个可分离内核的和。让用户指定内核的数量,并报告一些合理的近似保真度指标。

例3.11:离散高斯滤波器。讨论实现离散高斯滤波器时的以下问题:

•如果你仅在离散位置采样连续高斯滤波器的方程,能否得到期望的特性,例如系数是否总和为1?同样地,如果你采样高斯函数的导数,样本是否总和为0或具有消失的高阶矩?

是否最好采用原始信号,用sinc插值,用连续高斯模糊,然后在重新采样前用sinc预滤波?在频域中是否有更简单的处理方法?

在傅里叶域中产生高斯频率响应,然后取逆FFT以获得离散滤波器是否更有意义?

截断滤波器如何改变其频率响应?是否引入任何额外的伪影?

二维滤波器是否与连续滤波器一样具有旋转不变性?是否有改进的方法?事实上,任何二维离散(可分离或不可分离)滤波器是否都能真正具有旋转不变性?

例3.12:锐化、模糊和噪声消除。实现一些软化、锐化和非线性扩散(选择性锐化或噪声消除)滤波器,如高斯、中值和双边(第3.3.1节),如第3.4.2节所述。

处理模糊或嘈杂的图像(在低光下拍摄是获得两者的好方法),并尝试改善它们的外观和可读性。

例3.13:可操纵滤波器。实现Freeman和Adelson(1991)的可操纵滤波器算法。输入应为灰度或彩色图像,输出应为多波段

图像由G和G0组成。滤波器的系数可以在论文中找到

Freeman和Adelson(1991)提出。

在你选择的多张图像上测试各种顺序滤波器,看看是否可以可靠地找到角点和交点特征。这些滤波器在以后检测拉长结构时会非常有用,例如线(第7.4节)。

图3.52用于测试重采样算法质量的样本图像:(a)合成

chirp;(b)和(c)一些来自图像压缩社区的高频图像。

例3.14:双边和引导图像滤波器。实现或下载双边和/或引导图像滤波器的代码,并使用它来实现一些图像增强或处理应用

插件,如第3.3.2节所述

例3.15:傅里叶变换。证明Szeliski(2010,表3.1)中列出的傅里叶变换性质,并推导Szeliski(2010,表3.2)和表3.1中列出的傅里叶变换对的公式。这些练习对于希望熟练掌握傅里叶变换非常有用,因为这是一项在分析和设计许多计算机视觉算法的行为和效率时非常有用的技能。

例3.16:高质量图像重采样。实现第3.5.2节中介绍的几种低通滤波器,以及图3.28中所示的窗函数sinc。可以自由实现其他滤波器(Wolberg1990;Unser1999)。

应用滤镜来持续调整图像大小,包括放大(插值)和缩小(裁剪);比较不同滤镜生成的动画效果。使用合成的啁啾图像(图3.52a)和具有大量高频细节的自然图像(图3.52b-c)。

您可能会发现编写一个简单的可视化程序很有帮助,该程序可以同时连续播放两个或多个过滤器的动画,并允许您在不同的结果之间“闪烁”。

讨论每个过滤器的优点和缺点,以及速度和质量之间的权衡。

例3.17:金字塔。构建一个图像金字塔。输入应该是灰度或彩色图像、可分离滤波器核和所需级别的数量。至少实现以下核:

?2×2块过滤;

Burt和Adelson的二项式核1/16(1;4;6;4;1)(Burt和Adelson1983a);

高质量的七或九抽滤器。

比较各种降采样滤波器的视觉质量。同时,将输入图像移位1到4个像素,并比较由此产生的降采样(四分之一大小)图像序列。

例3.18:金字塔混合。编写一个程序,输入两个颜色图像和一个二进制掩模图像,并生成这两个图像的拉普拉斯金字塔混合。

1.为每个图像构建拉普拉斯金字塔。

2.为两个掩模图像(输入图像及其补码)构建高斯金字塔。

3.将每个拉普拉斯图像乘以相应的掩模,并将图像相加(见图3.41)。

4.从混合的拉普拉斯金字塔中重建最终图像。

将你的算法推广到输入n张图像和一张标签图像,标签值为1...n(值0可以保留用于“无输入”)。讨论加权求和阶段(第3步)是否需要跟踪总权重以进行重新归一化,或者数学上是否可以直接计算。使用你的算法来混合两张曝光不同的图像(以避免过曝和欠曝区域),或创作性地混合两个不同场景。

例3.19:PyTorch中的金字塔融合。用PyTorch重写你的金字塔融合练习。

1. PyTorch支持所有你需要的基本元素,即固定大小的卷积(确保它们分别过滤每个通道)、下采样、上采样以及加法、减法和乘法(尽管后者很少使用)。

2.这个练习的目标不是训练卷积权重,而是熟悉PyTorch中可用的DNN原语。

3.将您的结果与使用标准Python或C++计算机视觉库的结果进行比较。它们应该是相同的。

4.讨论您是否更喜欢或更不喜欢这种API用于这些类型的固定管道成像任务。

例3.20:局部拉普拉斯——具有挑战性。实现局部拉普拉斯对比度操作技术(Paris、Hasinoff和Kautz2011;Aubry、Paris等人2014),并使用该技术实现边缘保持滤波和色调操作。

例3.21:小波构造和应用。实现第3.5.4节中描述的小波族之一,或由Simoncelli和Adelson(1990b)描述的小波族之一,以及基本拉普拉斯金字塔(练习3.17)。将得到的表示应用于以下两个任务之一:

•压缩:计算不同小波实现中每个频带的熵,假设给定的量化级别(例如,1/4灰度级,以保持舍入误差在可接受范围内)。对小波系数进行量化并重建原始图像。哪种技术表现更好?(参见西蒙切利和阿德森(1990b)或大量关于小波压缩的论文中的典型结果。)

去噪。计算小波后,使用核法抑制小值,即使用分段线性或其他C0函数将小值设为零。比较不同小波和金字塔表示的去噪结果。

例3.22:参数化图像变形。编写代码,进行仿射和透视图像变形(可选双线性)。尝试各种插值方法,并报告它们的视觉质量。特别是,讨论以下内容:

在MIP映射中,仅选择与计算出的分数级相邻的较粗级别会产生更模糊的图像,而选择更细的级别则会导致混叠。解释为什么会这样,并讨论将混叠图像和模糊图像(三线性MIP映射)混合是否是一个好主意。

当水平重采样率与垂直重采样率的比值相差很大(各向异性)时,MIP-map的表现更差。建议一些方法来减少此类问题。

例3.23:局部图像变形。打开一个图像,并以以下方式之一改变其外观:

1.点击多个像素并将其移动(拖动)到新位置。对由此产生的稀疏位移场进行插值,以获得密集运动场(第3.6.2节和第3.5.1节)。

2.在图像中绘制多条线。移动线的端点以指定它们的新位置,并使用第3.6.2节讨论的Beier-Neely插值算法(Beier和Neely1992)来获得密集运动场。

3.叠加样条控制网格,并一次移动一个网格点(可选择变形级别)。

4.具有密集的每像素流场,并使用软“画笔”设计水平和垂直速度场。

5.(可选):证明当线段变短时,Beier-Neely线性变形是否可以简化为基于点的稀疏变形(简化为点)。

例3.24:前向变形。给定上一练习中的位移场,编写一个前向变形算法:

1.使用splatting编写一个前向平滑器,可以是最近邻或软累积(第3.6.1节)。

2.编写一个两步算法,该算法对位移场进行前向变形,填补小孔,然后使用反向变形(Shade、Gortler等人,1998)。

3.比较这两种算法的质量。

例3.25:基于特征的变形。扩展你在练习3.23中编写的变形代码,以导入两个不同的图像,并指定两个图像之间的对应关系(点、线或基于网格)。

1.通过部分扭曲图像并交叉溶解(第3.6.3节)来创建变形。

2.尝试使用变形算法执行图像旋转,并讨论它是否按你想要的方式工作。

例3.26:二维图像编辑器。扩展你在练习2.2中编写的程序,导入图像并让你创建图片的“拼贴”。你应该实现以下步骤:

1.打开一个新的图像(在单独的窗口中)。

2.拖动(橡皮筋)以裁剪子区域(或选择整个图像)。

3.粘贴到当前画布。

4.选择变形模式(运动模型):平移、刚性、相似性、仿射或透视。

5.拖动轮廓的任意一角,以更改其变换。

图3.53在这幅图片的右侧可以看到一个微弱的彩虹图像。你能想出一种方法来增强它(练习3.29)吗?

6.(可选)更改图像的相对顺序以及当前正在操作的图像。

用户应该看到各种图像的组成是重叠在一起的。

该练习应基于软件库中支持的图像转换类构建。还应支持创建表示的持久性(保存和加载)(对于每个图像,保存其转换)。

例3.27:三维纹理映射查看器。将你在练习2.3中创建的查看器扩展到包含纹理映射多边形渲染。将每个多边形(u;v;w)坐标增强到图像中。

例3.28:图像去噪。实现本章中描述的至少两种不同的图像去噪技术,并在合成噪声图像序列和真实世界(低光)序列上进行比较。算法的性能是否取决于噪声水平估计的正确选择?你能得出哪些结论,关于哪种技术更有效?

例3.29:彩虹增强器-具有挑战性。拍摄一张包含彩虹的照片,如图3.53所示,并增强彩虹的强度(饱和度)。

1.在图像中画一个弧线,标出彩虹的范围。

2.将一个累加彩虹函数(解释为什么它是累加的)拟合到这条弧上(最好使用线性化的像素值),以光谱作为横截面,并估计弧的宽度和添加的颜色量。这是最棘手的部分

问题在于,你需要把(低频的)彩虹图案和隐藏在它后面的自然图像分开。

3.放大彩虹信号并将其重新加入图像中,必要时重新应用伽玛函数以生成最终图像。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值