← 学习库 人工智能:一种现代的方法 本册目录

第24章 感知

原书第 793 页

第24章 感 知

感知,连接着计算机与这个一无所知的世界。

感知(perception)通过解释传感器的响应而为 Agent 提供它们所处的世界的信息。传感器以可用于 Agent 程序的输入的形式测量环境的某些方面。传感器可以简单如一个开关,输出一个比特表示开或者关,也可以复杂如人眼感知形态。人工 Agent 有各种可用的感知形态。其中它们与人类共有的感知形态包括视觉、听觉和触觉。独立的(天辅助装备的)人不具备的感知形态包括电磁波、红外线、GPS 和无线信号。有些机器人可以进行主动传感,也就是说它们发射出一个信号,比如雷达信号或超声波,然后感知从环境中反射回来的信号。在本章中,我们将重点讨论一种感知形态:视觉,而不是探讨所有这些感知形态。

在 17.4 节中我们曾经讨论过 POMDP,一个用于部分可观察环境中基于模型的决策理论 Agent 具有一个传感器模型——给定世界状态下对传感器提供的证据的概率分布 $ P(E|S) $。贝叶斯规则可用于对这个状态的估计进行更新。

对于视觉来说,传感器模型可以分为两个部分:一个目标模型(object model)用于描述存在于视觉世界中的对象:人、建筑物、树木、车辆等。这个目标模型可以是如同计算机辅助设计(CAD)系统中一样精确的三维几何模型,也可以是一些模糊约束,如我们约定人眼之间的距离一般为5~7厘米。一个绘制模型(rendering model)用于描述物理的、几何的或者统计的过程,这些过程产生来自世界的刺激。绘制模型是十分准确的,但是它所能反应的事实却是模糊的。举例来说,一个白色物体处于暗光下可能跟一个在强光下的黑色物体看起来一样,一个小的近距离物体与一个大的远距离物体看起来也没有多少差别。没有额外的证据,我们无法分辨当前图片显示的是哥斯拉(Godzilla)模型玩具还是一只真正的怪兽。

我们可以通过先验知识来处理这种模糊性——例如我们都已经知道哥斯拉怪兽是不可能存在的,由此我们可以确定这个图像显示的肯定是一个模型玩具而不是真正的怪兽——或者我们也可以有选择地忽视这种模糊性。比如对于一个自动驾驶的视觉系统来说它可能分辨不出一定距离之外的物体,但是它可以选择直接忽视这个问题,因为相距太远的物体根本不可能与它发生碰撞。

决策理论 Agent 并不是利用视觉传感器的唯一体系结构,比如说果蝇(Drosophila)部分地是一个反射 Agent,果蝇的视觉系统与翅膀的肌肉之间具有强大的反射神经来对外界刺激做出反应——这是一种未经思考的直接反应。苍蝇以及其他许多飞行动物利用闭环控制体系结构来实现着陆到目标上。苍蝇的视觉系统首先估计出着陆点到自身的距离,然后控制系统根据距离来调节翅膀的肌肉,使之可以快速改变飞行方向,这一过程无需目标对象(着陆点)的详细模型。

与其他传感器(如告诉真空吸尘机器人它将要撞上一面墙的单比特传感器)的数据相

原书第 794 页

比较,无论从揭露的细节而言,还是数据量而言,视觉传感器能收集到的视觉信息都异常丰富。一个机器人的视频摄像机大概能以60Hz的速率产生100万24位像素的数据量:每分钟10GB的数据。所以对于具有视觉的Agent来说,它的真正问题是:视觉信息中的哪部分该用来帮助Agent选择好的行动,而哪一部分又可以直接选择忽略。视觉——以及所有感知——应该用于推进Agent的目标,视觉本身不是终点。

我们可以有三种方法来处理这个问题。首先是基于特征提取的方法,如上面提到的果蝇(Drosophila),强调将简单的计算直接用于传感器的感知信息上。另一种是基于识别的方法,在这种方法中,Agent通过视觉或其他信息来区分它遇到的各个对象,识别可能意味着标识出每幅图像是否包含有需要的食物,是否包含有祖母的人脸。最后一种是基于重建的方法,在这种方法中,Agent将通过一幅或一组图像重建这个世界的几何模型。

最近30年来的研究已经产生了一系列的应用这三种方法的强大工具或者方法。理解这些方法就需要理解图像形成的过程,所以我们首先来了解一下图像生成中发生的一些物理和统计现象。

24.1 图像生成

成像会扭曲物体的外观。当我们俯视一段长而直的铁轨时,铁轨看上去最终会相交于一点。同样当你把你的手放在你的眼前的时候,你甚至可以遮挡住整个月亮,而当你将手倾斜或向外时,你的手看起来像在图像中收缩或拓展,尽管在现实中(图24.1)并不是这样。这些效应对于识别与重建都是至关重要的。

24.1.1 无透镜成像——针孔照相机

图像传感器收集场景中物体表面反射的光线并生成一幅二维图像。在人的眼睛中,图像在视网膜上成像。视网膜包含两种类型的细胞,大概1亿左右对波长范围很广的光比较敏感的视杆细胞和大概500万的视锥细胞。视锥细胞对颜色视觉很关键。视锥细胞主要有三类,每一类对不同的波长表现敏感。在摄像机中,图像在图像平面上成像。这个平面可以是涂有卤化银的胶卷或是具有几百万感光像素的矩形网格,每个感光像素是一个CMOS(complementary metal-oxide semiconductor)或CCD(charge-coupled device)。传感器的输出即一段时间内到达传感器的光子产生的有效应之和,这意味着图像传感器给出的是到达传感器的光线强度的加权平均。

要看到聚焦的图像,我们必须保证从场景中大致相同点出发的光子要达到图像平面上的同一点。最简单的聚焦方法莫过于使用针孔照相机,它的组成包括一个盒子,其前部有一个能透光的针孔O,后部有一个图像平面(图24.2)。场景中的光子进入镜头时必须通过针孔,如果针孔足够小时则在场景中相近的光子经过针孔后在图像平面上也会相邻。

针孔照相机的几何模型很容易理解。我们将采用一个以 O 为原点的三维坐标系,并考虑场景中的一点 P,其坐标为 $ (X, Y, Z) $。P 被投影到图像平面上的点 P',坐标为 $ (x, y, z) $。设 f 是从针孔到图像平面的距离,那么根据相似三角形的性质,我们得到以下公式:

原书第 795 页

$$ \frac{-x}{f}=\frac{X}{Z},\frac{-y}{f}=\frac{Y}{Z}\quad\Rightarrow\quad x=\frac{-fX}{Z},y=\frac{-fY}{Z} $$

这些公式定义了一种成像过程,称为透视投影(Perspective projection)。值得注意的是,分母上的Z意味着物体离得越远,它的图像越小。还要注意到负号表示图像相对于实际场景是上下、左右颠倒的。

在透视投影的情况下,因为远距离的物体看上去比较小,所以你的手掌看上去能遮住整个月亮(图 24.1)。另一个重要的结论是平行线汇聚于视平线上的一点(考虑铁轨的样子,图 24.1)。在场景中经过点 $ (X_0, Y_0, Z_0) $,且方向为 $ (U, V, W) $的一条直线可以描述为点集 $ (X_0 + \lambda U, Y_0 + \lambda V, Z_0 + \lambda W) $,其中 $ \lambda $ 在 $ + \infty $ 和 $ - \infty $ 之间变化。这条直线上的一点 $ P_\lambda $ 到图像平面上的投影由下式给出

$$ \left(f\frac{X_{0}+\lambda U}{Z_{0}+\lambda W},f\frac{Y_{0}+\lambda V}{Z_{0}+\lambda W}\right) $$

当 $ \lambda \to \infty $ 或 $ \lambda \to -\infty $ 时,上式变为 $ p_\infty = (f U / W, f V / W) $,若 $ W \neq 0 $。这意味着在真实场景中的不同点将可能被映射到图像中的同一点——对于比较大的 $ \lambda $ 取值,不管 $ (X_0, Y_0, Z_0) $ 取值如何,图像上的点基本上处于同一点。我们称 $ p_\infty $ 为与方向为 $ (U, V, W) $ 的直线族相关联的消失点。方向相同的直线具有同一个消失点。

Image
图 24.1 成像扭曲了几何。平行线似乎在远处会相交,就像左边的铁轨图像。在中间,一只小手遮住了月亮的大部分。右边是透视缩短效应:手离开眼睛一定距离会使它显得比中间的那只手要短些
Image
图 24.2 针孔照相机后面的图像平面上的每个感光元接收到通过针孔传进来的小范围的光线。如果针孔足够小,结果就是在图像平面聚焦成为一幅图像。投影过程意味着大而远的物体会和小而近的物体看上去一样。注意,图像在投影时会上下颠倒
原书第 796 页
24.1.2 透镜系统

针孔照相机的缺点在于我们需要一个尺寸小的针孔来确保图像聚焦,但这个针孔越小,到达图像平面的光子就会越少,意味着图像会很暗。当我们把针孔的尺寸放大时,确实能够获得更多的光子,但同时也会造成运动模糊——场景中运动的物体在成像时会因为光子到达不同的地方而产生模糊的效应。如果我们不能使针孔打开的时间更长,则可以试试让针孔变得更大。尽管有更多的光子到达图像平面,但由于物体同一块区域散射的光子在成像时被分散到了图像平面不同的地方,从而造成了最终图像的模糊。

脊椎动物的眼睛和现代照相机都使用透镜系统。透镜要比针孔大得多,因此能够透过足够的光线。透镜将来自物体位置的光线聚焦到图像平面。然而,透镜系统拥有一个有限的景深:只能对一定距离(焦平面)左右的物体清晰成像,在这个范围以外的物体成像时将超出图像平面,人眼系统可以通过改变形状来调整焦平面(图24.3);而在照相机中,则可以通过镜头的来回移动来改变焦平面。

Image
图 24.3 透镜接收离开景物的某个方向范围的光线,将这些光线导向到图像平面上的一个点。调焦就是让靠近离焦平面的点聚焦;其他远离焦平面的点不能正确聚焦。在相机里,通过移动透镜来改变焦平面,而在人的眼睛里,是通过专门的肌肉来改变透镜的形状而实现调焦的
24.1.3 缩放正投影

透视效应并不是在所有情况下都那么显著。举例来说,因为距离的原因一只远距离美洲豹身上的一个斑点看上去很小,但是两个紧挨着的斑点看上去却可能会拥有差不多的大小。这是因为相对于相机到斑点的距离来说,相机到两个斑点的距离差异很小,根据这个现象我们可以简化投影模型。这个模型我们称之为缩放正投影(scaled orthographic projection)。模型的主要思想如下:假如物体上点的深度 $ Z $ 的变化范围为 $ Z_0 \pm \Delta Z $ 并且 $ \Delta Z < Z_0 $,则透视缩放因子 $ f/Z $ 可以用一个常量 $ s = f/Z_0 $ 近似。则场景坐标 $ (X, Y, Z) $ 投影到图像平面坐标的投影公式为 $ x = sX $ 和 $ y = sY $。缩放正投影对于那些景深变化很小的场景是一个很好的近似。例如,当对位于正前方远距离大楼进行投影时它就是一个很好的模型。

原书第 797 页
24.1.4 光线和阴影

图像中一个像素的亮度可以看作这个像素代表的场景中物体点的亮度为自变量的函数。我们假设这是一个线性模型(现代照相机在极亮或极暗时表现为非线性,但正常情况下均为线性)。图像中的亮度对于确定物体的形状和特性是一条很重要的线索,尽管有时候这条线索很模糊。人往往可以很容易的分辨出三种导致不同亮度的起因并反过来分辨出物体的特性。第一种引起亮度不同的原因是光线的整体强度。一个处于阴影(shadow)中的白色物体甚至可能暗于直接处于太阳光下的黑色物体,人眼可以很好地分辨相对亮度,从而判断出哪个为白色物体。第二种原因是场景中不同的点对光的反射有多有少。通常情况是,人感知这些点或明或暗,从而看到物体的纹理或斑纹。第三种情况是面向光的面比偏离光源方向的面更亮,这称为明暗(shading)效应。特别是,人们可说出这种明暗来自物体的几何状态,但有时候可能会将明暗与斑纹混淆。如颧骨下的灰暗化妆品看上去像阴影,从而使得人脸看上去比真实的瘦。

大部分的物体表面会通过漫反射(diffuse reflection)来反射光线。漫反射会将物体表面的光线均匀地向各个方向反射,所以你看到的物体表面的亮度与你从哪个方向看是无关的。大部分的衣服、图画、粗糙的木质表面、蔬菜、或者粗糙的石头都是漫反射的。但镜子不是漫反射的,因为你从不同的方向看会看到不同的画面。理想镜面的这种效应称为镜面反射(specular reflection)。许多平面——如刷过的金属,塑料,或湿的地板——小部分会表现出镜面反射的,我们称之为镜面。这些表面也比较容易分辨,因为一般比较小而明亮(图24.4)。对于大部分应用来说,将表面模拟为漫反射中带有镜面反射已经足够。

Image
图 24.4 各种光照效果。在金属勺和牛奶表面有镜面反射。明亮的漫反射表面是明亮的,因为它面朝光线方向。暗的漫反射表面是暗的,因为表面与光线方向平行。阴影出现在不能看见光源的表面位置。图像由 Mike Linksvayer(mlinksva on flickr)提供

室外的最主要光源是太阳。太阳光的光线属于平行光,即两道光线之间可以看作是平行的。我们将太阳光模拟为远距离点光源(distant point light source)。这是重要的光线模型,不管对于室内还是室外都比较适用。在这种光源下,物体表面受到的光照依靠与其与光源方向之间的夹角 $ \theta $。

一个漫反射表面受到远距离点光源照射时可能会反射一定百分比的它所受到的光照,

原书第 798 页

这一百分比我们称之为漫反射率(diffuse albedo)。白纸跟雪地拥有着高达0.90的反射率,而平整的黑色丝绒与木炭则只有0.05的反射率(这意味着95%的入射光线都将被材料本身所吸收)。反射光的强度I服从朗伯余弦定律(Lambert's cosine law)

$$ I=\rho I_{0}\cos\theta $$

其中 $ \rho $ 是漫反射率, $ I_{0} $ 是光源发出的光强度, $ \theta $ 是光源和反射面法线之间的夹角(图 24.5)。朗伯定律预测图像中亮的像素来逢物体面向光源方向的面,而暗像素来自物体偏离光源方向的面,因此面的明暗提供了物体的一些形状信息。我们将在 24.4.5 节中讨论这一问题。如果光线不能到达物体的表面,则此物体将处于阴影之中。阴影也很少是完全黑色的,因为阴影部分也会接收到来自光源之外物体反射的光。在室外最主要的来源是天空,因为天空一般比较明亮。而在室内时,表面反射的光线也会照亮阴影部分。这种互反射(interreflection)同样对物体表面的亮度有重要的影响。在建模中我们可能会通过添加环境光源(ambient illumination)来表示这种影响。

Image
图 24.5 两个面片被远距离点光源照射,点光源的光线用灰色箭头直线表示。面片 A 倾斜一个角度 $ \theta $(接近 90 度),从而接收更少的能量,因为它单位面积接收到的光线更少了。面片 B 朝向光源 ( $ \theta $ 接近为 0 度),从而接收更多的能量
24.1.5 色彩

植物通过给动物提供果实让动物帮助其传播种子。经过千万年的进化,当植物的果实成熟时,其颜色一般会变红或者变黄,而动物也已经退化,可以检测这些变化。眼睛接收到的不同波长的光有不同的能量。人眼接收到的光集中在波长为380~750nm这个区域,主要通过三种颜色接收细胞来区分不同的颜色,如420nm的蓝色,540nm的绿色及570nm的红色。尽管人眼只能接收能量光谱中很小区域中的光,但对于判断果实是否成熟这也已经足够。

三原色原则(principle of trichromacy)说明无论一种颜色多么复杂,我们都可以通过三种颜色的混合来构成一种与原颜色不能分辨的新颜色。这一原理说明我们的电视及计算机显示器可以仅仅关心三种基本的颜色。而我们的计算机视觉算法也可以变得更加容易,如物体表面的反射率可以化为 R/G/B 的三个反射率,同样,任意光源也可以看成是有 R/G/B 三种光源所组成。同理朗伯余弦定律也可以推广到 R/G/B 模型上来。事实上这一模型同样预测了在不同的光源下同一物体会产生不同的图像。但人们往往会忽视不同光源的影响而能够估计一个物体在白光下的颜色,这种现象我们称之为色感一致性(color constancy)。当前人们已经研究出了精确的色感一致性算法,最简单的示例就是相机中的白平衡功能。相对人眼来说,如果我们要为螳螂虾建立一个照相系统的话,我们至少需要 12 种不同的原

原书第 799 页

色,因为甲壳纲的昆虫往往具有12种不同颜色的接收细胞。

24.2 图像预处理

我们已经了解到,光线是如何被场景中的物体反射并形成由比如说500万个3字节像素组成的图像。使用任何传感器,图像中都会有噪声,此外在任何情况下都需要处理大量的数据。那么我们如何处理这些数据呢?

在本节中,我们将了解三种有用的图像处理:边缘检测、纹理分析、光流计算。这些都是所谓的“图像预处理”或“低级图像处理”,因为它们是运算流水线中最先被执行的。初级视觉运算的特征是具有局部特性(它们可以在图像的某个部分上实行,而不必考虑在若干个像素以外的情况)且不需要知识:我们能够对图像进行这些操作,而无需知道图像中到底含有什么物体。这使得低级运算是十分适合于在并行处理的硬件中实现的候选,无论是在图像处理单元GPU中还是在肉眼中。接下来我们将考察一种中级的运算,即图像区域分割。

24.2.1 边缘检测

边缘是图像中的直线或曲线段,穿过边缘的图像亮度有“显著的”变化。边缘检测的目标是根据大量的、成兆字节的图像数据进行抽象,形成更紧凑、更抽象的表示方式,如图24.6中所示。这样做的动机在于,图像中的边缘轮廓与重要的场景轮廓相对应。在图中我们显示了深度不连续的三个例子,标为1;表面方向不连续的两个例子,标为2;反射不连续的一个例子,标为3;亮度不连续(阴影)的一个例子,标为4。边缘检测只关心图像,因此不区分场景中这些不同种类的不连续,不过后面的处理将进行区分。

Image
图 24.6 不同类型的边缘

(1)深度不连续:(2)面的方向不连续:(3)反射不连续:(4)光照不连续(阴影)

图 24.7(a)显示了场景中包含一个放在书桌上的订书器的一幅图像,而(b)显示了一个边缘检测算法在该图像上的输出。可以看到,这个输出与理想的线条图之间是有差异的。有些地方没有找到边缘,从而出现了缝隙,同时还产生了一些“噪声”边缘,在场景中找不到它们明显的对应物。在后面的阶段中将不得不纠正这些错误。

原书第 800 页
Image
(a)
Image
(b)
图 24.7
(a)一个订书器的照片。(b)根据(a)计算得到的边缘

我们如何在一幅图像中进行边缘检测?考虑沿着垂直于一条边缘的一维截面的图像亮度曲线图——例如,桌面的左边缘和墙之间的那条边缘线。这种曲线看起来如图24.8(a)所示。

因为边缘对应着图像中亮度值发生剧烈变化的位置,一种朴素的想法就是对图像进行微分运算,然后寻找导数 $ I'(x) $量级较大的位置。当然,这样做只是近似可行。在图24.8(b)中,我们看到尽管在x=50处有一个峰值,但是在其他位置(例如在x=75处)也出现了几个伪峰值,它们有可能被误判为真正的边缘。导致这种情况出现的原因是图像中有噪声。如果我们先对图像进行平滑,可以消除这些伪峰值,如我们在图24.8(c)中所见。

Image
Image
Image

图 24.8 上图:阶跃型边缘的一维截面方向上的亮度曲线 $ I(x) $,边缘在 x=50 处。中图:亮度 $ I(x) $ 的导数 $ I'(x) $。该函数的较大取值对应于边缘,不过该函数有噪声。下图:亮度 $ I(x) $ 平滑后的导数, $ (I^* G_\sigma)' $,可以由卷积 $ I^* G_\sigma' $ 一步算出。位置 x=75 上的噪声候选边缘消失了

一种图像平滑的办法是赋予每个像素点的值为其相邻像素点的平均值。这样可以倾向于消除较为极端的值。但是我们应该考虑多少个相邻像素点——是一个,两个,还是更多?一个答案能够有效地消除高斯噪声,那就是利用高斯滤波器进行加权平均。回顾一个均值

原书第 801 页

为0标准差为 $ \sigma $的高斯函数为

$$ N_{\sigma}(x)=\frac{1}{\sqrt{2\pi}\sigma}\mathrm{e}^{-x^{2}/2\sigma^{2}}\quad 一维情况下,或者 $$

$$ N_{\sigma}(x,y)=\frac{1}{2\pi\sigma^{2}}\mathrm{e}^{-(x^{2}+y^{2})/2\sigma^{2}}\quad 二维情况下 $$

应用高斯滤波器意味着用所有点 $ (x,y) $上的 $ I(x,y) $ $ N_{\sigma}(d) $之和替换亮度 $ I(x_{0},y_{0}) $,其中 $ d $是从 $ (x_{0},y_{0}) $到 $ (x,y) $的距离。这种加权和如此常用,以至于有专门的名称和符号。我们称函数 $ h $是两个函数 $ f $和 $ g $的卷积(记作 $ h=f^{*} $ $ g $),如果有

$$ h(x)=(f^{*}g)(x)=\sum_{u=-\infty}^{+\infty}f(u)g(x-u)\quad 一维情况下,或者 $$

$$ h(x,y)=(f^{*}g)(x,y)=\sum_{u=-\infty}^{+\infty}\sum_{v=-\infty}^{+\infty}f(u,v)g(x-u,y-v)\qquad 二维情况下 $$

所以平滑函数通过图像和高斯函数的卷积 $ I^* N_\sigma $ 得到的。当 $ \sigma $ 取值为 1 个像素时,对于少量噪声的平滑处理已经足够了,而取值为 2 个像素时能够对更大量的噪声进行平滑,但是会损失某些细节。因为高斯函数的作用随着距离的增加而减弱,在实际应用中我们可以将求和中的 $ \pm\infty $ 替换为 $ \pm3\sigma $。

这里我们有机会进行一个优化:我们可以将平滑和搜索边缘合并成单一的运算。有如下定理:对任意函数 $ f $ 和 $ g $,它们卷积的导数 $ (f \times g)' $ 等于其中一个函数与另一个函数的导数的卷积,即 $ f \times (g)' $。所以与其对图像先平滑后求导,我们不如直接将图像与高斯平滑函数 $ N'_\alpha $ 进行卷积,然后再根据阈值直接标示出边缘。

有一种可以将这种算法从一维横截面推广到二维图像的一般化方法。因为边缘可能具有任意的角度 $ \theta $。我们将图像的亮度看作x和y的二维标量,则其梯度可以看作一个向量,其表示为:

$$ \nabla I=\left(\frac{\partial I}{\partial x}\atop\frac{\partial I}{\partial y}\right)=\left(I_{x}\atop I_{y}\right) $$

边缘对应于图像中亮度剧烈变化的地方,在边缘点处梯度的模 $ \|\nabla I\| $较大。我们比较感兴趣的是梯度的方向:

$$ \frac{\nabla I}{\left\|\nabla I\right\|}=\left(\begin{matrix}\cos\theta\\ \sin\theta\end{matrix}\right) $$

这个公式给出了每一点的边缘方向的定义: $ \theta=\theta(x,y) $。

与一维的情况相同,我们通常不直接计算梯度 $ \nabla I $,而是计算经过高斯卷积平滑化后的 $ \nabla(I \cdot N_c) $。同样,这与计算图像与高斯的偏导数的卷积是等价的。得到梯度以后,我们就可以通过梯度来检测边缘了。对于一个单独的点来说,为了判定其是否为边缘点,我们还要考虑其梯度方向上的相邻的前方与后方的点。如果这些点中有一点的梯度更大,那么我们可以通过将边缘曲线稍微平移来或得一条更好的边缘曲线。同样,如果有一点的梯度值太小,则我们可以判定这一点不是边缘点。所以对于边缘点来说,它一定是其梯度方向上梯度高于某个阈值的局部最大值。

原书第 802 页

一旦通过这种算法标出边缘像素,下一步就是将属于同一边缘曲线的像素链接起来。通过假设具有一致方向的相邻边缘像素一定属于相同边缘曲线,就可完成这个任务。

24.2.2 纹理

纹理,在日常用语中,是对表面的视觉感觉(“纹理(texture)”一词与“纺织物(textile)”具有相同的词根)。在计算视觉中,它指的是在表面空间上重复出现的、能够通过视觉感觉到的模式。纹理的实例包括建筑物上窗户的模式、汗衫上的针脚、美洲豹皮肤上的花斑、草地上一片一片的草、海滩上的卵石以及体育场中的人群。有时纹理排列具有明显的周期特性,就像汗衫上的针脚;而在其他的例子中,比如海滩上的卵石,这种规律性只有统计上的意义:在海滩上不同地方的卵石分布密度是近似相同的。

亮度只是针对单一像素的一种属性,纹理指的是像素组成的图像块表现出的特性。对于给定的图像块,我们可计算出其每一个像素点的方向,然后给出统计的方向直方图。对于一面砖墙,其直方图一般只有两个尖峰(对应于水平方向与垂直方向),而对于美洲豹来说,它的直方图是一个更均匀的分布。

图 24.9 表明对于不同的光照来说,物体表面的纹理分布一般是不变的。这也使得纹理成为识别物体的一项重要依据,毕竟对于特征,如边缘,当光照不同时其变化比较大。

Image
(a)
Image
(b)
图 24.9 同一张米纸在不同光照强度下的两幅图像。在每幅图像上画出了梯度向量场(每隔8个像素)。注意,当光线变暗时,所有梯度向量都变短了。向量没有旋转,所以梯度方向也没有改变

在具有纹理对象的图像中,边缘检测效果往往没有对平滑对象进行边缘检测的效果好,这是因为纹理元素之间的一些重要边缘信息可能会丢失。如我们在纹理检测后可能只能发现斑纹而找不到原来的老虎。一种解决办法是像寻找亮度差异一样寻找纹理特性的差异。老虎的图像区域与草地的图像区域在方向直方图上差别很大,这就使得我们可以找出它们之间的边界曲线。

24.2.3 光流

下面我们来考虑当我们不仅仅只有一幅图片,而是拥有一个视频序列时的情况。当图

原书第 803 页

像中的物体在运动或是我们的镜头在相对物体运动时,由此引起的图像中的明显的运动我们称之为光流。光流描述了图像的运动方向和速度——当然一幅图像中的车辆的速度不是用每小时多少公里而是用每秒钟多少像素来描述。光流同时也包含了场景中各物体的信息。举例来说,对于从一辆移动的火车上拍下的视频中,不同距离的物体有着不同的速度,根据速度的不同我们可以推断出物体距离我们的距离。光流法也可以用于动作识别,如图24.10(a)和(b)显示的是一个视频中网球运动员的相邻两帧图像,从(c)中我们计算出的光流向量来看,球拍和运动员的前脚正在快速移动。

Image
图 24.10 视频序列里的两帧图像。右边是对应于从一帧到另一帧像素位移的光流场。注意箭头方向是如何捕捉球泊和前腿的运动的

对于任意一点 $ (x, y) $ 来说,其光流向量可以用 x 方向的分量 $ v_x(x, y) $ 和 y 方向的分量 $ v_y(x, y) $ 来表示。为了计算光流我们需要在相邻的图像帧中找到相对应的点。由于相邻区域的点一般具有相同的亮度变化,所以我们可以有一个简单的方法。考虑 $ t_0 $ 时刻以像素 $ p(x_0, y_0) $ 为中心的区域。在 $ t_0 + D_t $ 时刻我们将这一区域与以像素 $ (x_0 + D_x, y_0 + D_y) $ 为中心的区域进行比较。一种可能的比较方法是差分平方和(SSD):

$$ \mathrm{SSD}\left(D_{x},D_{y}\right)=\sum_{(x,y)}\left(I(x,y,t)-I\left(x+D_{x},y+D_{y},t+D_{t}\right)\right)^{2} $$

其中 $ (x,y) $在以 $ (x_{0},y_{0}) $为中心的区域中进行取值。找到使得SSD最小的 $ (D_{x},D_{y}) $。则 $ (x_{0},y_{0}) $点的光流为 $ (v_{x},v_{y})=(D_{x}/D_{t},D_{y}/D_{t}) $。注意到对于这种方法来说,往往还要考虑到场景的纹理和变化。假如背景是一面白色的墙,则SSD在各处的值都会基本上一样,并且算法也会退化成盲目搜索。最好的光流法算法是结合场景中的条件进行相应的约束再来求解。

24.2.4 图像分割

分割(segmentation)是指基于像素点的相似性将图像分解成若干区域的过程。其基本思想如下:每个图像像素都可以关联某些视觉特性,诸如亮度、色彩和纹理。在一个物体中,或者是它的单独一部分中,这些属性的变化相对非常小,而穿过物体之间的边界时,典型情况下这些属性中的一个或多个会出现较大的变化。有两种方法可用于图像分割,一种主要致力于检测这些区域的边界,而另一种则致力于检测出区域本身(图24.11)。

一条边界曲线穿过一个像素 $ (x,y) $时会有一个方向 $ \theta $,所以我们可以将检测边界曲线的问题形式化为机器学习分类问题。根据相邻点的特征,我们可以计算出在像素 $ (x,y) $方向 $ \theta $

原书第 804 页
Image
(a)
Image
(b)
Image
(c)
Image
图 24.11
(d)
(a)原始图像。(b)边缘轮廓,其中 $ P_{h} $值越大,轮廓颜色就越深。(c)区域分割,对应于精细的图像分割。每个区域显示为这个区域的平均灰度。(d)区域分割,对应于粗糙一些的图像分割,从而得到更少的区域

有边界线穿过的一个概率 $ P_b(x,y,\theta) $。沿着 $ \theta $ 方向将以 $ (x,y) $ 为中心的圆形区域分为两个半圆,则半圆之间在亮度、颜色以及纹理方面都应该具有明显的不同。Martin,Fowlkes 以及 Malik(2004)用这两个半圆之间的亮度、颜色、纹理的差分直方图训练了一个分类器。在其中他们使用了已经手工标示出边界的图片训练分类器以使得最终这个分类器既能分辨人工标记的边界。

这种边界检测方法比前面介绍的简单的边缘检测效果要好很多,但是仍然有两个不足之处。(1)根据 $ P_{b}(x,y,\theta) $ 的阈值选出的边界点不足以保证形成相连的边界,所以这种方法不能保证将图像分割成区域。(2)是决策利用的仅仅是局部的特征而不是全局一致的约束。

另一种可供选择的方法是一种利用像素的亮度、颜色及纹理将像素“聚类”成区域的方法。Shi 和 Malik(2000)把它描述为图分割问题。图的每个结点对应于像素,而每条边对应于像素之间的连接。连接一对像素 i 和 j 的边上的权值 $ W_{ij} $ 是基于这两个像素在亮度、色彩、纹理等方面的相似度的。然后他们寻找适当的分割,使得一个规范化分割指标达到最小。简而言之,图分割的指标就是使跨组连接的权值总和最小,而组内连接的权值总和最大。

只基于诸如亮度和色彩之类的低级、局部属性的分割方法,往往会导致错误。为了可靠地找到物体的边界,还应该结合使用在场景中可能遇到的物体的高级知识。表示这种知识仍是研究中的热点课题。一种流行的策略是通过分割将图像分为称之为超像素的上百个相似区域,然后再利用基于知识的算法来处理。一般来说,处理几百个超像素要比处理上百万的普通像素来得简单。物体的高级知识是下一节的主题。

24.3 基于外观的物体识别

外观指的是一个物体看上去的情况。一些物体类——比如说棒球——在外观上变化很小:在大部分的情形下这类物体看起来基本一样。基于此,我们可以计算一些描述包含这些物体的图像的特征,然后据此训练出分类器。

其他类别的物体——如房子,或者芭蕾舞演员——变化一般很大。如一所房子可能具有不同的大小,颜色或者形状,甚至在不同的角度来看它也可能是不同的。而芭蕾舞演员

原书第 805 页

在做出不同的动作或者舞台灯光变化时看上去也不尽相同。一个有用的理念是物体一般由一些局部部分组成,而物体的变化主要是这些局部部分相互之间的移动。我们可以通过检测局部的特征,来通过各个部分是否存在来检测整体,而不必关系各个部分的位置。

用一个比较好的分类器来对各类物体进行训练比较重要,特别是对于看着照相机的人脸来说,效果特别好,这是因为在低分辨率以及合适的关照情况下,几乎所有的人脸看上去都差不多。几乎所有的人脸都是圆的,凹陷的不那么明亮的眼眶,缝状的嘴巴和眼睛的亮度比较低。光照的变化会产生一些影响,但都在可接受的范围之内,所以检测图像中是否存在人脸比较简单,当前在某些甚至很便宜的数码相机中你都可以看见这个功能。

现在为止,我们只考虑了鼻子竖直的人脸。下面我们来考虑图像翻转的情况。我们选取一个特定大小的圆形扫描图像,先计算圆形区域中像素点的特征值,然后将其交给分类器进行分类。这种策略我们称之为滑动窗口。这里选取的特征必须是在有阴影或光照变化的情况下稳定的特征。一种策略是选取与梯度无关的特征。另一种是在检测前先进行光照补偿。为了检测出图像中不同大小的人脸,我们可能需要将图像放大和缩小然后重新扫描,最后再得出所有检测到的不同大小不同位置的人脸。

我们还必须进行后期处理,因为我们不能保证我们选中的窗口大小正好是人脸的大小(即使使用了多种窗口大小)。而且我们还可能会得到重叠的窗口,每个窗口有匹配的人脸。但是如果我们拥有一个可以判定结果好坏的分类器(不管是逻辑回归的还是基于向量机的),我们就可以综合这些部分重叠的匹配而得到一个高质量的匹配结果。至此,我们就得到了可以检测出人脸位置和大小的检测器。我们用两个步骤来检测旋转的人脸。首先,使用一个回归过程估算出窗口中人脸最可能的方向。然后对每个窗口,根据估算出的方向旋转图像,然后再用我们的分类器进行检测。这些流程如图24.12所示。

Image
图 24.12 有各种各样的人脸检测系统,但多数都采用图示的两个部分的结构。上边,从图像到响应(Responses),然后应用非最大抑制(Non-maximum suppression)以找到最强的局部响应。响应是通过下边显式的过程获得的。我们用固定大小的窗口在图像的不同缩放尺度的版本上扫描,从而找到更大或更小的人脸。窗口里的光照会被纠正,然后一个回归引擎(经常用神经网络)预测人脸的方向。将窗口矫正到这个方向,再输入到一个分类器。对分类器的输出进行后处理,以确保在图像的每个位置只有一个人脸

训练的数据比较容易获得。现在有许多的人脸数据集,要得到翻转的图像,只要对数据集中的图像做旋转操作即可。一种广泛使用的方法是直接将训练集中正常图像的方向改

原书第 806 页

变,移动下图像的中心,轻微的修改图像,将之作为新的训练样本加入训练集中。这种方法特别容易获得符合实际的大的训练样本。使用这种方法改进训练集后检测的性能得到了明显的改善。现在这种算法已经在人脸前景检测中有了很好的应用(侧面的检测更难一些)。

24.3.1 复杂的外观及图案元素

很多种类的物体拥有比人脸更复杂的模式。这是因为有很多因素会影响到物体的特征。这些因素包括(图24.13):

Image

Foreshortening

Image

Aspect

Image

Occlusion

Image

Deformation

图 24.13 外观变化的原因。首先,物体可能会透视缩小(foreshortening),就像左上角的圆圈面片。这个面是斜着去看的,所以在图像上就成了椭圆。其次,从不同方向去观察物体,其形状会有明显不同,这称为视点现象。在右上方的油炸圈饼就有从3个方向观察得到的不同图像。左下方的杯子因为旋转而使其手柄被遮住了,从而手柄在图像中消失了。这种情况下,由于杯身和手柄都属于同一杯子,所以这是自我遮挡。最后,在右下方,有些物体可以显著地发生形变

透视缩短:倾斜地来看物体时,其表面的图案会被扭曲成另一种样式。

朝向:从不同的方向看物体会得到不同的结果,即使是一个简单的圆环图也有着不同的几个方面:从一侧看,它是一个椭圆,而从正面看时则是一个圆环。

遮挡:一个物体从不同的方向看时某些部分可能被隐藏起来。一个物体可能遮挡住另一个物体;或者物体的一个部分遮挡住另一个部分,这种情况我们也称之为自遮挡。

形变:某些物体的内部自由度可改变物体的外观。如一个人移动手臂和腿部时,身体的外形可以有很多的变化。

然而尽管有这么多的变化,我们仍然能够检测物体的位置和大小。这是因为无论如何变化,物体总会在图像中表现出某些固定的结构。比如,在一幅车辆的图片中,可能包含车灯、车门、车轮、车窗以及车顶,尽管在不同的图片中它们的位置排列方式不同,但它们仍然存在。由此我们可以将目标建模成由图案元素——部件组成的集合。这些图案元素可能会产生相对移动,但只要大部分保持在正确的位置,则我们就可以判断出目标物体是存在的。由此我们可以设计一个由检测图案元素特征来判定是否存在或者是否在正确位置来检测目标物体的识别器。

一种直接的方法是用出现的图案元素的直方图来表示图像窗口,但这种方法的效果并不是很好,有许多图案元素容易互相混淆。比如说,如果选择颜色作为图案元素的特征,那么英国、法国和荷兰的国旗容易被混淆,因为它们拥有着同样的颜色直方图,尽管它们

原书第 807 页

的颜色排列是以完全不同的方式。过于简单的直方图方式忽视了一些有用的特征。我们可以在表示中添加一些的空间信息。如车灯一般是位于车子的头部,而车轮一般是位于车子的底部。基于直方图的检测已经在许多识别应用中取得了很好的效果,下面我们来看一下行人的检测。

24.3.2 基于 HOG 特征的行人检测

世界银行估计,每年有120万人死于车祸,其中有三分之二是行人。这意味着行人检测是一个重要的应用问题,因为如果车辆能够自动检测并且避开行人的话,死于车祸的人数将会大大减少。尽管行人可能有不同的着装与外观,但在相对低一些的分辨率上仍然有着一般化的特征。最常见的侧面或者正面行走照。在这种情况下,我们看到的是一个“棒棒糖”的形状——行走时双脚并拢的情况,躯干比双脚要宽——或者是剪刀的形状——行走时双脚分开。我们需要的是四肢的依据,并且我们发现头部和肩部的曲线都是易于观察到的与众不同的特征。所以经过精心的特征构建,我们能够建立一个有用的移动窗口行人检测器。

在行人与背景之间并非总是有特别大的差别,所以我们一般用梯度而不是边缘信息来表示图像窗口。行人的四肢往往会有相对移动,所以我们使用直方图来抑制特征中的空间细节,如图24.14所示。将窗口分成一些可以重叠的小单元格,然后对每个单元格计算它们的方向直方图。我们将会得到一些特征,根据这些特征我们可以判断头肩曲线在图像的顶端或者是底端。而且这些特征在头部运动缓慢的时候不会改变。

Image
Image
Image
Image
图 24.14 局部方向直方图是一种强大的特征,即使对于识别复杂的对象。左边是一幅行人图像。中间左边是图像块的局部方向直方图。我们应用分类器(例如 SVM)来确定每个直方图的权值,以从非行人中分离出正样例的行人。我们发现正权值的成分看上去就像人的外形轮廓。负权值的成分就没那么清楚,它们代表非行人的所有模式

为了得到好的特征,还需要进一步的技巧。因为方向特征不受光照改变的影响,所以我们不能专门处理对比很强的边缘。这意味着对行人边缘的独特曲线的处理就像对衣服和背景中纹理细节的处理一样,这些独特信号可能淹没在噪音中。我们可以通过使用权值对梯度方向进行计数来恢复对比信息,权值反应该梯度与同一单元格中的其他梯度相比的显著程度。我们将图像中 x 点的梯度的模记为 $ \|\nabla I_x\| $,假如记 C 为我们想要计算直方图的单元格,并且记 $ \omega_{x,C} $ 为这个单元格中 x 点的权值,则:

原书第 808 页

$$ \omega_{_{x,C}}=\frac{\left\|\nabla I_{x}\right\|}{\sum_{u\in C}\left\|\nabla I_{u}\right\|} $$

这个公式将梯度的模与单元格中其他梯度进行比较,因此梯度大的权值也大。这样得到的特征我们通常称之为HOG特征(Histogram Of Gradient orientation的缩写)。

这一特征是行人检测与人脸检测主要的不同之处。除此之外,两者的检测过程基本上是一致的。检测器用一个窗口在图像里扫描,计算窗口的特征,然后将其交给分类器进行分类。对输出结果还要应用非最大抑制(Non-maximum suppression)进行处理。对于大多数情况来说,行人的尺度和方向都是已知的。比如对于安装在车辆上的照相机来说,我们关心的只是近处的直立的行人。已经有几个已知的数据集,可以用来做训练数据。

行人并不是唯一可以检测的对象,在图24.15中我们看到相同的技术可以用于检测不同情况下的各类物体。

Image
图 24.15 对象识别的另一个例子,这个实例使用 SIFT 特征(Scale Invariant Feature Transform),即 HOG 特征的早期版本。左边是作为对象模型的鞋子和电话图像。中间是测试图像。右边是鞋子和电话的检测结果:在图像中寻找其 SIFT 特征描述与模型匹配的点

24.4 重建三维世界

在本节中我们将说明如何从二维图像出发得到场景的三维表示。最基本的问题是:假定在透视投影的过程中,过针孔的一条光线上的所有点都被从三维世界投影到图像上的同一点,我们如何恢复三维信息,有两种方法来解决这个问题:

如果我们拥有从不同角度拍摄的两幅图片,则我们可以根据三角测量找到场景中任一点应处的位置。

我们可以为图像根据现实场景添加背景知识。给定物体模型 P(Scene) 和着色模型 P(Image | Scene),由此我们可以计算出后验分布 P(Scene|Image)。

现在还没有统一的场景重建理论。我们考虑八种常见的视觉线索:动作、双眼立体视觉、多视图、纹理、阴影、轮廓和熟悉的对象。

24.4.1 运动视差

当摄像机相对于三维场景运动时,所造成图像中的显著运动,光流,包含许多关于场景结构的有用信息。为了理解这一问题,我们建立一个方程(未加证明)来描述光流与观

原书第 809 页

察者移动速度 T 及景深之间的关系。

光流场的两个分量为

$$ v_{x}(x,y)=\frac{-T_{x}+xT_{z}}{Z(x,y)},\quad v_{y}(x,y)=\frac{-T_{y}+yT_{z}}{Z(x,y)} $$

其中 $ Z(x,y) $ 是对应于图像中 $ (x,y) $ 点的真实场景中点在 z 轴上的坐标。

光流的两个分量 $ v_x(x,y) $ 和 $ v_y(x,y) $,在点 $ x = T_x / T_z $ 以及 $ y = T_y / T_z $ 处都等于零。这一点被称为光流场的扩展焦点(focus of expansion)。假设我们改变 x-y 平面的原点位置,使它处于扩展焦点上,光流表达式将变成一种很简单的形式。令 $ (x', y') $ 为新坐标,定义为 $ x' = x - T_x / T_z $, $ y' = y - T_y / T_z $。那么

$$ v_{x}(x^{\prime},y^{\prime})=\frac{x^{\prime}T_{z}}{Z(x^{\prime},y^{\prime})},\quad v_{y}(x^{\prime},y^{\prime})=\frac{y^{\prime}T_{z}}{Z(x^{\prime},y^{\prime})} $$

这里有一个比例上的问题。假设摄像机以两倍的速度运动,而场景中的物体变为原来的两倍并且距离摄像机原来的两倍远,那么光流仍然是一样的。尽管如此我们还是能从其中得到一些有用的信息。

(1)假设有一只苍蝇正设法落在墙上,那么它想要知道在当前速度下经过多长时间能够接触到墙。这个时间由 Z/T_{z} 给出。注意,虽然瞬时的光流场既不能提供距离 Z,也不能提供速度分量 T_{z},但是它能够提供二者的比值,因此可用来控制降落的过程。事实上许多动物实验表明它们的确利用了这种方法。

(2)分别考虑位于不同景深 $ Z_{1} $、 $ Z_{2} $ 的两点。我们可能并不知道两者的具体值,但是通过考虑对光流比取倒,我们可以计算出深度比 $ Z_{1}/Z_{2} $。由此我们可以得到运动视差,即我们从车辆或者火车上看远处物体移动慢而近处物体移动快的原理。

24.4.2 双目立体视觉

大多数脊椎动物具有两只眼睛。在失去一只眼睛的情况下,这种冗余是有好处,不过除此之外还有一些其他方面的好处。多数被捕食动物的眼睛长在头的两侧,使它们具有更宽阔的视野。而捕食动物的眼睛则长在前面,使它们能够利用双目立体视觉(binocular stereopsis)。这里的思想与运动视差非常相似,唯一不同的是我们不再利用处于不同时刻的图像,而是利用了两幅(或更多)不同空间视角下的图像。因为场景中的一个给定特征相对于每个图像平面的z轴的位置是不同的,所以当我们把两幅图像重叠在一起时,两幅图像中的图像特征位置将会出现视差(disparity)。你可以在图24.16中看到这一点,金字塔状物体离我们最近的那一点在右边图像中移到了左边,而在左边图像中移到了右边。

注意,为了度量视差,我们需要解决关联问题(correspondence problem),即如何确定在左右图像中的两点是否来自场景中的同一点。这与我们测量光流时类似,最简单的方法当然是类似的比较对应点附件像素区域的差的平方和。但事实上我们使用的是更复杂的方法,利用了额外的约束。

假设我们已经能够度量视差,那么我们如何得到景深的信息呢?让我们先来求视差与深度之间的几何关系。首先,我们考虑双目(或两个照相机)直视前方,即两光轴彼此平行的情况。此时右侧照相机与左侧照相机之间的关系相当于沿 x 轴平移了一段距离 b,称

原书第 810 页
Image
图 24.16 平移一个与图像平面平行的相机使图像特征在相机平面里移动。这导致的位置视差是深度的一种线索。如果将左右两幅图像重叠,我们就会看到这种视差

为基线。如果我们将这视为是时间 $ \delta t $ 里平移向量 T 的结果, $ T_x = b / \delta t $ 且 $ T_y = T_z = 0 $,我们就可以用前一节中的光流方程。水平和竖直视差由光流分量乘以时间步 $ \delta t $ 给出, $ H = v_x \delta t $, $ V = v_y \delta t $。经过代入,得到 $ H = b / Z $, $ V = 0 $。换句话说,即水平视差等于基线与深度之比,而竖直视差等于零。如果我们已知 b,则我们可以度量 H 而恢复 Z。

人们通常看东西时会集中视线。也就是说,两眼的光轴交汇于场景中的某一点。图24.17显示了两只眼睛注视着点 $ P_{0} $的情况,它到两眼连线中点距离为Z。为方便起见,我们计算角度视差,其单位是弧度。在注视点 $ P_{0} $的视差为零。对于在距离再远 $ \delta Z $处的另外某点P,我们能够计算出P在左右两幅图像上的角度偏移,分别称为 $ P_{L} $和 $ P_{R} $。如果左右两边各相对 $ P_{0} $偏移了一个角度 $ \delta\theta/2 $,那么 $ P_{L} $和 $ P_{R} $之间的偏差,也就是P的视差,恰好等于 $ \delta\theta $。由图24.17, $ \tan\theta=\frac{b/2}{Z} $且 $ \tan(\theta-\delta\theta/2)=\frac{b/2}{Z+\delta Z} $,但对于小的角度, $ \tan\theta\approx\theta $,因此

$$ \delta\theta/2=\frac{b/2}{Z}-\frac{b/2}{Z+\delta Z}\approx\frac{b\delta Z}{2Z^{2}} $$

而且,由于实际视差是 $ \delta\theta $,我们得到

$$ \mathrm{disparity}=\frac{b\delta Z}{Z^{2}} $$

Image
图 24.17 立体影像中视差与深度的关系。两个眼睛的投影中心距离为 b,视线相交在固定点 $ P_{0} $。场景中的 P 分别投影到两个眼睛的 $ P_{L} $ 和 $ P_{R} $。换成角度来看,视差是 $ \delta\theta $

对于人类,b(基线长度)约等于6厘米。设Z大约是100厘米。那么最小可分辨的 $ \delta\theta $

原书第 811 页

(对应于像素尺寸)弧度值在5秒左右,由此给出$\delta Z$的值约为0.4毫米。若$Z=30$厘米,我们得到非常小的值$\delta Z=0.036$毫米。也就是说,在距离为30厘米时,人眼能够分辨小到0.036毫米的深度变化,使得我们能够做穿针引线这样的事。

24.4.3 多视图

双眼视觉与光流法得到的形状可以看作是利用多视图恢复深度信息更一般框架的两个实例。在计算机视觉中,我们不必局限于差动动作或者仅仅使用两个摄像机。所以人们研究了从多个视图甚至成百上千的摄像机中恢复信息的技术。从算法上来说,有以下三个子问题需要解决:

关联问题,即在不同图像中找出三维世界中的相同特征点在这些图像中的投影。

相对方向的问题,即确定不同摄像机的坐标系之间的变换(旋转和平移)。

景深估计的问题,即对于至少在两个视图中都存在图像平面投影的点如何确定其深度。

关联问题的鲁棒匹配过程的发展,并且对相对方向问题及景深问题的数值稳定的算法是计算机视觉上的一个极大的成功。由 Tomasi 和 Kanade(1992)提出的这样一种的结果如图 24.18 和图 24.19 所示。

Image
Image
图 24.18
(a)视频序列中4帧图像,其中相机相对目标进行移动和旋转。

(b)序列中的第一帧,标注有一些小框框,表示特征检测器检测到的特征

Image
(a)
Image
(b)
图 24.19 在图 24.18 中的图像特征位置的三维重建
(b)从同一位置拍摄的实际的房子
原书第 812 页
24.4.4 纹理

前面我们已经知道如何将纹理应用分割对象。纹理还可以用于估计距离。在图24.20中,我们看到场景中的相同纹理却导致了图像上的不同的纹理元素,或称纹理基元(texels)。(a)中的所有铺路砖在场景里是一致的。它们在图像中却是不同的,这有两个原因:

(1)纹理基元到照相机的距离不同。远处物体看上去要小一些,比例因子为1/Z。

(2)纹理基元的透视缩短(foreshortening)程度不同。如果所有纹理基元都在地平面上,这与每个纹理基元相对于照相机视线的方向有关。如果基元垂直于视线,则不存在透视缩短现象。透视缩短效应的量级正比于 $ \cos\sigma $,其中 $ \sigma $ 为纹理基元平面的倾角(slant),即 Z 轴与纹理基元平面法向 n 的夹角。

Image
(a)
Image
(b)
图 24.20
(a)一个纹理场景。假设真实纹理的一致性允许找到表面的方向。计算出的表面方向用叠加的黑圆圈和指针表示,并且经过了变换,仿佛圆圈是画在表面上的那一点处。(b)根据一个弯曲表面上的纹理恢复形状(白色圆圈和指针)

研究人员已经提出了利用投影纹理基元的外观变化为基础来确定表面法向的各种算法。然而这些算法的准确性与可应用性却还没有多视图的方法那样好。

24.4.5 明暗

明暗——从场景中的物体表面上不同部分接收到的光强度的变化——是由场景的几何特性和表面的反射特性决定的。在计算机图形学中,目标是根据场景的几何特性和场景中物体的反射特性计算图像亮度 $ I(x,y) $。而计算机视觉的目标则是相反的过程——也就是说,根据图像亮度 $ I(x,y) $重新获得几何特性和反射特性。这已被证明是非常困难的,除非是在一些最简单的情况下。

在24.1.4节中的物理模型中,我们知道当一个面的法向方向朝向光源时,这个面会更亮,当法向方向背向光源时,这个面会变暗。但我们不能直接简单地认为暗的面就是背光的;这可能是因为这个面具有低反射率。一般来说图像中的反射率差别比较大,而明暗变化则没有那么明显。人类可以很容易的分辨出到底是光线、物体背向还是反射率低使得其物体表现为阴暗。尽管为了简化这一问题,我们可以假设每一面片的反射率都是已知的。这仍然难以恢复法向方向,因为图像亮度是一个量度,但法向方向有两个未知参数,因此我们无法简单地对法向求解。这一问题的关键可能在于临近的物体一般有相似的法向,因为多数面是平滑的——没有特别大的变化。

原书第 813 页

真正的困难在于如何处理相互反射。如果我们考虑一个典型的室内场景,比如办公室中的一个物体,那么物体表面就不只被光源照亮,场景中其他物体的反射光也很好地充当了次级光源。这些相互照明的效果相当明显,使得预测法向与图像量度之间的关系十分困难。具有相同法向的面片可能具有十分不同的量度,因为一个可以接收从大的白色墙面反射的光源,另一个可能面向黑暗的书架。尽管有这些困难,这个问题是重要的。人们似乎能够忽略相互反射的影响,而从明暗得到对形状的有用感知,但我们对完成这个任务的算法知之甚少。

24.4.6 轮廓

当我们看到类似图 24.21 所示的线条图时,会对其中的三维形状和布局有一个生动的理解。这是如何做到的?这恐怕要归功于以下高级知识(关于具体的形状)与低级约束条件的结合:

Image
图 24.21 一个唤起回忆的线条图

闭合的轮廓,比如山的轮廓。轮廓的一边靠近观察者,而另一边则远离观察者。图像的凹凸性及对称性常用来解决图-背景(figure-ground)问题——标记出哪部分是图(近的),哪部分是背景(远的)。在闭合轮廓上,视域里的线与场景中的面是相切的。

T-连接。当一个物体遮挡另外一个物体时,远处物体的轮廓可能被中断了,假设近处的物体不透明,图像中则会造成T-连接的现象。

地面的位置。人类,抑或陆地上的动物,经常生活于地面上,在这种场景中,不同的位置有不同的物体。由于重力,只有少量物体可以不被地面支持而漂浮于空中。由此我们可以确定这个场景的几何模型。

让我们来看看地面上不同地点不同高度物体的投影。假设我们的眼睛,或者摄像头,位于距地面高度 $ h_{c} $ 的高度。一个高度为 $ \delta Y $ 的物体静止于地面上,其底部位于坐标 $ (X,-h_{c},Z) $,顶部位于坐标 $ (X,\delta Y-h_{c},Z) $,则其底部在图像平面上的投影坐标为 $ (fX/Z,-fh_{c}/Z) $,顶部的投影坐标为 $ (fX/Z,f(\delta Y-h_{c})/Z) $。近处物体(Z 比较小)的底部投影到图像平面上比较低的位置,而远的物体的底部则距地平线比较近。

原书第 814 页
24.4.7 物体及场景几何结构

正常成年人的头部大概为9英寸长。这意味着如果某人站在43尺远的话,其头部上下与相机形成的夹角为1度左右。如果某人头部形成的角度为半度,则根据贝叶斯推断我们会认为此人站在距镜头86尺远,而不是认为其头部只有正常人一半大。这一推断使得我们可以建立一个验证行人检测结果的方法,同时也是一条确定物体距离的途径。比如,大部分行人的身高基本上是一致的,而他们都站立在地面上。假设图像中视平线的位置已知,则我们可以给摄像头中的行人根据距离相机的远近排序。这是因为我们知道他们的脚部的位置,而脚部距地平线近的人距离摄像头比较远(图24.22)。远处的行人还有一个特征是在图像中显得比较小,据此我们可以优化一些检测结果——如果一个检测结果显示此物体的脚部距地平线比较近但尺寸比较大,则我们认为我们检测到了一个异常庞大的行人,这对于人类来说是不存在的,这一检测结果是错误的。事实上对于行人检测窗口来说,大部分的窗口尺寸是不适合的,这些窗口我们甚至不需要经过检测。

Image
Image
图 24.22 站在地平面上的行人图像,图像中脚离地平线更近的行人一定在更远处。这意味着他们在图像中看上去更小。这意味着真实行人的大小和位置依赖于在地平线处的另一个行人。为了利用这一点,我们需要识别出地平线,使用从纹理判断形状(shape-from-texture)的方法可以完成这个任务。从这个信息和一些可能的行人,我们可以还原出地平线,像中间的图像一样。右边,合适的行人检测框给出了这种几何上下文。注意,场景中更高的行人会更小一些,如果不是,那么就是错误的样例

有几种策略可以用于检测地平线,包括检测一条上部有许多蓝色的水平直线,或使用纹理信息中的表面方向信息。一种更巧妙的方法是利用我们的几何约束的倒推。假如场景中有不同的几个人站在距摄像头不同距离的位置,则一个可靠的行人算法应该可以给出正确的地平线信息。这是因为根据行人的缩放比例我们完全可以在图像中确定地平线。所以我们可以先根据行人检测算法估计出地平线,然后根据地平线来消除行人检测结果的错误。

假如待检测物体已知,则我们可以确定除了距离以外更多的信息,因为其在图像中的表现完全决定于其本身当前的姿势,即位置以及相对于观察者的方向。这有许多应用。例如,在一个工业操纵作业中,机械手只有知道物体的姿态,才能够把它拿起来。在刚体的情况下,不论是三维还是二维,这个问题都有一个既简单又清楚明确的基于校准方法(alignment method)的解决方案。我们现在展开讨论这种方法。

原书第 815 页

设物体是用 M 个特征或不同的三维空间点 $ m_1, m_2, \cdots, m_M $——也许是多面体物体的顶点——来表示的。它们都在一个对物体来说较为自然的坐标系中进行测量。那么这些点经过一个未知的三维旋转 $ \mathbf{R} $ 的影响,再平移一个未知量 $ \mathbf{t} $,最后投影到图像平面上得到图像特征点 $ p_1, p_2, \cdots, p_N $。一般来说, $ N \neq M $,因为有些模型点可能被遮住了,而且特征检测算子会漏掉一些特征(或者由于噪声的原因会检测出错误的特征)。对于一个三维模型点 $ m_i $ 以及对应的图像点 $ p_i $,我们可以表示为

$$ p_{i}=\Pi\left(\mathbf{R}m_{i}+\mathbf{t}\right)=Q(m_{i}) $$

其中,R 是旋转矩阵,t 是平移量, $ \Pi $ 表示透视投影或者它的一种近似,例如缩放正投影。净结果就是一个变换 Q,将模型点 $ m_i $ 与图像点 $ p_i $ 对准。虽然我们最初并不知道 Q 是什么,但是我们却知道(对于刚体来说)Q 对所有的模型点一定是相同的。

已知三个模型点的三维坐标与它们的二维投影,就可以求解 Q。直观上是这样的:人们可以写出将 $ p_i $ 和 $ m_i $ 坐标联系起来的方程。在这些方程中,未知量对应于旋转矩阵 R 和平移向量 t 的参数。如果我们有足够的方程,就应该能够求解 Q。我们不准备在这里给出证明;我们只是陈述以下结论:

给定模型中不共线的三点 $ m_{1} $, $ m_{2} $ 和 $ m_{3} $,以及它们在图像平面上的缩放正投影 $ p_{1} $, $ p_{2} $ 和 $ p_{3} $,则恰好存在两个从三维模型坐标到二维图像坐标的变换。

这两个变换通过在图像附近的反射而相关,并能够通过一个简单的封合式的解进行计算。如果我们能在图像中辨识三个特征对应的模型特征,我们就能够计算Q,即物体的姿态。

让我们用数学语言对位置和方向进行描述。在以针孔为原点,光轴(图24.2)为Z轴的坐标系中,场景中一点P的位置可以用由三个数值表示的坐标 $ (X,Y,Z) $刻画。我们所能得到的是该点在图像上的透视投影坐标 $ (x,y) $。这样就确定了一条从针孔发出通过P点的射线;这两点之间的距离是未知的。名词“方向”有两重含义:

(1)物体作为一个整体的方向。这可以用物体坐标系相对于照相机坐标系的三维旋转量来描述。

(2)在 P 点处物体表面的方向。这可以用物体表面单位法向量 n 来描述——它是指明与物体表面垂直的方向的向量。通常我们用变量 slant(倾角)和 tilt(斜角)来表示表面方向。倾角(slant)是 Z 轴和 n 之间的角度。斜角(tilt)是 X 轴和 n 在图像平面上的投影之间的角度。

当照相机相对于物体运动时,物体的距离和方向都在改变。只有物体的形状是不变的。如果该物体是个立方体,那么无论怎么运动它还是立方体。若干世纪以来,几何学家曾想方设法对形状进行形式化描述,其基本的概念是在某些变换群下,例如旋转和平移的组合,保持不变的属性即为形状。其困难在于,需要找到一种对全部形状的表示方法,它应该足够通用,可以适用于真实世界中形形色色的物体——而不只是诸如圆柱体、圆锥体和球体之类的简单形式——同时又易于从视觉输入中发现。对表面的局部形状刻画问题的理解,则要深入得多。本质上,可以从曲率的角度来完成:当在表面上向不同方向运动时,表面法向量是如何变化的。对于平面来说,根本不存在任何变化。对于圆柱体来说,在平行于轴线的方向上没有变化,而在垂直于轴线的方向上,法向量将以反比于圆柱体半径的速率旋转,诸如此类。这些都是被称为微分几何学的学科所研究的课题。

物体的形状与一些操纵任务(例如确定物体可以被抓住的部位)有关,不过它最重要

原书第 816 页

的用途是物体识别,其中几何形状与色彩、纹理一起提供了最有效的提示,使我们能够辨识物体,以及对图像内容按已知类别进行分类,等等。

24.5 基于结构的物体识别

在图像中用方框标示出每个行人确实能防止车祸。我们已经看到如何综合利用方向信息来确定方框的位置以及如何利用直方图来消除可能存在的误差。假如我们需要知道这个人具体在做什么时,我们需要知道他的手、脚、身体、头在图像中的具体位置。身体部位用移动窗口的方法很难检测,因为它们一般比较小,颜色以及纹理在图像中的变化比较大。一般来说,前臂以及胫骨可能只有两或三像素宽。然而身体部位一般不是独立出现,而是依赖于与它们相连的部分,所以我们可以先检测容易检测的部分,然后通过它们去寻找难于检测的部分。

推断出身体在图像中的布局是一个很难的工作,因为身体的布局往往揭示人正在做的动作。一个叫做可变形模板(deformable template)的模型可以帮助我们分辨哪种分布是可接受的:肘部可以弯曲但头部永远不可能与脚部相连。一个简单的人体可变形模板将前臂与上臂连接在一起,而上臂又与躯干连接在一起等等。有一些更精细的模型:如我们可以发现一些规律如左臂与右臂的颜色和纹理一般是一样的,左脚与右脚也一样。然而这些精细的模型实现起来更加复杂。

24.5.1 身体几何结构:寻找四肢

现在假设我们已经知道人身体部位的外观(如已知一个人的衣服颜色和纹理)。我们可以将人体看成一个有11个矩形部分的树形结构(左右的大小臂、左右的大小腿、躯干、头部以及头部上的头发)。我们假设左前臂的位置和方向(姿势)与除左大臂以外的身体部分都是相互独立的,而左大臂又仅仅是与躯干的姿势相关,将这一假设延伸到右臂、腿部以及头部和头发。这一模型我们称之为“硬纸板人”模型。这一模型组成一个由躯干为树根的树。我们将使用树形贝叶斯网络(第14章)的方法在图像中来匹配这一模型。

有两种方法可以用于评估这一外形。首先,一个图像矩形必须与其对应的部分相似。这里,我们可能会有部分的近似,但假设我们有一个函数 $ \phi_i $ 可用于对矩形的近似值打分。而对于一系列相关的部分,我们有另一个函数 $ \psi $ 可用于对整体相连的矩形与一个躯体相似的程度进行打分。由于树内各部分之间的独立性,每一部分都只有一个父结点,假设其为 $ \psi_{i,\mathrm{pa}(i)} $。如果矩形匹配很好的话所有的得分都应该很高,我们可以将其看成是对数可能性( $ \log\ probability $)的问题。对于有 $ m_i $ 个矩形及 $ i $ 个身体部分算法的总花费为

$$ \sum_{i\in\mathrm{segments}}\phi_{i}(m_{i})+\sum_{i\in\mathrm{segments}}\psi_{i,\mathrm{pa}(i)}(m_{i},m_{\mathrm{pa}(i)}) $$

因为关系模型是一棵树,所以动态编程可以找到最佳匹配。

直接搜索连续的空间是不明智的,因此我们可以将图像中的矩形空间离散化。首先根据离散化具有固定大小(对于不同身体部分其矩形大小不同)的矩形的位置和方向。由于踝关节及膝关节不同,我们需要区别考虑一个矩形与及与其180度翻转矩形的关系。我们

原书第 817 页

可以将这些矩形想象成一系列不同位置及方向的图像矩形栈。每一部分有一个栈。我们需要在每个栈里找出最优的矩形。这可能会很慢,因为有很多的矩形候选,对于这个模型,如果有 M 个图像矩形,选择正确的躯干可能需要 $ O(M^{\delta}) $。然而,对于适当的 $ \psi $,我们有许多加速的算法,事实证明这一模型是十分实用的(图 24.23)。这一模型也即图画结构模型。

Image
图 24.23 图画结构模型对一组图像矩形与一个纸板人(左边)的匹配进行评估,通过对身体片段与图像片段之间外观的相似度和图像片段之间的空间关系进行打分。一般,如果图像片段具有正确的外观以及相互之间具有正确的位置,那么匹配就更好。外观模型分别使用头发、头部、躯干、上肢、下肢和腿的平均颜色。它们之间的关系用箭头表示。在右边是对一幅特定图像的最佳匹配,这是使用动态编程获得的结果。这种匹配是对身体结构的直接估计

回想一下我们关于人体的假设。当我们需要在单独一幅图片中检测人体存在时最有用的特征是颜色。纹理特征往往显示得不明显,因为衣服的折叠会在图像纹理上产生一种明暗效果。这种效果往往强烈到能破坏掉衣物的本来纹理。在现在的算法中, $ \psi $往往反映身体部分需要相互靠近,还没有涉及到角度的约束。一般的,我们不知道待检测人的长相,所以我们建立了一个身体部分外观模型。我们将描述一个人外观的模型称为外观模型(appearance model)。如果我们一定要知道图像中人的具体外观,我们可以从一个简单的外观模型开始,检测出其身体姿势,然后在估计其外观。在视频中,我们有同一人的许多帧图像,我们可以一步步丰富其外观信息。

24.5.2 连贯的外观:视频中的人体跟踪

视频中的人体跟踪是一个很重要的实际问题。如果我们能精确定位视频图像中的手臂、腿部、躯干及头部,我们将可以建立更好的游戏接口或者监视系统。滤波方法在这一问题上没有特别好的效果,因为人可以有很快的加速度或者移动很快。这意味着在 30Hz 的视频中,第 i 帧检测出来的人体姿态与第 i+1 帧的人体姿态并没有太大的关联。当前,最实用的方法是基于人体外观在视频中的不变性。假如我们可以为视频中的个体建立一个外观模型,那么我们就可以在图画结构模型中使用这种信息去检测每个帧中的个体。将不同时间上的这些位置连起来就形成跟踪。

有几种方法可以建立一个好的外观模型。我们将视频看成一个包含我们想要跟踪的人的大图像栈。我们可以利用这个栈建立我们的外观模型。我们可以在每帧内检测身体部位,使用的事实是这一部位有近似平行的边缘。这一检测可能并不是特别可靠,但我们要检测的各个部位是很特殊的。它们至少在大部分帧中出现一次;这可以通过对检测器的响应进

原书第 818 页

行聚类来实现。最好是从躯干开始,因为其面积比较大,所以其检测结果往往比较可靠。假设已经得到一个躯干外观模型,则上腿部位应该与躯干相邻,等等。这一推断确实可以得到一个外观模型,不过在某些检测器产生许多错误检测结果的固定的背景中,得到的外观模型可能是不可靠的。一种可供选择的方法是对视频中各图像分别进行结构检测和外观检测;然后再看是否一个外观模型可以很好的适用很多帧。另一种更实用的方法是将一个固定身体姿态的检测器应用到所有帧。一个好的身体姿态是易于可靠检测的姿态,而且人出现这个姿态的几率很高,哪怕只出现短短几帧(侧身行走是个很好的选择)。我们将检测子调整为低错误检测率,所以当它响应时我们知道发现了一个真正的人,因为已经定位了他的躯干、手臂、脚部以及头部,我们知道这些看起来像什么,如图24.24和图24.25所示。

Image
Image
图 24.24 我们可以用图画结构模型跟踪运动人体,通过首先获取外观模型,然后应用它。为了获得外观模型,我们扫描图像以找到一个侧面的走路姿势。检测器不需要特别准确,但应该少生成错误受检测(与错误拒绝相反)。从检测器的响应,我可以快速读出每个身体片段的像素,以及这个身体片段之外的像素。这使得建立每个身体部分的外观的有判别力的模型是可能的,这些模型组合在一起成为被跟踪人体的一个画面结构模型。最后,我们在每一帧里检测这个模型而实现可靠的跟踪。就像图中的下面的部分所显示的,这个过程可以跟踪复杂的、快速改变的身体姿态,尽管由于运动模糊而形成的视频信号的退化
Image
图 24.25 一些复杂的人类动作生成外观和动作的一致模式。例如喝饮料涉及手在脸前面的运动。前三幅图像是正确的“喝饮料”动作的检测:第四幅是错误检测(厨师正在看着咖啡壶,但并没有喝咖啡)

24.6 视觉应用

如果视觉系统可以分析视频并且理解人类的行为,则我们可以做到:收集利用人类在公开场合的行为设计更好的建筑或者公共设施;设计建造更精确,更安全,更少打扰的监

原书第 819 页

视系统;开发电脑运动解说员;开发人体接口监视人们,并与他们的行为进行交互。反应式接口的应用来源于计算机游戏,游戏玩家起身在系统周围活动,这个系统通过管理一个建筑物里的热和光使其与主人所在的地方及主人的活动匹配从而节省能量。

有些问题的理解比较清楚。比如假如视频帧中人的图像比较小,但背景比较稳定,则人体可以简单地用当前帧与背景做差分,如果差分值比较大,则背景差分认为这一点为前景点,将不同帧上的前景连接起来就完成了跟踪。

有组织的行为如芭蕾,体操,太极拳等有着特殊的行为。当处于简单的背景中时,这些行为都比较容易检测。背景差分检测出运动区域,然后我们可以建立HOG特征(根据区域的流量而不是方向)输入给一个分类器。我们可以根据不同的人体检测器来检测一些固定模式的动作,在这些检测器中,方向特征根据时间和空间被加入到了直方图的信息中(见图24.24、图24.25)。

更一般的问题具有更开放的特性。最大的问题还在于如何将观察到的人及附近的对象与运动人的目标和意图联系起来。一方面我们缺乏对于人类行为的一个定义。行为就像颜色一样,人们可能认为自己知道很多行为但就是列不出一个详细的清单来。而且有很多行为又是可以结合在一起的——如你可以在 ATM 取钱时喝牛奶——但我们却不知道什么动作在结合,怎么结合,多少动作结合。第二方面的问题在于哪一方面的特征对应于正在发生的动作。就像我们知道一个人在 ATM 附近时认为他在 ATM 取钱一样。第三个问题是依赖于训练集的一般性的结果或许并不值得信任。如我们并不能简单地认为一个在大数据集下表现良好的行人检测器就是安全的,因为数据集可能本身并不是安全的,可能遗漏了一些稀有的现象(如骑自行车的人)。我们都不希望我们的自动驾驶员撞上正在做出某些并不常见动作的行人。

24.6.1 文字和图片

许多网站都提供图片集供浏览者访问。我们如何找到我们感兴趣的图片呢?假如用户输入一个查询单词,如“自行车竞赛”,则网页立刻会返回一系列标题与之相关的或者包含关键词的图片。在这里,图片返回的结果与文字返回结果类似:都是基于文字而不是基于图片的搜索(见22.3节)

然而关键字经常是不完整的。比如一幅在街道上玩耍的小猫经常被赋予关键词“小猫”和“街道”,而经常会忽视一些关键词如“垃圾桶”和“鱼骨头”。如何给一幅图片(可能已经包含一些关键词)添加一些适当的关键词是一项很有意思的研究。

在这一任务的最前沿研究中,我们假设已经获得了一些正确标注关键词的图片,然后我们希望给一些测试图片添加标签。这一问题也被称为自动注解,最精确的方法是采用的最近邻方法。首先在特征空间中从已训练图片中找到与测试图片最相似的图片,然后收集他们的标签。

这个问题的另一种版本是给图片中特定区域添加相应标签,此处我们并不知道某一标签对应于训练数据中的哪一部分最好。我们可以使用期望最大化的方法来猜测一种标签与图像区域之间的联系,然后再据此建立一个更好的图像区域分解。

24.6.2 多视图重建

双目立体视觉的工作原理是对每个点我们建立了四个条件约束及三个未知的维度。四

原书第 820 页

个条件约束是指每个视图中的(x,y)值,未知维度是指场景中点的(x,y,z)轴的值。这些粗糙的参数表明,存在使得多数点对的匹配不被接受的几何约束。许多图像中的点的位置是模糊不清的。

事实上我们并不是一直需要第二视图。假如我们知道最初的点集来自于已知的物体,则我们可以建立一个物体模型作为已知信息。假如这一模型包含一系列的3D点集或者一系列的图片,而如果我们能够建立点的对应关系,我们可以确定产生源图像中点的摄像头的参数。这是非常有用的信息。我们可以利用它来评估我们的初始假设(这些点来自一个对象模型)。首先使用这些点来确定摄像头参数,然后将模型点投影到相机并确定附近是否还有图像点。

这里我们描述了一个现在已经研究得比较透彻的技术。这一技术可推广用于处理非正交的视图;或处理一些仅在某些视图中出现的点;或者处理未知的摄像头参数,如焦距;或者利用搜索点的对应关系的不同的复杂搜索方法;或者用于基于大数量点及视图进行重建。假设点在图像中的位置已知,并且具有一些精确度,且观察方向是合理的,则我们可以得到高精度的摄像及点的信息。一些应用包括:

模型建立:比如,我们可能需要从视频序列中建立一个物体的模型或者用计算机图形学及虚拟现实方法建立一个精确的三维模型。这类模型现在可以通过一系列的图片来建立。图24.26显示了利用从互联网上找到的图片重建的自由女神像。

Image
(a)
Image
(b)
Image
(c)
图 24.26 多视角三维重建的最近取得很大进展。这个图描绘了由 Michael Goesele 和来自华盛顿大学、TU Darmstadt 和微软研究的同事建立的一个系统。从很多用户拍摄并放在 Internet 上的纪念碑的一组图像(a),这个系统可以判断这些图像的观察角度,在(b)中用黑色的小金字塔标出了这些观察角度。(c)给出了一个三维重建结果

移动比较:为了将计算机图形学的元素加入真实视频中,我们需要知道摄像头相对真实场景的移动,知道了之后我们才能正确地添加元素。

路径重建:移动机器人需要知道他们到过哪儿。如果它们在一个具有刚性的空间中移动,则重建及保存摄像头信息是获取路径的一种方法。

24.6.3 利用视觉控制移动

视觉的一个主要应用是为操纵物体——拾起、抓住、转动等等——和避障导航提供信息。利用视觉完成这些目标的能力,对于动物视觉系统来说是最基本不过的。在许多情况下,如果视觉系统从可获得的光线场中抽取的仅仅是动物指导其行为所需的信息,那么这

原书第 821 页

个视觉系统是最小限度的。很可能,现代视觉系统是从早期原始生物体进化而来的,这些生物体利用身体一端的感光点指引它们自己朝向(或离开)光源的方向。我们在第24.4节中看到,苍蝇使用一个非常简单的光流检测系统来降落到墙上。一个经典的研究,《青蛙的双眼揭示了青蛙大脑的哪些东西》(What the Frog's Eye Tells the Frog's Brain)(Lettvin 等人,1959),对一只青蛙进行了观察:“如果它周围的食物不移动的话,它就会饿死。它对食物的选择只取决于大小和运动”。

让我们考虑:在高速公路上行驶的自动驾驶汽车的视觉系统。驾驶员面对的任务如下:

(1)横向控制——确保车辆安全地保持在它的车道内,或者在需要时平稳地换道。

(2)纵向控制——确保和前面车辆之间有一个安全的车距。

(3)障碍物避让——监视相邻车道的车辆,并准备好当它们中的某一辆决定换道时应做出避让动作。

司机要解决的问题在于生成合适的转向、加速和制动行动,以最好地完成这些任务。

对于横向控制,需要保持对汽车与车道的相对位置和方向的表示。我们可以用边缘检测算法寻找与车道标志段对应的边缘。然后我们可以用光滑曲线拟合这些边缘部分。这些曲线的参数携带有关于汽车的横向位置,它相对于车道前进的方向,以及车道曲率等信息。这些信息,再加上关于汽车的动态信息,就是驾驶控制系统所需的全部信息。如果我们有道路的很好的地图细节,那么视觉系统可以帮助我们确定位置(并观察不在地图里的障碍物)。

对于纵向控制,需要知道到前方车辆的距离。这可以利用双目立体视觉或光流来完成。利用这些技术,视觉控制的汽车现在能够以高速公路上的速度长时间行驶。

在各种室内和室外环境里导航的移动机器人的更一般情况也已经被研究过。机器人在环境中对自身进行定位这个具体的问题现在已有很好的解决方案。在 Sarnoff 的一个小组开发了基于两个前视摄像头的系统,跟踪三维特征点,并利用来重建机器人相对于环境的位置。实际上,他们有两个立体摄像头系统,一个向前看,一个向后看——在机器人经过无特征点(由于阴暗、白墙等)的区域时鲁棒性更好。不太可能前面和后面都没有特征点。当然现在这可能发生,因此通过使用一个惯性运动单元(inertial motion unit,IMU)提供了一个备份,这类似于我们人类在内耳里具有的加速感应机制。把感应到的两次加速综合起来,就可以跟踪位置的变化。结合视觉数据和 IMU 是一个概率证据融合问题,可以用某些技术进行处理,例如卡尔曼滤波,我们在本书其他章节学习过卡尔曼滤波。

使用视觉位置变化估计,存在漂移问题(problem of drift),即随着时间的增加存在累计位置误差。解决方案是使用路标(landmark)来提供绝对位置修正:当一个机器人经过路标时,它可以适当调整它的位置估计。

驾驶的例子很清楚地说明了一点:对于某个特定任务,并不需要从一幅图像中找到理论上能够恢复的所有信息。人们不需要得到每辆车的确切形状,为公路边的草地表面求解从纹理到形状的问题,等等。视觉应该只计算完成任务需要的特定的信息。

24.7 本章小结

虽然感知看起来对人类来说是一种不费力气的活动,它却需要大量的复杂计算。视觉的目标是为诸如操纵、导航和物体识别等任务抽取所需的信息。

原书第 822 页

成像过程在它的几何和物理方面是为人熟知的。给定一个三维场景的描述,我们可以很容易地从某个任意的照相机位置制作出它的一幅图片(图形学问题)。逆转这个过程,从一幅图像得到关于场景的描述却很困难。

为了抽取操纵、导航和识别等任务所必需的视觉信息,不得不构建中间表示形式。初级视觉图像处理算法从图像中抽取原始特征,诸如边缘和区域。

图像中有一些提示信息使人们能够获得关于场景的三维信息:运动、立体视觉、纹理、明暗和轮廓分析。为了提供近乎无歧义的解释,这些提示信息中的每一个都依赖于实际场景的背景假设。

完全通用的物体识别是一个非常难的问题。我们讨论了基于亮度和基于特征的方法。我们还介绍了一个简单的姿态估计算法。其他的可能性是存在的。

参考文献与历史注释

对理解人类视觉的系统化尝试可以追溯到古代。欧几里得(大约公元前300年)论述了自然透视——与三维世界中每一点P相联系的映射,射线OP方向连接了投影中心O与点P。他很了解运动视差的概念。对透视投影的数学上的理解(这里是指在投影到平面上的上下文中)在15世纪文艺复兴时期的意大利产生了下一步重大发展。Brunelleschi(1413)通常被认为创作了最早的基于三维场景正确几何投影关系的画。1435年,Alberti整理了这些规则,从而激发了几代艺术家的灵感,他们的艺术成就至今仍令我们叹为观止。尤其值得一提的是里奥纳多·达·芬奇(Leonardo da Vinci)和Albrecht Dürer对透视科学(他们当时就这么称呼它的)的发展。达·芬奇在15世纪后期关于光线和阴影的相互作用(明暗对照法,chiaroscuro)、阴影的本影和半影区以及空间透视的描述仍值得一读——参见Kemp的译文(1989)。

虽然希腊人认识到了透视,但是他们却令人感到好奇地被眼睛在视觉中的作用所迷惑。亚里斯多得认为眼睛是会发出射线的装置,相当于激光测距仪的工作方式。10世纪的Alhazen等阿拉伯科学家的工作消除了这种错误观点。然后就是各种照相机的逐渐形成。这些照相机是由房间(在拉丁文中camera是“房间”的意思)组成,其中光线从一面墙上的小孔中进入,将外面场景的图像投射到对面的墙上。当然,所有这样的照相机成的图像都是反的,于是导致了无休止的困惑。如果认为眼睛也是这样的成像装置,那么我们怎样看到正确方向的图像呢?这个谜团困扰着那个时代最伟大的头脑(包括达·芬奇)。开普勒(Kepler)和笛卡尔(Descartes)的工作解决了这个问题。笛卡尔将一只眼球剥去不透明外皮,放到快门的孔里。他从放在视网膜外的纸上得到了所成的倒像。尽管视网膜图像的确是颠倒的,但这不会引起问题,因为大脑能够按照正确的方式解释图像。用时髦的行话来说,人们只是不得不适当地访问数据结构。

关于视觉理解的下一个重要进展发生在19世纪。在第1章中描述的Helmholtz和Wundt的工作将心理物理学实验确立为一个严密的科学学科。通过扬(Young)、麦克斯维(Maxwell)和Helmholtz的工作,彩色视觉的三原色理论得以确立。Wheatstone(1838)发明了立体镜,证实了如果提供给左右眼的图像有微小的差异,人们就可以感觉到深度。这种设备很快风靡全欧洲的客厅和沙龙。双目立体视觉的基本概念——从略微不同的视角得

原书第 823 页

到的两幅图像携带了足够用于重构三维场景的信息——被应用于照相测量领域。还得到了关键的数学结果;例如,Kruppa(1913)证明了,只要给定相异五点的两个视图,就能够重建两个照相机位置之间的旋转和平移,以及场景深度(范围取决于一个比例因子)。虽然立体视觉的几何学早已为人们所理解,照相测量学中的对应性问题过去却是通过人尝试匹配对应点来完成的。Julesz(1971)发明的随机点立体视图(random dot stereogram)显示了人求解对应性问题的惊人能力。在20世纪70年代和80年代,人们在计算机视觉和照相测量学两个领域中都投入了许多努力来解决对应性问题。

19 世纪卜半叶是人类视觉的心理物理学研究的主要奠基时期。在 20 世纪上半叶,视觉方面最重要的研究结果是由 Max Wertheimer 领导的格式塔(Gestalt)心理学学派取得的。在 “整体不同于部分和” 的精神指导下,他们提出了以下观点:感知的基本单元是完整形态,而不是边缘等组成部分。

二战后的一段时期以重建活动为显著特征。最为重要的当属J. J. Gibson(1950,1979)的工作,他指出了光流和纹理梯度对于估计表面的倾角和斜角等环境变量的重要性。他重新强调了刺激的重要性和丰富性。Gibson、Olum和Rosenblatt(1955)指出,光流场包含了足够的信息用于确定观察者相对于环境的自我运动。在计算视觉学术界,该领域和(数学上等价的)从运动中提取结构的领域中的工作的主要发展是在20世纪80年代和90年代取得的。Koenderink和van Doorn(1975)、Ullman(1979)和Longuet-Higgins(1981)的开创性工作鼓舞了这方面的研究。Tomasi和Kanade(1992)的工作减轻了早期对从运动获得的结构的稳定性的顾虑,他们证明了使用多帧和由此产生的比较宽的基线,形状就能够得到相当精确的恢复。

Chan 等(1998)描述了苍蝇具有令人吃惊的视觉器官,其短时视觉敏锐性比人类强十倍。也就是说,一只苍蝇能够看一部投影速度高达每秒 300 帧的电影,并识别出每一帧。

20世纪90年代引入的一个概念革新是对从运动中的投影结构的研究。在这种情况下校准摄像机是不必要的,如Faugeras(1992)所证明的。这个发现与下述研究工作是相关的:Mundy和Zisserman(1992)所综述的引入几何不变量并应用于物体识别,以及Koenderink和von Doorn(1991)对从运动中得到仿射结构的发展。在20世纪90年代,随着计算机速度和存储量的高速增长,以及数字视频的广泛应用,运动分析找到了许多新的应用。已被证实特别流行的是建立真实世界场景的几何模型,用于通过计算机图形学技术进行绘制,其指导思想是重构算法,比如Debevec、Taylor和Malik(1996)所提出的算法。Hartley和Zisserman(2000)和Faugeras等(2001)所著的书提供了关于多视图几何学的全面论述。

在计算视觉中,关于从纹理中推测形状的主要早期工作应归功于 Bajscy 和 Liebermann(1976)以及 Stevens(1981)。不过这些工作都只针对平坦表面的情况,对曲面情况的全面分析要归功于 Garding(1992)以及 Malik 和 Rosenholtz(1997)。

在计算视觉学术界,Berthold Horn(1970)最先进行了从明暗中推测形状的研究。Horn和Brook(1989)提供了对该领域的主要文章的一篇广泛综述。在这个框架结构中进行了许多简化性的假设。最重要的假设是忽略相互反射光照的影响。计算机图形学学术界非常强调相互反射光照的重要性,已经发展出了精确的光线跟踪和光通量算法,把相互反射光照的作用纳入考虑之中。一篇理论和经验方面的评论文章可以从Forsyth和Zisserman(1991)的著述中找到。

在关于根据轮廓推测形状的研究领域中,最初由 Huffman(1971)以及 Clowes(1971)

原书第 824 页

做出关键性贡献之后,Mackworth(1973)和Sugihara(1984)完成了对多边形物体的分析。Malik(1987)提出了一种对分片平滑弯曲物体的标注方案。Kirousis和Papadimitriou(1988)证明了三面场景的线条标注是NP完全问题。

为了理解光滑弯曲物体投影中的视觉效果,需要微分几何和奇点理论的相互作用。最出色的研究当属 Koenderink(1990)的《固体形状》(Solid Shape)。

Roberts(1963)在 MIT 的学位论文是三维物体识别方面的开创性工作。它通常被认为是计算机视觉方面的第一篇博士学位论文,引入了一些关键思想,包括边缘检测和基于模型的匹配。Canny(1986)提出了 Canny 边缘检测法。校准的思想也是 Roberts 首先引入的,后来重新出现在 20 世纪 80 年代 Lowe(1987)以及 Huttenlocher 和 Ullman(1990)的工作中。Olson(1994)使通过校准进行姿态估计的效率得到了重大提高。3D(三维)物体识别研究的另一个主要分支方法是基于按照体积元描述形状的思想的,使用了广义圆柱体(generalized cylinder),由 Tom Binford(1971)引入,并被证实非常受欢迎。

当关于物体识别的计算机视觉研究的大部分注意力集中于把三维物体投影到二维图像产生的问题的时候,模式识别学术界有一个并行的传统领域,即把该问题视为一个模式分类问题。具有推动性的例子存在于诸如光学字符识别和手写体邮政编码识别等领域中,所关心的首要问题是对一个类别中物体的典型变化特点进行学习,并将它们与其他类别区分开。各种方法的比较参见LeCun等人(1995)。其他关于物体识别的工作包括Sirovitch和Kirby(1987)以及Viola和Jone(2002)的人脸识别。Belongie等人(2002)描述了形状上下文方法。Dickmanns和Zapp(1987)最先演示了在高速公路上能高速行驶的视觉控制汽车;Pomerleau(1993)用神经元网络方法得到了类似的性能。

Stephen Palmer(1999)的《视觉科学:从光子到现象学》(Vision Science: Photons to Phenomenology)提供了对人类视觉的最全面的论述;David Hubel(1988)的书《眼睛,大脑与视觉》(Eye, Brain, and Vision)和Irvin Rock(1984)的书《感知》(Perception)分别简要而集中地介绍了神经生理学和感知过程。

在计算机视觉领域,现在能找到的最全面的教科书是 David Forsyth 和 Jean Ponce 所著的《计算机视觉:一种现代的方法》(Computer Vision: A Modern Approach)。在 Nalwa(1993)以及 Trucco 和 Verri(1998)的书中也有少量简短的介绍。《机器人视觉》(Robot Vision)(Horn,1986)和《三维计算机视觉》(Three-Dimensional Computer Vision)(Faugeras,1993)是两本比较陈旧但仍然有用的教科书,各有自己专门的话题集。David Marr 的书《视觉》(Vision)(Marr,1982)在把计算机视觉与生物视觉的传统领域——心理物理学和神经生物学——联系起来的过程中扮演了主要角色。《IEEE 模式分析与机器智能会刊》(IEEE Transactions on Pattern Analysis and Machine Intelligence)和《计算机视觉国际期刊》(International Journal of Computer Vision)是计算机视觉方面的两种主要期刊。计算机视觉会议包括 ICCV(International Conference on Computer Vision,“国际计算机视觉会议”),CVPR(Computer Vision and Pattern Recognition,“计算机视觉与模式识别”),和 ECCV(European Conference on Computer Vision,“欧洲计算机视觉会议”)。

习题

24.1 在一棵枝繁叶茂的树木阴影下,可以看到许多光点。奇怪的是,它们看上去都是圆形的。为什么?毕竟阳光穿过的树叶之间的缝隙不太可能是圆形的。

原书第 825 页

24.2 考虑在黑色背景前漂浮的白色球体。分离白色像素与黑色像素的图像曲线有时称为球体的轮廓。证明在透视相机里观察球体的轮廓可能是一个椭圆。为什么你看球体时不像椭圆呢?

24.3 考虑一个半径为 r,轴线沿 y 轴方向的无限长圆柱体。该圆柱体具有朗伯表面,一个沿 z 轴正方向的照相机对它进行观察。如果圆柱体被 x 轴正方向上无穷远处的一个点光源照亮,那么你期望在图像中能看到什么?通过在投影图像上画等亮度线来说明你的答案。这些等亮度线之间的间隔是均匀的吗?

24.4 一幅图像中的边缘可以对应于场景中的多个事件。考虑本书的封面,并假设它是一幅反映真实三维场景的图片。从图像中辨别出十条不同的亮度边缘,并说出每一条边缘对应的不连续是(a)深度,(b)表面法线,(c)反射,还是(d)光照方面的。

24.5 考虑一个用于绘制地形图的立体照相系统。它由两个 CCD 照相机组成,每个照相机具有 10 厘米 × 10 厘米的正方形传感器,上面有 $ 512 \times 512 $ 个像素。所使用的镜头焦距为 16 厘米,焦点固定在无穷远。对于左边图像上的点 $ (u_1, v_1) $ 和右图上的对应点 $ (u_2, v_2) $,由于两个图像平面的 x 轴都平行于外极线(epipolar line,即穿过场景中一点和双眼的平面与图像平面的相交线——译者注),因此 $ v_1 = v_2 $。两个照相机的光轴相互平行。它们之间的基线长度为 1 米。

a. 如果测量的最近距离为 16 米,那么能够产生的最大视差是多少(用像素表示)?

b. 对 16 米距离处进行测量,由像素分布所导致的分辨率范围是多少?

c. 什么距离对应于一个像素的视差?

24.6 下面这些话哪些是正确的、哪些是错误的?

a. 在立体图像中寻找对应点是寻找立体深度过程中最容易的阶段。

b. 根据纹理求形状可以通过将光带组成的栅格投影到场景上来完成。

c. Huffman-Clowes 标注方案能够处理所有的多面体物体。

d. 在弯曲物体的线条图中,从线条的一端到另一端,线条标志可以发生变化。

e. 在同一个场景的立体视图中,两个照相机相距越远,对深度进行计算的精度越高。

f. 场景中长度相等的线段投影到图像中的长度总是相等的。

g. 图像中的直线必然对应于场景中的直线。

24.7 图24.27表示了位于X和Y的两个照相机正在观察一个场景。画出从每个照相机中看到的图像,假设所有已命名的点都在同一个水平面上。关于点A、B、C、D、E到照相机基线的相对距离,根据这两幅图像可以得出什么结论?根据是什么?

Image
图 24.27 正在观察一个瓶子和它后面的墙壁的双照相机视觉系统的俯视图
← 第23章 用于通讯的自然语言第25章 机器人学 →