机器视觉与机器学习:算法原理、框架应用与代码实现
上QQ阅读APP看书,第一时间看更新

第1章 绪论

1.1 机器视觉

视觉是人类强大的感知方式,它为人们提供了关于周围环境的大量信息,使人们能有效地与周围环境进行交互。据统计,人类从外界接收的各种信息中80%以上是通过视觉获得的,人类有50%的大脑皮层参与视觉功能运转。

视觉对于多数动物来说有着至关重要的意义。计算机视觉方面的知名学者李飞飞这样描述:眼睛、视觉、视力是动物最基本的东西。在寒武纪生命大爆发之前,地球上的生物种类稀少,全都生活在水里,都是被动获取食物的。寒武纪生命大爆发阶段,新物种突然增多,在短短的一千万年里生物种类出现了数十万倍的增长。寒武纪生命大爆发的原因至今没有公认的答案,但其中一个观点是这与视觉有很大关系。牛津大学生物学家Andrew Parker通过研究生物化石发现,5.4亿年前三叶虫最早进化出了眼睛(图1-1)。动物有了视觉后就能看到食物,然后开始主动捕食,从而有了捕食者与被捕食者之间的复杂行为的演化,使动物种类不断增多。因此,很多科学家认为生命大爆发始于动物获得视觉后求生的过程,视觉在生物进化过程中极其重要。

图1-1 三叶虫

关于视觉有很多有趣的发现,比如螳螂虾的眼睛能探测到偏振光。人眼以及普通相机只能感受到光的强度信息而不能探测到光的偏振信息。澳大利亚昆士兰大学的研究人员发现,螳螂虾的复眼(见图1-2)能探测到偏振光。根据生物医学及光学方面的理论知识,生物组织特性与偏振信息有关,所以螳螂虾的眼睛是能够“诊断”出生物组织的病变的(https://phys.org/news/2013-09-mantis-shrimp-world-eyesbut.html)。此外,蜻蜓等昆虫具有复眼结构(见图1-3),蜘蛛有很多只眼睛,青蛙的眼睛只能看到动态场景,狗对色彩信息的分辨能力极低。

图1-2 螳螂虾的眼睛

图1-3 蜻蜓的眼睛

那么,介绍完生物的视觉功能之后,什么是机器视觉呢?

机器视觉是机器(通常指数字计算机)对图像进行自动处理并报告“图像是什么”的过程,也就是说它用于识别图像中的内容,比如自动目标识别。

机器视觉一般以计算机为中心,主要由视觉传感器、高速图像采集系统及专用图像处理系统等模块组成。

根据David A. Forsyth和Jean Ponce的定义,计算机视觉是借助于几何、物理和学习理论来建立模型,从而使用统计方法来处理数据的工作。它是指在透彻理解相机性能与物理成像过程的基础上,通过对每个像素值进行简单的推理,将多幅图像中可能得到的信息综合成相互关联的整体,确定像素之间的联系以便将它们彼此分割开,或推断一些形状信息,进而使用几何信息或概率统计计数来识别物体。

从系统的输入输出方式考虑,机器视觉系统的输入是图像或者图像序列,输出是一个描述。进一步讲,机器视觉由两部分组成:特征度量与基于这些特征的模式识别。

机器视觉与图像处理是有区别的。图像处理的目的是使图像经过处理后变得更好,图像处理系统的输出仍然是一幅图像,而机器视觉系统的输出是与图像内容有关的信息。图像处理可分为低级图像处理、中级图像处理和高级图像处理,处理内容包含图像增强、图像编码、图像压缩、图像复原与重构等。

1.1.1 机器视觉的发展

图1-4所示为20世纪70年代至今机器视觉发展过程中的部分主题,包括机器视觉发展初期(20世纪70年代)的数字图像处理和积木世界,20世纪80年代的卡尔曼滤波、正则化,20世纪90年代的图像分割、基于统计学的图像处理以及21世纪计算摄像学与机器视觉中的深度学习等。

1. 20世纪70年代

机器视觉始于20世纪70年代早期,它被视为模拟人类智能并赋予机器人智能行为的感知组成部分。当时,人工智能和机器人的一些早期研究者(如麻省理工大学、斯坦福大学、卡内基·梅隆大学的研究者)认为,在解决高层次推理和规划等更困难问题的过程中,解决“视觉输入”问题应该是一个简单的步骤。比如,1966年,麻省理工大学的Marvin Minsky让他的本科生Gerald Jay Sussman在暑期将相机连接到计算机上,让计算机来描述它所看到的东西。现在,大家知道这些看似简单的问题其实并不容易解决。

图1-4 机器视觉发展过程中的部分主题

数字图像处理出现在20世纪60年代。与已经存在的数字图像处理领域不同的是,机器视觉期望从图像中恢复出实物的三维结构并以此得出完整的场景理解。场景理解的早期尝试包括物体(即“积木世界”)的边缘抽取及随后的从二维线条的拓扑结构推断其三维结构。当时有学者提出了一些线条标注算法,此外,边缘检测也是一个活跃的研究领域。

20世纪70年代,人们还对物体的三维建模进行了研究。Barrow、Tenenbaum与Marr提出了一种理解亮度和阴影变化的方法,并通过表面朝向和阴影等恢复三维结构。那时也出现了一些更定量化的机器视觉方法,包括基于特征的立体视觉对应(stereo correspondence)算法和基于亮度的光流(optical flow)算法,同时,关于恢复三维结构和相机运动的研究工作也开始出现。

另外,David Marr特别介绍了其关于(视觉)信息处理系统表达的三个层次。

1)计算理论:计算(任务)的目的是什么?针对该问题已知或可以施加的约束是什么?

2)表达和算法:输入、输出和中间信息是如何表达的?使用哪些算法来计算所期望的结果?

3)硬件实现:表达和算法是如何映射到实际硬件即生物视觉系统或特殊的硅片上的?相反地,硬件的约束怎样才能用于指导表达和算法的选择?随着机器视觉对芯片计算能力需求的日益增长,这个问题再次变得相当重要。

2. 20世纪80年代

20世纪80年代,图像金字塔和尺度空间开始广泛用于由粗到精的对应点搜索。在80年代后期,在一些应用中小波变换开始取代图像金字塔。

三维视觉重建中出现“由X到形状”的方法,包括由阴影到形状、由光度立体视觉到形状、由纹理到形状及由聚焦到形状。这一时期,探寻更准确的边缘和轮廓检测方法是一个活跃的研究领域,其中包括动态演化轮廓跟踪器的引入,例如Snake模型。立体视觉、光流、由X到形状及边缘检测算法如果作为变分优化问题来处理,可以用相同的数学框架来统一来描述,而且可以使用正则化方法增加鲁棒性。此外,卡尔曼滤波和三维距离数据(range data)处理仍然是这十年很活跃的研究领域。

3. 20世纪90年代

20世纪90年代,视觉的发展情况如下。

1)关于在识别中使用投影不变量的研究呈现爆发式增长,这种方法可有效用于从运动到结构的问题。最初很多研究是针对投影重建问题的,它不需要相机标定的结果。与此同时,有人提出了用因子分解方法来高效地解决近似正交投影的问题,后来这种方法扩展到了透视投影的情况。该领域开始使用全局优化方法,后来被认为与摄影测量学中常用的“光束平差法”相关。

2)出现了使用颜色和亮度的精细测量,并将其与精确的辐射传输和形成彩色图像的物理模型相结合。这方面的工作始于20世纪80年代,构成了一个称作“基于物理的视觉(physics-based vision)”的子领域。

3)光流方法得到了不断的改进。

4)在稠密立体视觉对应算法方面也取得了很多进展。其中最大的突破可能就是使用“图割(graph cut)”方法的全局优化算法。

5)可以产生完整三维表面的多视角立体视觉算法。

6)跟踪算法也得到了很多改进,包括使用“活动轮廓”方法的轮廓跟踪(例如蛇形、粒子滤波和水平集方法)和基于亮度的跟踪。

7)统计学习方法开始流行起来,如应用于人脸识别的主成分分析。

4. 21世纪

21世纪,计算机视觉与计算机图形学之间的交叉越来越明显,特别是在基于图像的建模和绘制这个交叉领域。另外,计算摄像学发挥越来越重要的作用,包括光场获取和绘制以及通过多曝光实现的高动态范围成像。目标识别中基于特征的方法(与学习方法相结合)日益凸显,更高效的复杂全局优化问题求解算法也得到了发展。

另外一个趋势是复杂的机器学习方法在计算机视觉中的应用,尤其是近几年,基于深度学习的机器学习方法在图像与视频等方面中的关于目标检测、跟踪、理解等领域的应用。

1.1.2 机器视觉与其他领域的关系

机器视觉属于交叉学科,它与众多领域都有关联,尤其是机器视觉与计算机视觉之间的关系,有的学者认为二者一样,有的则认为二者存在差别,图1-5显示了机器视觉与其他领域的关系图,包括计算机视觉、图像处理、人工智能、机器人控制、信号处理、成像等。人工智能、机器人控制等概念在相关学科中都有比较明确的定义。成像是表示或重构客观物体形状及相关信息的学科。

图像处理主要是基于已有图像生成一张新的图像,可以通过噪声抑制、去模糊、边缘增强等处理来实现。模式识别的主要任务是对模式进行分类。机器视觉的核心问题是从一张或多张图像生成一个符号描述。计算机视觉与计算机图形学是相互关联而又互逆的过程。计算机图形学的目的是真实或非真实地呈现一些场景,即通过虚拟建模等方式对得到的场景进行处理,然后使用计算机进行呈现;而计算机视觉是为了得到真实场景的信息通过采集图像进行处理。

在数学方法方面,机器视觉用到了连续数学、信号处理、变分法、摄影几何、线性代数、离散数学的知识,如图算法、组合优化、偏微分方程、傅里叶变换。某种程度上,机器视觉与汽车工程的研究一样复杂,它要求研究人员理解机械工程、空气动力学、人机工程学、电子线路和控制系统等诸多主题。

图1-5 机器视觉与其他领域关系