一、定义

美国制造工程师协会机器视觉分会和美国机器人工业协会自动化视觉分会为机器视觉作了如下定义:机器视觉是通过光学装置和非接触传感器自动地接收和处理一个真实物体的图像,以获得所需信息或用于控制机器人运动的装置。通俗地说,机器视觉就是用机器模拟生物宏观视觉功能,代替人眼来做测量和判断。 首先,通过图像传感器将被摄取的目标转化成为图像信号,传送给专用的图像处理系统,根据像素分布、亮度和颜色等信息,转变成数字化信号;随后,图像处理系统对这些信号进行各种运算来抽取目标的特征,如面积、长度、数量、位置等;最后,根据预设的容许度和其他条件输出结果,如尺寸、角度、偏移量、个数、合格/不合格、有无等从广义角度来看,凡是通过光学装置获取真实物体的信息以及对相关信息的处理与执行都是机器视觉,这就包括了可见视觉以及非可见视觉,甚至包括人类视觉不能直接观察到的、物体内部信息的获取与处理等。

二、机器视觉与计算机视觉的区别

计算机视觉Computer Vision的关键词是Computer,机器视觉Machine Vision的关键词是Machine,这间接表达了二者的侧重领域不同。通俗地说,计算机视觉比较侧重于对图像的分析,回答“是什么”的问题;而机器视觉更关注图像处理的结果,目的是控制接下来的行为,回答“怎么样”的问题。
计算机视觉一般使用相机设备,可以是工业相机、高速摄像机,也可以是简易摄像头等,主要是对人眼的生物视觉进行模拟,如同人眼把看到的图像转化为脑海中的画面一样,计算机视觉的任务就是把数字图像转化成生动、有意义、有语境的场景,输出的内容是计算机模拟人类对图像的观察和理解。相机拍摄所得图像存储在计算机中的只是一个数字集合。计算机视觉所做的就是从这个数字的集合中提取出需要的信息,如图中有什么物体,分别在什么位置,处于何种状态等,目的是实现对客观世界中场景的感知、识别和理解。简言之,计算机视觉主要强调给计算机赋能,使其能看到并理解这个世界中的各个物体。
机器视觉是一套光机电计结合的复杂设备,涉及光学成像、传感器、视频传输、机械控制、相机控制、图像处理等多种技术,每个环节都会影响到最终的检测结果。从功能上看,机器视觉不像计算机视觉那样关注对象“是什么”,而是重点观测目标的特征、尺寸、形态等信息,其目的在于根据判断的结果来控制现场的设备动作。
从本质上说,二者都属于视觉技术,共用同一套理论系统,但计算机视觉更侧重于对理论算法的研究,如深度学习在计算机领域已经有许多前沿算法,但这些算法在实际应用中仍有各种局限,离在实际工程中应用还有很长的路要走。而机器视觉是落地的技术,它更侧重于实际应用,强调算法的实时性、高效率和高精度。 机器视觉的优势还在于,在一些不方便使用人工或人工无法满足要求的场合,机器视觉可以很好地代替人眼,如在各种恶劣环境下进行高速实时检测。机器视觉还广泛应用于机器人研究,是机器人的“眼镜”,指引机器人的移动和操作行为。机器视觉和计算机视觉的发展方向和应用领域是各不相同的。

三、机器视觉系统的组成

一个完整的机器视觉由以下几部分组成:
①一个或多个工业相机(包括可见光、非可见光、多光谱);
②照明光源(包括可见光、非可见光、激光、闪光灯);
③光学系统(包括一个或多个透镜组和滤光片);
④机械部分(为整个机器视觉系统提供安装基准和部件调节功能);
⑤电气部分(主要是供电、走线和数据接口);
⑥硬件部分(包括工控机、嵌入式系统、图像采集卡、传感器、触发器、执行器),对于涉及与机器人协作的机器视觉系统,机器人可被视为执行器;
⑦算法;
⑧软件系统(包括人机交互界面、与其他类计算机设备的通信模块、远程维护模块、离线更新模块)。

四、机器视觉知名企业

由于机器视觉注意是服务于工业自动化,基于中国工业自动化的发展进程,在机器视觉领域,国外企业无论从技术水平还是应用领域都要领先于国内企业。
国外顶尖的机器视觉企业有:日本基恩士Keyence、美国康耐视Cognex、德国MVTec、瑞士堡盟Baumer;
国内顶尖的机器视觉企业有:海康机器人、大恒图像、中科院部分研究所。
由于机器视觉产品的最核心竞争力不是算法,而是传感器、光学系统、精密机械这3部分,所以日本和德国凭借在精密制造领域的优势处于领先地位,且我国由于受限于上述关键部件,短时间内无法达到相同水平。

五、机器视觉应用行业

按照工业生产类型来分:无论是小批量的作坊式生产、大规模的离散型生产、连续的流程型生产、实验室级别的化验检验,都在越来越多的使用机器视觉技术。
而在各工业行业中,由于德国和日本最先是用机器视觉技术来解决汽车行业的生产需求,所以其在汽车行业应用最为广泛和成熟。目前,在芯片、新能源、航天、医疗、电子、食品、包装等行业也得到了大规模成熟应用。

六、机器视觉应用任务类型

前面都是铺垫,这才是本文的关键。
识别码识别:即使用物体上的标记来识别物体,通常是标准化的条形码或二维代码,但也可以是自定义代码。典型应用是物料流控制和物流。
目标识别:表示使用诸如形状/几何、尺寸、颜色、结构/拓扑或纹理等特征来识别目标。目标识别包括目标变体的区别,并具有许多应用,尤其是作为许多其他任务的“辅助科学”。例如,位置识别或完整性检查可能需要事先识别场景中的正确目标。3D数据越来越多地用于目标识别,实际上为该领域增加了一个新维度,并允许使用全新的方法来匹配和评估对象特征,例如通过与计算机辅助设计 (CAD) 数据进行比较。
位置识别:表示使用特征计算和匹配方法在预定义的坐标系中确定目标或目标的特定点位置和方向。典型特征是重心坐标和方位角。典型应用是机器人引导、取放操作和插入机器。一个有趣的变化是反向应用,即使用图像来确定相机系统本身的位置和方向(视觉引导),例如,自主机器人使用来确定它们的位置。
完整性检查:表示工件组装正确或错误的分类。它检查所有组件是否存在并处于正确位置,通常作为将工件传递到下一个组装步骤的先决条件或作为释放要包装和交付的工件之前的最终检查。
形状和尺寸检查:表示几何量的确定,重点是精确和准确的测量。随着产品质量标准的不断提高,这一领域的重要性也在增加,因为产品必须满足越来越严格的公差要求。任何需要检查工件或工具是否符合标称尺寸的应用都可以找到。由于所需的精度,这些任务通常对传感器设备以及检查站的机械结构提出很高的要求。
表面检查:可分为定量表面检测,旨在确定表面粗糙度等形貌特征,以及定性表面检测,重点是识别表面缺陷,如凹痕、划痕、污染或与所需表面特征的偏差,如颜色或质地。为了判断表面质量,可能需要对几何特性进行定量测量。
按照应用的目的又可分为:
检验,即在生产过程后检查工件是否正确。这曾经是大多数图像处理系统的情况。检验通常是指检查缺陷,如凹痕、划痕、尺寸错误等。它流畅地融合到验证中,视觉系统验证预期状态是否实际存在。各种识别任务均属于此类型。
监控,即在生产过程中观察是否正确进行。例如,用摄像头观察激光焊接过程,查看焊接过程中熔池的大小是否正确。其可进一步扩展为控制,即利用机器视觉系统的结果来改变或控制过程,可以作为统计过程控制或直接反馈控制,例如,当使用视觉系统的轮廓测量来引导龙门机器人沿着测量的轮廓分配胶水或密封剂时。
可大致认为:识别码识别、目标识别、完整性检查这些检验类任务的输出结果是离散值(即是或者不是,或是一个序数,一共有几个)。而位置识别、形状和尺寸检查、表面检查这些监控类任务的输出结果是连续值(即整数或浮点数)。
我国的机器视觉行业经过多年的发展,很多成熟应用领域都已饱和,而这些饱和领域,主要都是检验这类输出离散值的任务。目前国内的机器视觉从业者都在往更多领域扩展,我现在主要做的就是往流程行业扩展,在这些新领域中,主要都是监控这类输出连续值的任务。

七、深度学习在机器视觉中的应用

深度学习相比于传统视觉算法的优点主要有2个:
更能适应复杂场景和低质量图像。也就是说,当生产现场由于条件所限,无法提供理解的成像条件(如外部粉尘、光线、人等的干扰,或者拍摄成像不具有高对比度)时,使用深度学习也可以获得较好处理结果,从而有可能满足实际任务需求。而在应用传统视觉算法的机器视觉中,主要是通过打光和机械部分的移动和遮挡,为拍摄成像提供良好的物理条件。
能获得更高的算法处理准确度。也就是说,当用户对系统的最终处理结果有很高的精度要求时,如高精度语义分割或目标检测等任务,使用深度学习可以获得更好的效果,从而有可能满足实际任务需求。而在应用传统视觉算法的机器视觉中,主要是通过提高相机分辨率、高精度光学组件、机械运动辅助等手段来解决的。
而深度学习相比于传统视觉算法的缺点主要有4个:
花费时间多。深度学习是完全数据样本驱动的方法,需要采集大量图像,这严重拖长了算法部署时间。而且如果用户对于效果不满意,就又需要采集更多的图像,在同一现场的部署过程中,其所花费的时间要远多于传统视觉算法。使用深度学习算法所导致的后续维护成本会明显高于传统视觉算法。但对于不同的现场,则取决于各现场之间数据的差异,其与传统视觉算法所需要的时间,可能差不多。
运行功耗大。深度学习是强计算方法,再加上为了推理加速,往往使用GPU。这会导致芯片的长时间高负荷运行和温升。在工业现场由于全年长时间连续运行,也就决定了机器视觉系统也要全年长时间连续运行。对于几个GPU的能耗,我国企业用户对此一般不敏感。但由于高功耗运行所导致的芯片使用寿命减少和故障率上升,却是我国企业用户非常关心的
③计算速度慢。由于在工业项目中,如果使用深度学习,一般是搭配传统视觉算法一起使用的,只是将传统视觉算法中的部分内容替换用深度学习,单纯的依靠深度学习实现端到端的部署运营,往往会在实际使用中出现鲁棒性差或开发时间长等问题。既然是深度学习+传统视觉,那么无论是使用GPU加速、还是FPGA加速、以及流水线技术,都不可避免的涉及到数据在不同处理器间的切换,所以不会比传统视觉算法快。
④硬件占用空间大。由于使用GPU或其它辅助加速芯片,其一般都会比传统视觉算法需要占用更大的物理空间,而这在工业现场中,也是一个需要考虑的问题。
综合深度学习的优点和缺点,我总结的深度学习在机器视觉中的应用场景如下
①如果用户有钱、现场条件好,优先采用堆高性能硬件(高分辨率相机、高精度机械机构)的方式解决,尽量不使用深度学习。
②如果用户追求高精度,不管实际是否使用,都要将深度学习列在技术方案中,以备在传统视觉算法无法满足精度需求时,尝试用深度学习提高精度。
③如果现场条件差(主要指机械设备和生产环境),一定使用深度学习,其主要是利用深度学习算法的适应性,来弥补硬件条件差的不足,因为很有可能无法获得理想的拍摄成像,也没有足够的资金对现场硬件进行改造。
④如果准备产品标准化大范围应用,则尽量不要使用深度学习。因为标准化本身就是为了降低成本和维护工作量,而使用深度学习使你很难做到这一点。
顺便说一下,对于国外的顶级机器视觉企业,其对于机器视觉系统的产品定位是属于非接触传感器或仪器仪表,都是大批量标准化产品,因此很少在其产品中使用深度学习。即使在深度学习大红大紫的今天,企业也只是将深度学习作为产品的一个可选附加功能,供用户自行开发使用,而不自己实际使用。我国由于机器视觉从业者大多数都是在应用端部署一线,才广泛使用深度学习。这也与我国机器视觉产品用户,对于深度学习的缺点不太在意有关。

八、机器视觉应用的认知误解

作为一个机器视觉从业者,我们要对机器视觉的适用范围有清晰的认知,这是我们个人技术水平的体现。我基本从事的都是利用机器视觉进行定量检测的工作,因此只关注于该方面。

既然是用机器视觉进行定量检测,那么用户一定是拿你的机器视觉产品与传感器或仪器仪表进行对比和应用。这就要求相关机器视觉产品必须能提供像传感器或仪表的性能指标。

传感器的性能分为静态性能和动态性能:

①静态性能是指当传感器输入信号处于稳定状态时,其输出与输入之间呈现的关系。传感器的静态性指标主要有测量范围、精度、稳定性、灵敏度、线性度、迟滞、重复性和可靠性等。

②传感器要检测的输入信号是随时间而变化的,传感器的性能应能跟踪输入信号而变化,这样才可以获得准确的输出信号。如果输入信号变化太快,传感器就可能跟踪不上,通俗来说就是来不及反应。传感器这种跟踪输入信号变化的特性就是动态特性,它是传感器的重要特性之一。传感器的动态特性指标主要有频率特性和阶跃特性。频率特性主要是指频率响应时间、幅频特性、临界频率等。

好在国内用户对于传感器的这些性能指标不是全部都关心,一般重点关注以下3个性能指标:

测量范围

测量精度

测量频率

然后我们来说4个认知误解:

使用工业相机不能定量测亮度

我们一般理解的物体的亮暗是光度量,在计算时需要使用视觉函数,其实是一个主观量(即因人而异),不具备定量测量的意义。为了能够定量测量,需要使用客观量,即物理上的亮度luminance,本质上是特化的辐射功率指标。光源在某方向上,能量越集中,传递面积越小,则亮度越强(越密集)。照度是某个面上被照亮的程度,等价于“光的压强”。像衡量室内明暗程度使用照度,规定办公桌面上的照度不小于500lux=500lm/m2,就是桌子上每平米有500lm(流明)的光通量。亮度的单位lm/sr/m2,是每平米光源每一度发散角内的光通量,是视觉能量的功率,这类似于压强,但压强只考虑面积因素,亮度还要考虑发散程度。lm/sr(流明每立体角)衡量了一个点光源每单位立体角上的光通量,写作cd(坎德拉)=lm/sr,因此最终的亮度单位是cd/m2。单光源固定位置上,亮度和照度成正比,多反射面或者多光源时,照度受场景的干扰。通过透镜的汇聚作用,可以将照度转变为亮度,通过照度间接测量亮度。而没有校准的亮度只是相对亮度。像素相当于一个小型的照度仪。

机器学习图像处理 图像处理,机器视觉_图像处理


相机拍出的像素是(相对)亮度,距离远近不影响结果;而闪光灯打到墙上是照度,越远则越暗。用于测量光线的是照度计,无论怎么测量亮度,都需从照度间接测得。根据上面的解释:照度=lm./m2,亮度=lm/sr/m2,亮度有2~3个要素需要测量:

<1>光源面积;

<2>单位角内光通量。

这里引用知乎用户@荆慢慢2.0文章的内容和附图来说明

机器学习图像处理 图像处理,机器视觉_计算机视觉_02


单位角上的光通量可以用照度计间接测量。必须尽可能让照度计只接收到光源发出的光线。根据光线直线传播的原理,从探测器的视角看上去,应该是这个样子的:

机器学习图像处理 图像处理,机器视觉_图像处理_03


这样既可避免光线来自光源(本例中的手机),而不是反光或者背景光线。测量后进行计算。

机器学习图像处理 图像处理,机器视觉_人工智能_04


上述简化实际测量中:

<1>0.87m的地方实测照度是6.1 lux

<2>换算到1m处的照度是6.1/0.87^2=4.62lux,按角度取即4.62lm/sr

<3>屏幕尺寸11.67cm6.4cm, 亮度即4.62/11.67cm/6.4cm=619cd/m2
而官方已知亮度数据为600cd/m2。如果要可靠测量单点亮度需使用专用的点式亮度计。
工业级测量亮度的关键需考虑因素有:杂散光影响、测量距离、灵敏度。如果要测量整个场景的亮度,需要使用场景亮度计:

机器学习图像处理 图像处理,机器视觉_人工智能_05


这种专业仪器价格昂贵,可使用相机近似代替。相机的CMOS实际上相当于阵列式的获取相对总光通量,即相机传感器测量的是曝光量,单位为lux/s。曝光出来的读数是相对亮度,但不知道绝对亮度是多少。这就是使用相机测量的坑点。最好的办法当然是利用一个现成的点式亮度计,对同一个东西(要黑白的就行),同时测量和拍摄,得到的结果就是这个像素的亮度。由于色阶之间关系是固定的,因此只需校准一个即可,问题是我们一般是没有点式亮度计。有误差的替代方案有:
<1>从ISO定义估算,其是最不准确的方式,取ISO100为F1.0和1s曝光下得到0Ev的亮度,此时大概为中性灰,即亮度为0.125cd/m2,于是计算公式为:
亮度 = 0.125cd/m2 * ISO
快门*光圈(倒数)^2

因为镜头折光的损失,这个结果肯定被低估。

<2>用弥散光源和照度计测量。对于理想漫反射体,亮度和照度的换算公式为:L = M/π。例如用照度计在一个漫反射体下测得3060lux的照度,那么发光体的亮度就是974.5cd/m²。但漫反射跟照度计读数之间的换算不是如此理想的,还需要乘上系数。

如果你不管其他误差的话,到这一步就算完成校准了,无论是发散角还是光圈快门,都在校准里被确定了。只要再获得响应曲线(亮度和像素的关系),就能解算亮度。

响应曲线的获得使用的是已经很成熟的自校准技术,随便哪个HDR软件都能得到,比如Photoshop自带的。这种方式,首先要求拍摄一序列不同曝光的照片,然后再导入软件内进行计算即可。比如Photoshop自带的HDR Pro:

机器学习图像处理 图像处理,机器视觉_机器视觉_06


整个测量过程的误差来源有:

机器学习图像处理 图像处理,机器视觉_图像处理_07


到此你可以理解了,工业相机输出的虽然是量化的(相关)亮度,但由于其关系非线性,各种硬件造成的测量误差,所以你无法说明,通过相机和算法的处理结果是测量的亮度值。如果必须要测量亮度,则必须使用专用的光源和光路系统,建议使用场景亮度计进行测量。②使用工业相机不能定量测颜色

物体表面色本身并不发光,由于光的照明才显现颜色。而物体表面的性状又影响它的颜色。物体表面色一般分为反射色和透射色两大类。根据它们的不同特性,进行颜色测量时的标准照明和观测条件也不同。大部分物体表面都属于混合反射,既有镜面反射成分,又有漫反射成分,而其中只有漫反射部分的通量才构成色刺激,对色度有贡献。

颜色是个心理、生理和物理量。所有的物体颜色不论是发光色或表面色,都有三个共同的特性,又叫颜色的三属性:色调、明度和彩度。

<1>色调表示红、黄、绿、蓝、紫等颜色特性色调是区分颜色的重要特性。

<2>明度表示物体表面相对明暗的特性,明度与光亮度成正比,明度与反射比成正比,即光亮度越高明度越高,物体表面反射比越高明度越高。

<3>饱和度表示颜色的纯度,即具有相同明度值的颜色离开中性灰色的程度。

用物理量值来表示颜色,以及采用仪器对颜色进行测量的方法,都是以人眼色觉的实验规律为基础的。利用均匀颜色空间的三维空间概念,可以通过公式计算两个颜色在知觉上的颜色差异△E,即在色空间中两个颜色点之间的距离。色差△E具有重要的工业意义,比如印染行业,为了定量评价产品颜色质量,人们总是希望能够用一个简单的量值来衡量色差,但由于颜色的特性,决定了它必须用颜色三属性来综合评价。均匀色空间的建立,使得用仪器测量颜色和视觉色差紧密相连。国际标准使用CIE色度系统来表示:

<1>CIE Luv色差公式:

机器学习图像处理 图像处理,机器视觉_计算机视觉_08


<2>CIE Lab色差公式:

机器学习图像处理 图像处理,机器视觉_机器学习图像处理_09


CIE Luv可能是表达具有均匀色品图的空间的最好系统,它不太可能被另一空间系统所取代。而CMC公式是在CIE Lab的基础上,一种更复杂的色差公式,在印染工业中已经显示出对小色差可以提供比CIE Lab公式更好的相关性。CMC色差计算公式为:

机器学习图像处理 图像处理,机器视觉_机器学习图像处理_10


任何一个颜色的三刺激值X、Y、Z测量和计算,都必须在特定的条件下进行。物体表面色是由物体对光的反射、透射和吸收等的选择性、照明光源的光谱功率分布和观察者的色觉特性所决定的。在需要计算色差时,无论采用哪个颜色系统,都要求相对参考白色,一般是用特定光源照明下的完全漫射体,或者是指定的白色或高透射物体。

工业上获得三刺激值的方法主要有如2种:光谱光度测量法、色度计法。光谱光度法测量先得到光谱反射因数,然后根据色度学公式计算三刺激值和色品坐标,测量准确可靠,被各个国家作为标准测量方法。色度计结构简单,操作简单实用,其测量准确度依赖于色度计对色匹配函数的匹配程度,其要求仪器必须满足Luther条件:

机器学习图像处理 图像处理,机器视觉_图像处理_11


但实际情况是没有一种仪器能100%满足卢瑟条件,都只能是近似满足,所以其测量精度不高。

由于只有物体表面对光的漫反射成分对色度有贡献,因此在测量颜色时,专业仪器都会严格要求照明光源、照明距离、照明直径,从而避免光污染。另外相机在拍摄时,主要考虑的是成像效果,而不是人眼感受,因此其对于三原色的响应频率曲线与人眼有很大差别,为此还需要关闭相机的各种数据功能(白平衡、增益),并对相机的成像结果进行数值校正。

机器学习图像处理 图像处理,机器视觉_机器视觉_12


另外彩色相机与黑白相机相比,其成像结果对温度变化更敏感,因此,你还需考虑如何消除相机的温升,以避免成像结果发生漂移。

到此你可以理解了,跟测量亮度一样,由于测量颜色对照明和光路系统的严格要求,以及相机本身的工作原理,你也无法说明,通过相机和算法的处理结果是测量的颜色值。如果必须要测量亮度,建议使用分光测色仪或色差计进行测量。

工业相机的测量量到底哪个是准的
在测试技术领域,测量的准确度是个相对概念,世界上的所有测量都有误差。所以这里的测量量准是指测量值变化呈线性,且误差相机较小。
工业相机能提供测量量包括:
<1>分辨率;
<2>像元大小和间距;
<3>帧率;
<4>曝光时间;
<5>感光成像输出值。
分辨率和像元大小及间距,由于是人工精密加工制造的,这两个量符合准的定义。但由于成像结果还受到镜头的影响,要想使拍摄的图像在长度测量上保持准,最好搭配高精度的双远心镜头使用。
而对于帧率和曝光时间,其受到硬件电路和软件程序的共同控制。如果单纯依靠软件触发的话,无论采用哪种采集模式,其都会存在时间抖动。好在如果采用外部硬件触发,其也是可以符合准的定义的。至于感光成像输出值,我们已经从前面两个问题获知,其都不满足线性变化的条件。
另外,相机成像最终还要通过软件进行处理,为此还要注意处理器芯片、操作系统、自编写程序的影响。如果要保证高准确度,则还必须使用多核处理器和实时操作系统
基于以上情况,你可以了解为什么多数机器视觉应用都是定性判断,而定量判断的机器视觉应用难度会很大。而且对于定量的机器视觉应用,也都是利用图像中的像素数,而不是像素值来进行测量的了。

是不是机器视觉的测量精度就提不上去

当然不是,看看基恩士推出的各种传感器的指标,你就知道在精密测量领域,基于机器视觉反而最主要的技术手段。另外,高精度测量表面质量的白光干涉仪,流体测速的激光散斑测速仪,用于精密分析的三维电子显微镜,这些都是机器视觉系统。

机器学习图像处理 图像处理,机器视觉_机器学习图像处理_13


机器学习图像处理 图像处理,机器视觉_计算机视觉_14


只不过要想使用机器视觉进行高精度测量,一方面对测量环境有要求;另一方面不能只依靠软件算法,更多的需要光学系统和机械系统来进行加持。具体的测量精度还与测量方法原理和目标大小有关。

参考资料:
《机器视觉算法与应用》,清华大学出版社
《Handbook of Machine and Computer Vision——The Guide for Developers and Users》,Alexander Hornberg,Wiley
《数字光学测量技术和应用》,国防工业出版社
《为你点歪技能树:亮度测量的基本原理和HDR亮度测量》,https://zhuanlan.zhihu.com/p/36896863
《KEYENCE产品综合目录》