学习OpenCV 第二版<1-3>:What Is Computer Vision?
2014-06-07 00:49
309 查看
大家可以到这里下载英文原版:http://download.csdn.net/download/zleisure/7451051(下载时请看下资源简介)
什么是计算机视觉
计算机视觉【2】是将来自静止2D/3D图像或视频的数据转换成一个决策者或者一种新的表达方式的过程,所有的这些转换都是为了达到某个目标。输入数据可以包含一些辅助信息,如“摄像机架在汽车上”或“激光扫描仪在1米处发现一个物体”。最终的决策可能是“场景中有一个人”或“在这个切片中有14个肿瘤细胞”。一种新的表达方式可以是将一张彩色照片转为灰度照片,或者从图像序列中去除摄像机晃动影响。
因为人类是视觉动物,所以会误认为可以很容易地实现计算机视觉。当你凝视图像时,从中找到一辆汽车会很困难么?你凭直觉会觉得很容易,人脑将视觉信号划分为很多个通道,将各种不同的信息输入你的大脑。你的大脑有一个关注系统,会根据任务识别出图像的重要部分,并做重点分析,而其他部分则分析得较少。在人类视觉流中存在大量的反馈,但是目前我们对之了解甚少。肌肉控制的传感器以及其他所有传感器的输入信息之间存在广泛的关联,这使得大脑可以依赖从出生以来所学到的信息。大脑中反馈在信息处理的各个阶段都存在,在传感器硬件(眼镜)中也存在。在眼镜中通过反馈来调节通过瞳孔的进光量,以及调节视网膜表面上的接收单元。
在计算机视觉系统中,计算机接收到的是来自摄像机或者磁盘文件的一个数值矩阵。一般来说,没有内置的模式识别系统,没有自动控制的对焦和光圈,没有多年来经验的积累。视觉系统通常很低级。图1-1显示了一辆汽车的图像。在此图中,我们可以看到车的一侧有一个后视镜,而计算机“看“到的只是一个数值的矩阵。矩阵中的每个数值都有很大的噪声成分,所以它仅仅给出很少的信息,这个数值矩阵就是计算机”看“到的全部。我们的任务是将这个具有噪声成分的数值矩阵变成感知:”后视镜“。图1-2形象地解释了为什么计算机视觉如此之难。
![](http://img.blog.csdn.net/20140607004431000?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemxlaXN1cmU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
图1-1:对一个计算机来说,汽车的后视镜只是一个数值矩阵
实际上,计算机视觉问题比前面提到的更糟糕,它是不可解的。给出三维世界的二维视图,是没有固定方法来重建出三维信息的。在理论上,此类病态问题没有唯一和确定的解。即使数据很完美,同一张二维图像也可以表示多种三维场景。然而,如前面提到的,数据会被噪声和形变影响。这些影响来自真实世界的变化(天气,光线,反射,运动),镜头和机械结构的不完美,传感器上的长时间感应(运动模糊),传感器上和其他电子器件上的电子噪声,以及图像采集后的图像压缩引入的变化。有如此多令人头疼的问题,我们如何取得进展?
![](http://img.blog.csdn.net/20140607004454187?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemxlaXN1cmU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
图1-2:视觉问题的病态本质:随着试点的变化,物体的二维外观会变化很大
设计实际系统时,为了克服视觉传感器的限制,通常会使用一些其他的上下文知识。考虑这样一个例子,移动机器人在室内寻找并捡起订书机。机器人可以利用这个先验知识:可以在办公室内发现桌子,订书机最可能在桌子上被找到。这给出了一个隐含的尺寸参考或参照,也就是订书机能够放在桌子上。这也可以用于消除在不可能的地方(例如在天花板或者窗户上)错误识别出订书机的可能性。机器人也完全可以忽略一个200英尺大小的跟订书机形状类似的广告飞艇,因为飞艇周围没有桌子的木纹背景。与之相反,在图像检索中,数据库中的所有订书机图像都是对真正的订书机拍摄的,而且尺寸很大和形状不规则的订书机图像一般不可能被拍到。也就是拍摄之一般只拍摄真正的、普通大小的订书机图像。而且人们拍照时一般会将被拍物体置于中心,且将物体放在最能表现其特征的方向上。因此在人拍摄图像中,具有相当多的隐含信息。
我们也可以使用机器学习技术对上下文信息进行显示建模。隐含的变量(例如物体大小、重力方向以及其他变量)都可以通过标记好的训练数据里的数值来校正。或者,也可以通过其他的传感器来测量隐含的变量。使用激光扫描仪可以精确测量出一个物体的大小。计算机视觉面临的另一个难题是噪声问题。我们一般使用统计的方法来克服噪声。例如,一般来说不可能通过比较一个点和它紧密相邻的点来检测图像里的边缘。但是如果观察一个局部区域的统计特征,边缘检测会变得容易些。有局部区域卷积的响应连成的点串,构成边缘。另外可以通过时间维度上的统计来抑制噪声。还有一些其他的技术,可以从数据中学习显式模型,来解决噪声和畸变问题。例如镜头畸变,可以通过学习一个简单多项式模型的参数来描述这种畸变,然后可以几乎完全校正这种畸变。
计算机视觉拟根据摄像机数据来采取行动或者做出决策,这样的行动或决策是在一个指特定目的或任务的环境中来解决,我们从图像去除噪声和损坏区域,可以让监控系统在有人爬过栅栏时给出报警,或者在一个游乐园里监控系统能够数出总共有多少人通过了某个区域。在办公室巡游的机器人的视觉软件所采用的方法与固定摄像机的不同,因为这两个系统有不同的应用环境和目标。通用的规律是:对计算机视觉应用环境的约束越多,则越能够使用这些约束简化问题,从而使最终的解决方案越可靠。
OpenCV的目标是为解决计算机视觉问题提供基本工具。在有些情况下,它提供的高层函数可以高效地解决计算机视觉中的一些很复杂的问题。当没有高层函数时,它提供的基本函数足够为大多数计算机视觉问题创建一个完整的解决方案。对于后者,有几个经过检验且可靠的使用OpenCV的方法;所有这些方法都是首先大量使用OpenCV函数来解决问题。一旦设计出解决方案的第一个版本,便会了解它的不足,然后可以使用自己的代码和知识来解决(更为广知的一点是”解决实际遇到的问题,而不是你想象出来的问题”)。你可以使用第一个版本的解决方案作为一个基准,用之评价解决方案的改进程度。解决方案所存在的不足可以通过系统所用的环境限制来解决。
【2】:计算机视觉是一个很广的领域,本书只涉及该领域的一些基本知识。我们推荐的参考书有Szeliski[Szeliski2011]的关于实用计算机视觉算法概述和Hartley[Hartley06]的三维视觉工作原理。
什么是计算机视觉
计算机视觉【2】是将来自静止2D/3D图像或视频的数据转换成一个决策者或者一种新的表达方式的过程,所有的这些转换都是为了达到某个目标。输入数据可以包含一些辅助信息,如“摄像机架在汽车上”或“激光扫描仪在1米处发现一个物体”。最终的决策可能是“场景中有一个人”或“在这个切片中有14个肿瘤细胞”。一种新的表达方式可以是将一张彩色照片转为灰度照片,或者从图像序列中去除摄像机晃动影响。
因为人类是视觉动物,所以会误认为可以很容易地实现计算机视觉。当你凝视图像时,从中找到一辆汽车会很困难么?你凭直觉会觉得很容易,人脑将视觉信号划分为很多个通道,将各种不同的信息输入你的大脑。你的大脑有一个关注系统,会根据任务识别出图像的重要部分,并做重点分析,而其他部分则分析得较少。在人类视觉流中存在大量的反馈,但是目前我们对之了解甚少。肌肉控制的传感器以及其他所有传感器的输入信息之间存在广泛的关联,这使得大脑可以依赖从出生以来所学到的信息。大脑中反馈在信息处理的各个阶段都存在,在传感器硬件(眼镜)中也存在。在眼镜中通过反馈来调节通过瞳孔的进光量,以及调节视网膜表面上的接收单元。
在计算机视觉系统中,计算机接收到的是来自摄像机或者磁盘文件的一个数值矩阵。一般来说,没有内置的模式识别系统,没有自动控制的对焦和光圈,没有多年来经验的积累。视觉系统通常很低级。图1-1显示了一辆汽车的图像。在此图中,我们可以看到车的一侧有一个后视镜,而计算机“看“到的只是一个数值的矩阵。矩阵中的每个数值都有很大的噪声成分,所以它仅仅给出很少的信息,这个数值矩阵就是计算机”看“到的全部。我们的任务是将这个具有噪声成分的数值矩阵变成感知:”后视镜“。图1-2形象地解释了为什么计算机视觉如此之难。
图1-1:对一个计算机来说,汽车的后视镜只是一个数值矩阵
实际上,计算机视觉问题比前面提到的更糟糕,它是不可解的。给出三维世界的二维视图,是没有固定方法来重建出三维信息的。在理论上,此类病态问题没有唯一和确定的解。即使数据很完美,同一张二维图像也可以表示多种三维场景。然而,如前面提到的,数据会被噪声和形变影响。这些影响来自真实世界的变化(天气,光线,反射,运动),镜头和机械结构的不完美,传感器上的长时间感应(运动模糊),传感器上和其他电子器件上的电子噪声,以及图像采集后的图像压缩引入的变化。有如此多令人头疼的问题,我们如何取得进展?
图1-2:视觉问题的病态本质:随着试点的变化,物体的二维外观会变化很大
设计实际系统时,为了克服视觉传感器的限制,通常会使用一些其他的上下文知识。考虑这样一个例子,移动机器人在室内寻找并捡起订书机。机器人可以利用这个先验知识:可以在办公室内发现桌子,订书机最可能在桌子上被找到。这给出了一个隐含的尺寸参考或参照,也就是订书机能够放在桌子上。这也可以用于消除在不可能的地方(例如在天花板或者窗户上)错误识别出订书机的可能性。机器人也完全可以忽略一个200英尺大小的跟订书机形状类似的广告飞艇,因为飞艇周围没有桌子的木纹背景。与之相反,在图像检索中,数据库中的所有订书机图像都是对真正的订书机拍摄的,而且尺寸很大和形状不规则的订书机图像一般不可能被拍到。也就是拍摄之一般只拍摄真正的、普通大小的订书机图像。而且人们拍照时一般会将被拍物体置于中心,且将物体放在最能表现其特征的方向上。因此在人拍摄图像中,具有相当多的隐含信息。
我们也可以使用机器学习技术对上下文信息进行显示建模。隐含的变量(例如物体大小、重力方向以及其他变量)都可以通过标记好的训练数据里的数值来校正。或者,也可以通过其他的传感器来测量隐含的变量。使用激光扫描仪可以精确测量出一个物体的大小。计算机视觉面临的另一个难题是噪声问题。我们一般使用统计的方法来克服噪声。例如,一般来说不可能通过比较一个点和它紧密相邻的点来检测图像里的边缘。但是如果观察一个局部区域的统计特征,边缘检测会变得容易些。有局部区域卷积的响应连成的点串,构成边缘。另外可以通过时间维度上的统计来抑制噪声。还有一些其他的技术,可以从数据中学习显式模型,来解决噪声和畸变问题。例如镜头畸变,可以通过学习一个简单多项式模型的参数来描述这种畸变,然后可以几乎完全校正这种畸变。
计算机视觉拟根据摄像机数据来采取行动或者做出决策,这样的行动或决策是在一个指特定目的或任务的环境中来解决,我们从图像去除噪声和损坏区域,可以让监控系统在有人爬过栅栏时给出报警,或者在一个游乐园里监控系统能够数出总共有多少人通过了某个区域。在办公室巡游的机器人的视觉软件所采用的方法与固定摄像机的不同,因为这两个系统有不同的应用环境和目标。通用的规律是:对计算机视觉应用环境的约束越多,则越能够使用这些约束简化问题,从而使最终的解决方案越可靠。
OpenCV的目标是为解决计算机视觉问题提供基本工具。在有些情况下,它提供的高层函数可以高效地解决计算机视觉中的一些很复杂的问题。当没有高层函数时,它提供的基本函数足够为大多数计算机视觉问题创建一个完整的解决方案。对于后者,有几个经过检验且可靠的使用OpenCV的方法;所有这些方法都是首先大量使用OpenCV函数来解决问题。一旦设计出解决方案的第一个版本,便会了解它的不足,然后可以使用自己的代码和知识来解决(更为广知的一点是”解决实际遇到的问题,而不是你想象出来的问题”)。你可以使用第一个版本的解决方案作为一个基准,用之评价解决方案的改进程度。解决方案所存在的不足可以通过系统所用的环境限制来解决。
【2】:计算机视觉是一个很广的领域,本书只涉及该领域的一些基本知识。我们推荐的参考书有Szeliski[Szeliski2011]的关于实用计算机视觉算法概述和Hartley[Hartley06]的三维视觉工作原理。
相关文章推荐
- szeliski——computer vision algorithm and application<一>introduction
- 学习OpenCV 第二版<1-1>:What Is OpenCV?
- 人脸识别之人眼定位、人脸矫正、人脸尺寸标准化---<Mastering OpenCV with Practical Computer Vision Projects >
- szeliski——computer vision algorithm and application<二>image formation
- 学习OpenCV 第二版<2-1>:Include files
- What is the difference between angle bracket < > and double quotes " " while including header files
- OpenCV新书<Mastering OpenCV with Practical Computer Vision Projects>
- 学习OpenCV 第二版<1-2>:Who Uses OpenCV?
- CGAL::Surface_mesh_default_criteria_3<Tr>
- 关于numeric_limits<data_type>::is_signed的值
- JAVA巧用三目运算符 <表达式1>?<表达式2>:<表达式3>
- gvim中Mapping already in use: "<LocalLeader>is", mode "n"错误解决
- Quartz调度框架应用总结<3>
- Property 'submit' of object #<HTMLFormElement> is not a function
- SQL Server XML基础学习<3>之--FOR XML EXPLICIT
- c文件操作<3>
- php+js+mysql设计的仿webQQ-<3>月份天数随月份改变
- 指尖上的代码[C语言版]-<3>
- Fms3和Flex打造在线多人视频会议和视频聊天(附原代码)<视频聊天,会议开发实例3>
- Device Checks for ASM Fails with PRVF-5150: Path ORCL:<diskname> is not a valid path [ID 1210863.1]