2.2 智能相机

传统的机器视觉系统是分体式的,也就是相机主要是完成图像采集功能,然后把图像传输到上位机,由上位机来完成图像的算法处理。整体系统检测精度高、运算速度快,可以实现复杂的算法,但是其具有系统结构复杂,成本高、外形尺寸大,系统的开发周期长等不利因素。随着集成电路技术的发展,运算处理速度更快的DSP、FPGA等芯片的应用,以及大容量存储技术的发展,使得嵌入式产品得到快速发展,在机器视觉领域,嵌入式视觉系统逐渐代替传统分体式的机器视觉系统,开始向集成化、微型化、模块化方向发展,因此,就出现了智能相机。

智能相机不但能够获取图像,同时还能够描述和分析它们所“看”到的图像,因此被广泛应用于检测、监视和运动分析等领域。随着对实时图像处理需求的不断增长,智能相机被集成到各种应用中以提供低费用、低能耗的系统,这些系统不但能够完成图像的处理和压缩,还能够运行大量的算法以便从视频流中提取有用的信息。智能相机的特点是能够提高生产制造的柔性和自动化程度。智能相机的出现,弥补了PC的机器视觉系统的不足。首先,工业智能相机的优势主要体现在系统集成和使用的方便性上,客户不需要懂得图像处理方面的知识,就可以进行操作。其次,随着计算机技术和微电子技术的迅速发展,嵌入式系统应用领域越来越广泛,尤其是其具备低功耗技术的特点得到人们的重视。随着专用的数字处理芯片(DSP)和CPLD/FPGA的性能的不断提高、体积的不断减小、能耗的不断降低,使得智能相机的性能在不断增加的同时,体积在不断的减小,硬件处理能力的不断提高等因素,使得工程师们得以采用更先进的视觉算法,解决复杂的视觉问题。最后,自动化应用的需求也逐渐引导着机器视觉系统从传统的基于PC的板卡式产品向采集、分析、判断一体化的嵌入式系统的方向发展,基于嵌入式的产品将逐渐取代板卡式产品。嵌入式操作系统绝大部分是以C语言为基础的,使用C语言进行嵌入式系统开发是一项带有基础性的工作,可以提高工作效率,缩短开发周期,更主要的是开发出的产品可靠性高、可维护性好、便于不断完善和升级换代等。所以,工业智能相机有更好发展空间。

智能相机是机器视觉技术的与智能设备发展的结合,由于其易用、易安装,用户操作简单方便,得到了迅速的发展。视觉的产业链迅速兴起,从处理芯片,图像传感器芯片,到视觉平台、应用方案设计,形成了一个完整的产业链。美国Cognex公司是目前世界排名第一的机器视觉供应商,专业提供现代化企业生产,控制的所有视觉产品。从产品源头挑选,测量,识别到设备的定位,Cognex基本是无所不能。Cognex的产品包括了智能相机的各个方面,典型的产品列举如下。

In-Sight系列智能相机机型:具有处理功能的智能摄像头,体积小巧,整机大小只有30mm×30mm×60mm。

VisionPro可视化图像处理软件:将图像处理的复杂算法过程变成图形框架的形式,使得算法移植的难度下降。适合各种生产线检测设备视觉化的推广。

VisionView交互显示控制器:智能相机的小型化使得对相机的现场控制与图像的可视化能力下降。VisionView作为一个补充,实现智能相机的可视化与人机交互。

在国外,机器视觉的行业应用已经相对成熟,主要体现在半导体及电子行业,其中40%~50%都集中在半导体行业。具体如PCB印制电路、电子封装技术、SMT表面贴装等。机器视觉系统还在质量检测的各个方面得到了广泛的应用,并且其产品在应用中占据着举足轻重的地位。除此之外,机器视觉还用于其他各个领域。而在中国,半导体等行业本身就属于新兴的领域,再加之机器视觉产品技术的普及不够,导致以上各行业的应用几乎空白,即便是有,也只是低端方面的应用。近几年来,随着相关配套基础建设的完善,技术、资金的积累,在“中国制造2025”的浪潮下,国内各行各业对采用图像和机器视觉技术的工业自动化、智能化需求开始广泛出现,国内有关研究所和企业近两年在图像和机器视觉技术领域进行了积极思索和大胆的尝试,逐步开始了工业方面的应用。其主要应用于制药、印刷、矿泉水瓶盖检测等领域。这些应用大多是一些检测类的机器。真正高端的应用还很少,因此,以上相关行业的应用空间还比较大。

2.2.1 智能相机的硬件接口

智能相机是一种高度集成化的微小型机器视觉系统。它将图像的采集、处理与通信功能集成于单一相机内,从而提供了具有多功能、模块化、高可靠性、易于实现的机器视觉解决方案。同时,由于应用了最新的DSP、FPGA及大容量存储技术,其智能化程度不断提高,可满足多种机器视觉的应用需求。智能相机的硬件接口如图2-4所示,其功能见表2-2。

图2-4 硬件接口

表2-2 硬件接口功能

智能相机在初始状态只有一个相机本体,其他配件(如镜头等)需要用户自己安装。光源、连接电缆等需要根据用户需求,选择合适的种类。

康耐视In-Sight智能相机系列中有多种相机。应根据生产实际,选择满足性能并节约成本的相机。本文以Is micro1403为例作出说明。根据通信方式、外部I/O信号等,选择不同的接线方式。In-Sight Micro系列相机视觉系统的PoE连接器为网络通信提供以太网连接并为视觉系统提供电源。

在Is7000中,为传感器供电的电源线与I/O线合并在一起。在使用以太网通信时,电源与I/O线,只需要接电源线。其中红色线接+24V,黑色线接Common端。I/O线使用绝缘胶布封好。以太网接口接以太网电缆,电缆的另一头接交换机或者PC,见图2-5。

图2-5 Is7000系列

PoE以太网供电模块,能够实现对设备供电的同时完成信息传输,其接口如图2-6所示。

图2-6 PoE接口

2.2.2 智能相机编程软件

(1)In-Sight Explorer软件安装

In-Sight Explorer安装后,为了使用模拟功能,需要去官方网址下载密钥。

选择“系统”|“选项”,打开“选项”对话框,选择“仿真”。单击“帮助”,进入帮助文档。单击“Offline Program Key”连接进入网站,填写相关信息,获得密钥,将密钥粘贴至对话框中即可,见图2-7。

图2-7 模拟设置

(2)In-Sight Explorer编程环境

In-Sight智能视觉系统采用的编程软件为In-Sight Explorer,如图2-8所示。In-Sight Explorer软件的编程方式有2种,分别为EasyBuilder和电子表格。

图2-8 In-Sight Explorer

电子表格相比于EasyBuilder,编程更加直观,可以灵活运用各种视觉函数,实现目标工程,见图2-9。

图2-9 电子表格

在电子表格的编程环境下,常常需要用到各类视觉函数。可以从“查看”菜单下调出“选择板”,将视觉函数显示在软件的右侧。需要使用时,直接拖拽至目标的表格处,见图2-10。

图2-10 函数选择板

In-Sight Explorer中的视觉函数主要分为以下几类:

视觉工具:用于放置处理图像用的视觉函数以及图像特征的进一步数据分析和提取,如查找边、检测瑕疵,寻找点等。

几何函数:指存放方便程序员计算几何结构之间的距离的相关函数,如点、线段等。

图形函数:用于程序员自由定义的操作区域,还包括一些开关、按钮类的函数。

数学函数:包括常用的数学计算函数。

文本函数:在电子表格上显示字符串、字母、数字等,可以用于视觉传感器与其他设备之间的通信。

坐标变换:转换图像与世界坐标之间的位置关系,补偿因畸变产生的图像变形等。

输入/输出:存放视觉传感器与其他设备通信函数。

视觉数据访问:存放访问图像处理相关数据的函数信息。

结构:一些点、线、区域的相关函数。

传感器添加:计算机与智能相机之间的通信方式采用以太网通信。在使用前,需要将传感器添加到网络中。电脑的IP地址要和智能相机的IP地址处在同一个字段内。然后打开添加传感器对话框,将设备添加至编程软件中,见图2-11。

图2-11 添加传感器

在“网络设置”中智能相机的“网络设置”对话框中,可以输入视觉设备的IP地址以及默认网关等。在使用以太网通信时,可以选择多种通信协议。例如:在与三菱的PLC等设备通信时,可以选择SLMP/MC协议。每一次更改网络通信协议时,需要重启传感器,见图2-12。

图2-12 网络设置

下面介绍几种常用菜单工具,见图2-13。

图2-13 插入和图像选项

插入:用户插入各类函数到表格中,也可以插入多个单元格之间的相互依赖关系。如需要将A13中的数据引用到B18中,这时,可以插入引用关系。将A13中的数据引用的B18中,引用的是单元格中的数据,包括字符串、函数、符号标记等。

绝对引用:插入的引用关系的单元格的位置是绝对的,即使引用的单元格位置发生变化,被引用单元格也不会发生变化。

相对引用:插入的引用关系为单元格的相对位置。如果引用单元格位置发生变化,那么被引用单元格会变成相对于变化后引用单元格的位置。

在视觉传感器离线状态下,才能够手动获取图像。图像的获取可以从外部导入,即从“文件”中“打开图像”。实时图像则可以从实况视频中获取,单击“实况视频”,相机会变成摄像机模式,可以调整视野下物体的位置、灯光效果等。在此处单击时,将会拍摄最后一刻的图像,也可以用触发器拍摄,触发一次,拍摄一张图像。

在调节光源时,将图像饱和度打开,这时如果图像出现红色,说明光线在红色区域太强,蓝色则表示光线在此区域太弱。

当视觉传感器的程序已经完成并保存至传感器中、视觉传感器单独使用时,由于没有计算机连接智能相机,所以需要设置传感器的初始启动选项。初始启动选项在“传感器”菜单下的“启动”选项中,需要选择是否“联机”,即是否在线,还需要选择启动作业的名称,见图2-14。

图2-14 启动选项

联机选项是用于将视觉传感器置于在线的按钮,联机分为3个独立部分,见图2-15。分别为手动的GUI在线、通信设备在线、I/O串口在线。只要任何一部分不在线,视觉传感器均不会处于在线状态。若通信设备冲突导致离线则会显示“Comms Online?”,若I/O串口冲突导致离线则会显示“Discrete Online?”。

图2-15 联机

(3)相机校准

基本流程:新建→校准→视觉工具选择→数据处理与传输。

在相机使用前,一般需要针对不同的环境,求解相机的成像畸变以及像素世界坐标变换的参数。在不考虑成像畸变的情况下,以小孔透视成像模型为理想模型,求解相机的内外参数矩阵。

如图2-16所示,O-UV为像素坐标系,od-xdyd为图像物理坐标系。Ow-XwYwZw为世界坐标系。Oc-XcYcZc为摄像机坐标系。

图2-16 小孔成像几何模型

Pxuyu)为Pw在成像平面的成像点。

Pw在图像物理坐标系的坐标为:

在像素坐标系下为:

u=sxxu+u0v=syyu+v0  (2-2)

式中,sxsy为单位距离的像素数;(u0v0)为光轴与图像平面的交点,即od所在位置。

由式(2-1)和式(2-2)式可得:

由于存在制造误差,像素点可能发生畸变。当像素点是矩形时,α=0,见图2-17。

图2-17 像素点倾斜角

摄像机的内部参数为:

从世界坐标系到摄像机坐标系的齐次变换为[RT],R为旋转矩阵,T为平移矩阵。则从世界坐标系到图像坐标系的变换关系如下:

实际上由于摄像机光学系统并不是精确地按理想化的小孔成像原理工作,存在透视畸变。主要有径向畸变和切向畸变,径向畸变来自于透镜形状,而切向畸变则来自于整个摄像机的组装过程。

径向畸变主要来源于镜头形状缺陷,关于主光轴对称:

式中,r2=x2+y2kii=1,2,3,…)。

切向畸变主要是光学中心与几何中心不一致:

将像素坐标系转换到世界坐标系,校正图像的畸变时使用。校准使用的函数为Calibrate以及CalibrateAdvanced,用于转换像素坐标和世界坐标的位置关系。Calibrate采用4个对应点计算变化关系;CalibrateAdvanced采用4~32个点计算变化关系,对应点越多,变换越准确。CalibrateGrid用于相机的内部纠正。主要纠正由于相机小孔成像产生的畸变。CalibrateImage是使用CalibrateGrid计算出来的变换关系,校准原始图像,生成校准后的图像,见图2-18。

图2-18 校准图案

将CalibrateGrid函数插入单元格中,在设置对话框中,选择不带基准的网格点校准图像。也可以用带基准的网格点和方格图案来校准。在姿势对话框下,选择实况视频,将打印好的网格点放到相机视野下。放置时,行列与相机视野基本平行。调整好需要校准的区域,拍摄图像。单击“原点”,设置网格图像的原点位置,然后依次设置图像的XY轴。然后单击“校准”按钮,此时将显示校准结果、图像点与理论点的误差,并在表格中生成校准算子,见图2-19。

图2-19 校准

插入CalibrateImage函数,图像栏绝对引用拍摄的原始图像,校准栏绝对引用CalibrateGrid函数所在单元格。校准结果在电子表格中如图2-20所示。所有函数处理的图像针对校准完的图像,而不是原始图像。

图2-20 校准图像

坐标变换是使用Calibrate以及CalibrateAdvanced函数,采用4点或4~32点来计算变换矩阵,需要寻找像素坐标与世界坐标的对应点,见图2-21。

图2-21 坐标变换

(4)零件识别视觉编程实例

视觉工具主要包括以下几种。

ID:检查识别条形码。

InspectEdge:检测图像中特征的相关参数,如检查边、宽度等。

OCV/OCR:识别文本、字符串等。

斑点:识别斑点图像。

边:查找边特征,如圆边,边对等。

图案匹配:识别图案特征。

图像:对输入图像处理,如增强图像,减少干扰等。

瑕疵检测:使用模式匹配查找图像中的缺陷。

直方图:绘制处理图像的灰度直方图。

以图案匹配为例,具体说明视觉工具对话框中的各个选项。

图像栏为需要处理的图像,一般引用校准完的图像。固定选项为在视野中放置视觉工具的位置。图案区域为需要提取图案的区域,在此处可以引用外部区域,即先使用控件中的函数“EditRegion”建立区域范围,然后引用至“TrainPatMaxPattern”中。此时,只需要改变外部区域就能改变提取范围。如果引用外部区域,那么图案区域将被禁用。图案原点用于设置图案中原点相对于图案质心的偏移量。图案设置中的算法包含PatMax和PatQuick两种。PatMax的匹配精度高,能够显示查找是的特征效果,但是需要的计算时间较多。PatQuick需要的时间短,运行速度快。灵活性是容许的周长偏差。忽略极性是忽略像素变化的趋势。粗糙粒度与精细粒度配合使用,调整训练图案的提取效果。重复训练图像是保存训练的图案,在修改图案设置时使用保存的图像。

当训练完需要查找的目标图案后,需要使用“FindPatMaxPattern”函数来与“TrainPatMaxPattern”配合使用。其中图像等与“TrainPatMaxPattern”中相同。图案选项中引用需要查找的图案。外部区域设定为查找的区域范围。依次填写“要查找的数量”,“接受”的分值以及“对比度”等。在查找到目标图案时,会将查找的图案与训练图案作比较,给出查找图案的得分值。查找公差中需要设定查找的角度、缩放比例等,见图2-22。

图2-22 训练图案和查找图案

数据处理与传输:数据处理与正常的电子表格相同,可以使用四则运算等。数据传输依据设备、方式的不同可以选择多种传输方式。使用以太网传输时,依据通信协议的不同,传输方式也不同。

在与机器人通信时,需要插入符号标记,符号标记可以是任意字符串。如果符号标记是“Job.Robot.FormatString”,在机器人程序编写时,可以省略中间的符号标记。

例2-1 完整的操作步骤如下:打开软件In-Sight Explorer软件,设置传感器网络,输入IP地址192.168.1.23,重启传感器。将电脑的IP地址设置为192.168.1.11,将传感器添加至网络,连接视觉传感器,如图2-23所示。将编程界面切换至电子表格,并新建作业。

图2-23 传感器

插入校准函数CalibrateGrid,使用实况视频将校准的标准点图在视野中放好,拍摄图像,见图2-24。

图2-24 校准点图

打开函数CalibrateGrid对话框,依次设置网格类型为“点不带基准”。网格间距为默认间距即可。

在姿势对话框中,调整校准区域为整个视野。单击“选择原点”按钮,在点图中选择中央的点作为原点,单击“确定”。选择原点下的一点为X轴,原点左边的相邻点为Y轴,单击“校准”按钮,见图2-25。

图2-25 姿势设置

校准结果如图2-26所示。结果中将显示参与校准的“特征点总数”“平均错误数”“最大错误数”,当校准的效果不好使,调节关照条件可以提高校准效果。

图2-26 校准结果

插入图像转换函数“CalibrateImage”,校准的对象为原始图像,校准的工具为之前设置好的“CalibrateGrid”工具。单击“确定”按钮,生成图像文件。即为校准后的图像,此后使用的图像均为生成的图像,见图2-27。

图2-27 校准图像

插入坐标变换函数“Calibrate”,出现图2-28所示对话框。一共需要输入4对像素点和世界坐标点。在查找具体的像素点位置时,可以采用如图2-29所示的形状。采用查找圆边函数“FindCircle”函数,通过查找远的中心来确认像素坐标值。世界坐标中,将机器人移动到对应点,读取坐标值。单击“确定”按钮,将会生成一个坐标变换的算子,将在后面坐标变换时使用。

图2-28 坐标变换

图2-29 坐标变换

插入图案训练函数“TrainPatMaxPattern”,在弹出的对话框中,引用的图像为“CalibrateImage”校准后的图像。图像区域如图2-30所示。选择一个角点和一个孔作为特征。调整精细粒度与粗糙粒度,使图案特征如图中绿色所示。在电子表格的单元格中,将生成图案模型文件,数量为1,见图2-31。

图2-30 区域选择

图2-31 训练图案

插入查找图案函数“FindPatMaxPattern”,图像选择“CalibrateImage”校准后的图像。函数的原点为默认原点,查找区域如图2-32所示。图案选择为“TrainPatMaxPattern”训练好的图案。接受的分数设置为60。对比度为30。查找的角度范围为-90°~+90°。在电子表格中生成的文件包括一个图案查找函数,同时还会生成查找到的图案的个数,在像素坐标系中的行坐标、列坐标,与训练模型之间的偏转角度,缩放比例以及得分值。在查找选项查找数量栏中,设置的数量不同,生成的行数和查找数量也相同,每一行的信息为其中一个图案。得分越高,排序越靠前。

图2-32 图案查找

插入函数“TrainsPatternToWorld”,引用校准算子为“Calibrate”生成的算子。图案选查找到的图案,即上一步中所使用的函数。将“FindPatMaxPattern”所得到的像素坐标转换为世界坐标,见图2-33。

图2-33 坐标转换

此时,模板图案特征建立完成。机械手将以这时图案所在的位置为标准抓取位置,通过偏差的方式来寻找工件的精确位置。

插入“图形”|“控件”中的控制函数“CheckBox”,插入有效/无效选项,见图2-34。将单元格A12、A14、A17中的函数选中,右击选中单元格状态。选择“有条件地启用”“绝对”引用,单元格选择刚才的控制元件单元格。当在“CheckBox”中打勾时,A12(TrainPatMaxPattern)、A14(FindPatMaxPattern)及A17(TrainsPatternToWorld)3个函数可以编辑(图2-34单元格)。否则将处于冻结状态,只能使用其中的数据,但是不能更改任何设置,见图2-35。

图2-34 单元格禁用

图2-35 单元格状态设置

再次插入“TrainsPatternToWorld”和“FindPatMaxPattern”函数,将“TrainsPatternToWorld”得到的数据中行、列和角度与模板中的“TrainsPatternToWorld”函数的行、列和角度对应相减。使用传输字符串的函数“Stringf”将字符串传送给机器人,见图2-36。在传输数据的单元格中还需要插入符号标记,使之能够被机器人所识别,见图2-37。

图2-36 传输数据

图2-37 插入符号标记

将完成的数据保存至视觉传感器中,然后选择在线选项,并在“传感器”菜单下的“启动”选项中,设置当前作业为初始启动作业,见图2-38。

图2-38 保存

重新放置零件,拍摄图像,结果如图2-39、图2-40所示。

图2-39 结果

图2-40 坐标变换

(5)尺寸测量视觉编程实例

依据上例,完成新建作业、校准相机等步骤。在提取边时,需要排除噪声的干扰,平滑图像。先插入NeighborFlter()函数,选择闭合算法,填补图像中的间隙,平滑图像边缘,见图2-41。再插入PointFilter()函数,选择“二元化”,在图像选择之前,要处理好平滑图像,得到如图2-42所示效果。

图2-41 闭合-二值化

图2-42 闭合效果-二值化效果

插入2个FindLine()函数。将区域分别选择在如图2-43所示的位置。

图2-43 区域选择

“图像”选择处理好的二值图像,“角度范围”调整至10,将得到2个边的起始点与结束点坐标,见图2-44。在空白单元格中插入求取平均数函数Mean(Value0,Value1,…),求其中一条直线的中点位置。使用PoltPoint()函数,分别引用计算平均数值的2个函数所在单元格,如图2-45所示。

图2-44 查找直线

图2-45 绘制中点

最后插入函数PointToLine()函数,计算中点到另一条直线的最短距离,见图2-46。在函数中,点坐标为前面计算的点的坐标,直线坐标为查找到的第二条直线的起始点与最终点。分别将坐标双击引用时函数对话框中。引用关系如图2-47所示,最后将坐标从像素坐标转化为实际坐标。

图2-46 两条边距离

图2-47 函数关系引用图

分别将之前提取的像素点以及像素直线转化为世界坐标,使用PointToLine()函数计算实际距离。