1、项目背景
在机器视觉实际工程实践中,有时使用NI Vision定义的默认坐标系进行测量控制并不是很直接。例如,检测目标并不总在固定的位置出现,而是在ROI区域内平移或旋转,甚至有些时候必须通过平移、旋转工作面上的检测目标或通过移动相机,对部件上的几个不同部位分别进行检测才能完成任务。
这样进行图像识别、处理是非常麻烦的,此时就需要对图像进行坐标校准。
使用机器视觉系统进行测控时,各种计算结果都需要基于坐标系来表示。平面坐标系可以使用坐标原点(Original)、横轴的角度(Angle)以及纵轴的方向(Axis Direction)来表示。
当使用NI Vision提供的VI对所建立的机器视觉系统进行校准后,所得到的像素和世界坐标之间的映射关系是建立在默认校准坐标系基础之上的。默认情况下NI Vision的系统校准VI按照以下原则定义校准坐标系:
1、坐标原点。若手工输入一系列校准点,则坐标原点被置于用户定义的坐标原点,通常是两个方向上坐标值均为最小的点中心。若使用校准点阵,则以左上角点中心为坐标原点;
2、横轴的角度为0。亦即横轴由点阵首行各点确定的矢量而定;
3、纵轴的方向为间接方向(Indirect)。纵轴方向与笛卡儿直角坐标系的纵轴方向(Direct)相反。
下图给出了NI Vision确定默认坐标系的示意图,其中左图为校准点阵的世界坐标系,右图为某种可能的图像像素坐标系:
举个例子,下图中的3个工件在视场中分别位于不同的位置并且有旋转。为了能准确测量小孔的位置和大小,可以对每个工件自动检测其左边缘和上边缘,并以它们的交点为坐标原点,以上边缘为x轴,定义间接类型的坐标系。这样一来,虽然每个工件在视场中的位置不同,但合格工件中的小孔相对于每个自动定义的坐标系位置具有一致性。如果机器视觉算法相对于每个自定义的坐标系放置检测小孔的ROI,无论工件如何在视场中变化,都能实现自动检测,直接返回测量结果。
2、坐标校准原理
机器视觉系统实现坐标校准有3种方法:
1、角度法
角度法适合没有畸变且新坐标原点仍位于图像中的机器视觉系统,它通过设定新坐标系的坐标原点、横轴与原坐标系横轴之间的旋转角以及新坐标系纵轴的方向来设置新坐标,如下图所示:
2、双点法
双点法适合有畸变且可以直接从图像中确定新坐标原点位置的机器视觉系统。它通过指定新坐标原点和一个位于坐标系横轴正方向上的点以及坐标系的类型(直接或间接)来设定新坐标系。坐标原点和横坐标上的点所构成的直线与图像水平方向的夹角指明了新坐标系的旋转角。
例如,下图中A、B两点确定了坐标系的横轴,且A点为坐标原点。由于坐标系为间接类型,因此,Y'轴与X'轴夹角为270°。由于在畸变的系统中,当被测目标沿着水平或垂直方向移动时,仍能相对准确地确定其上的边缘,而基于两个边缘点就可以确定稳定的坐标系,所以这种方法比角度法对畸变系统有更强的适应性。
3、三点法
有时候机器视觉系统不仅有畸变,而且被测目标还会在图像中平移、旋转。这种情况下可以使用多点法来设置新坐标系。多点法先使用两个点确定一条坐标轴及其方向,但并不将这两点中的一点作为坐标原点,而是用第三点与前两点所成直线的垂直交点来确定坐标原点。获得坐标原点后,再基于坐标系的类型,就可确定另一坐标轴,如下图所示:
举个例子,下图中(左图)的坐标系以标尺1cm处的点为原点,7cm处的两点作为横轴正方向上的一点来确定坐标系横轴。由于指定坐标系的纵轴为间接方向,因此坐标系位置可以被唯一确定。在右图中很难直接找到合适的坐标原点,因此先检测左侧和顶端的目标边缘,随后用顶端边缘线段的起止点AB确定横轴,而左侧边缘中的C点或D点与横轴的垂直交点O为原点,最后根据纵轴的方向就可以唯一确定坐标系。
3、坐标校准方法
Nl Vision使用IMAQ Set Calibration Axis Info 2函数为图像重新设置坐标系。该函数位于LabVIEW的视觉与运动→Vision Utilities→Calibration函数选板中,如下图所示:
函数说明及使用可参见帮助手册:
NI Vision使用位于视觉与运动→Machine Vision→Analytic Geometry函数选板中的IMAQ Build CoordSys(Points)封装了双点法和三点法,开发时可直接根据目标上的特征点,调用该VI来确定参考或测量坐标系,如下图所示:
具体使用可参见帮助手册。
4、环境搭建
基础环境搭建请参见:LabVIEW软件、驱动安装及编程方法(理论篇—2)
除此之外,还需要安装:OpenG Libraries驱动,OpenG库是由OpenG社区创建并根据BSD-3-Clause许可证(获得Open Source Initiative批准)共享的数百个开源VI的集合。
可直接在VI Package Manage中进行安装,如下所示:
5、项目实践
接下来根据过孔和PCB边角实现下图PCB电路板坐标定位,达到无论在任何角度,均可定位PCB的效果。
程序设计思路如下:
程序一开始先使用IMAQ Create分别在内存中为电路板一个角的模板图像(对应corner.png图像文件)、电路板上的小孔模板图像(对应hole.png图像文件)以及应用程序处理过程中需要的临时缓冲分配空间,并由IMAQ ReadFile把相应图像文件中的数据读入内存。
紧接着使用IMAQ Learn Pattern 4对两个模板的特征进行学习。由于Angle Range参数被设置为0~360°,因此,无论目标图像在平面上旋转多少度,函数都能按照学习到的特征准确地将模板与目标匹配。
IMAQ Set Simple Calibration 2以从文件Roundcard01.tif中读入的图像为模板,指定了纵横两个方向上像素间距分别代表世界坐标中的0.15mm。当然,此时假定相机垂直于观测目标,且镜头畸变可忽略不计。
一旦上述准备工作就绪,For循环就逐一对roundcard文件夹中的各个文件所保存的目标图像进行分析。在读入目标图像后,IMAQ Match Pattern 4会先根据学习到的特征匹配电路板的一角。Parameters参数指定了匹配时只需要找到一个目标,且假定目标图像相对模板来说只在±45°范围内旋转。找到电路板一角后,OverlayPatternMatchingResults会在目标图像中标注出所匹配到的电路板一角的中心,并用矩形无损图层框出匹配结果。
为了能在后续测试过程中,无论图像在视场中做何变化,都能直接得到电路板小孔相对于其一角的距离,需要重新设置以电路板一角为参照的系统校准坐标系。IMAQ Set Calibration Info将之前基于RoundCard01.tif中的图像设置的校准信息应用到For循环正在处理的目标图像中。IMAQ Set Calibration Axis Info用来重新指定校准坐标系。新的坐标系原点设定在所匹配到的电路板一角中心处。x轴旋转角度由模板匹配过程中,识别到的目标图像旋转角度确定。需要注意的是,当坐标系纵轴设定为直接坐标方向时,x轴相对于默认坐标系纵横的旋转角度为负值,反之为正值。
设定好新的校准坐标系和校准信息后,就可以使用IMAQ Match Pattern 4匹配需要在电路板上寻找的小孔位置。与之前匹配电路板一角的情况类似,当匹配过程找到小孔的位置后,Overlay Coordinate System和Overlay Pattern Matching Results将在图像中绘制新定义的坐标系纵轴和横轴,标记出小孔的位置并框出对小孔的匹配结果。一旦得到小孔在图像中的位置,就可以依据校准信息和像素坐标计算得到小孔在校准坐标系中的世界坐标。这一工作由IMAQ Convert Pixel to Real World来完成。
程序实现如下所示:
下面显示了对几个目标图像进行检测时的图像显示情况,以及某一目标图像中测量得到的小孔像素位置坐标和其在校准坐标系中的世界坐标。