什么是计算机视觉处理?高端产品的图像处理技术原理解析!

计算机视觉这种技术能够将静止图像或视频数据转换为一种决策或新的表示。全部这样的转换都是为了完成某种特定的目的而进行的。程序员

输入数据可能包含一些场景信息,例如“相机是搭载在一辆车上的”或者“雷达发现了一米以外有一个目标”。编程

一个新的表示,意思是将彩色图像转换为黑白图像,或者从一个图像序列中消除相机运动所产生的影响。安全

 

人类的视觉

由于咱们是被赋予了视觉的生物,因此很容易误认为“计算机视觉也是一种很简单的任务”。计算机视觉究竟有多困难呢?机器学习

请说说你是如何从一张图像中观察到一辆车的。你最开始的直觉可能具备很强的误导性。人类的大脑将视觉信号划分为许多通道,好让不一样的信息流输入大脑。大脑已经被证实有一套注意力系统,在基于任务的方式上,经过图像的重要部分检验其余区域的估计。在视觉信息流中存在巨量的信息反馈,而且到如今咱们对此过程也知之甚少。函数

肌肉控制的感知器和其余全部感官都存在着普遍的相互联系,这让大脑可以利用人在世界上多年生活经验所产生的交叉联想,大脑中的反馈循环将反馈传递到每个处理过程,包括人体的感知器官(眼睛),经过虹膜从物理上控制光线的量来调节视网膜对物体表面的感知。工具

 

计算机的视觉

然而在机器视觉系统中,计算机会从相机或者硬盘接收栅格状排列的数字,也就是说,最关键的是,机器视觉系统不存在一个预先创建的模式识别机制。没有自动控制焦距和光圈,也不能将多年的经验联系在一块儿。大部分的视觉系统都还处于一个很是朴素原始的阶段。性能

图 1 展现了一辆汽车。在这张图片中,咱们看到后视镜位于驾驶室旁边。可是对于计算机而言,看到的只是按照栅格状排列的数字。学习

全部在栅格中给出的数字还有大量的噪声,因此每一个数字只能给咱们提供少许的信息,可是这个数字栅格就是计算机所可以“看见”的所有了。咱们的任务变成将这个带有噪声的数字栅格转换为感知结果“后视镜”。spa

图 2 给出了为何计算机视觉如此困难的另外一些解释。设计


图1:对于计算机来讲,汽车的后视镜就是一组栅格状排列的数字

 


图2:视觉的不适定问题,物体的二维表示可能随着视点的不一样彻底改变

一个数学物理定解问题的解若是存在,惟一而且稳定的,则说明该问题是适定的(well-posed);若是不知足,则说明该问题是不适定的(ill-posed)。

实际上,这一问题,正如咱们以前所提出的,用“困难”已经不足以形容它了,它在不少状况下根本不可能解决。

给定一个对于 3D 世界的二维(2D)观测,就不存在一个惟一的方式来重建三维信号。即便数据是完美的,相同的二维图像也可能表示一个无限的 3D 场景组合中的任一种状况。

并且,前面也提到过,数据会被噪声和畸变所污染。这样的污染源于现实生活中的不少方面(天气、光线、折射率和运动),还有传感器中的电路噪声以及其余的一些电路系统影响,还有在采集以后对于图像压缩产生的影响。

在这一系列的影响之下,咱们又该如何推进事情的进展呢?

在经典的系统设计中,额外场景信息能够帮助咱们从传感器的层面改善获取信息的质量。

 

场景信息能够辅助计算机视觉

考虑这样一个例子,一个移动机器人须要在一栋建筑中找到而且拿起一个订书机。机器人就可能用到这样的事实:桌子一般放在办公室里,而订书机一般收纳在桌子里。这也一样给出了一个关于尺寸的推断:订书机的大小必定能够被桌子所收纳。

更进一步,这还能够帮助减小在订书机不可能出现的地方错误识别订书机的几率(好比天花板或者窗口)。机器人能够安全忽略掉 200 英尺高的订书机形状的飞艇,由于飞艇没有知足被放置在木制桌面上的先验信息。

相对的,在诸如图像检索等任务中,数据集中全部的订书机图像都是来自真实的订书机,这样不合常理的尺寸以及一些奇形怪状的造型都会在咱们进行图片采集的时候隐式消除——由于摄影师只会去拍摄普通的正常尺寸的订书机。

场景信息一样能够(尤为是经过机器学习技术)进行建模。隐式的变量(好比尺寸、重力的方向等不容易被直接观测到的)能够从带标记的数据集中发现关系并推测出来。

 

使用统计的方法来对抗噪声

计算机视觉所面临的下一个问题是噪声,咱们通常使用统计的方法来对抗噪声。

好比,咱们很难经过单独的像素点和它的相邻像素点判断其是不是一个边缘点,但若是观察它在一个区域的统计规律,边缘检测就会变得更加简单了。

一个真正的边缘应该表现为一个区域内一连串独立的点,全部点的朝向都与其最接近的点保持一致。

基于摄像机的数据,计算机视觉准备作出的动做或决定是在特定的目的或者任务的场景环境中执行的。咱们也许想要移除噪声或者修复被损坏的照片,这样安全系统就能够对试图爬上栏杆等危险行为发出警报,或者对于穿过某个游乐场区域的人数进行统计。

而在大楼中漫游的机器人的视觉软件将会采起和安全系统彻底不一样的策略,由于两种策略处于不一样的语境中。通常来讲,视觉系统所处的环境约束越严格,咱们就越可以依赖这些约束来简化问题,咱们最终的解决方案也越可靠。

OpenCV 的目标是为计算机视觉须要解决的问题提供工具。在某些状况下,函数库中的高级功能能够有效解决计算机视觉中的问题。即便遇到不可以一次性解决的问题,函数库中的基础组件也具备足够的完备性来加强解决方案的性能,以应对任意的计算机视觉难题。

在后一种状况下,也存在一些使用库的可靠方法,全部的这些方法都是从尽可能多使用不一样的组件库开始。

一般,在开发了第一个粗糙的解决方案以后,就能够发现解决方案存在哪些缺陷而且使用本身的代码与聪明才智修复那些缺陷(更为熟知的说法是“解决真正存在的问题,而不是你想象中的那些问题”)。

在此以后可使用粗糙的解决方案做为一个评判标准,评价改善水平。从这一点出发,你能够解决任意问题。


 

无论你是转行也好,初学也罢,进阶也可,若是你想学编程,进阶程序员~

【值得关注】个人 编 程 学 习 交 流 俱 乐 部 !【点击进入】

全栈程序员正在等你加入~

相关文章
相关标签/搜索