二、 扫描区域划分
根据仪表盘的尺寸、目标特征的相关性和视觉系统FOV的范围,将仪表盘划分为左、中、右3个检测区域。加上起始位置共有4个位置。摄像机在X/Z轴上运动,被测仪表盘在Y轴上运动,X/Y轴的运动完成镜头对目标的对准,Z轴的运动完成对目标的聚焦。在每个检测位置采集的图像分别以中间的LED窗口即AUTO LED、OFF LED、Defrost LED的中心为该幅图像的坐标原点。
三、 系统总体结构设计
以计算机系统来完成图像的采集、处理、判断、文件I/O和用户使用界面,同时作为上位计算机通过串口对PLC进行控制;以PLC系统来完成运动控制、I/O控制。计算机系统的框图如下:
上位链接的参数设置:波特率:115200; 7位数据位;偶校验;2位停止位。
PLC的系统框图如下:
通过计算机系统与PLC系统协同工作,各司其职,充分发挥各自的特长,使系统的性能得以优化。
四、 图像采集
NI提供两种标准的图像采集vi程序,用户可以直接调用:
1.单帧图像采集1394-snap-acquire:即每次只采集1帧图像。在本系统的全自动测量过程中,共有三个被测区域,每个区域又有三种照明模式,所以一共需要运行9次单帧图像采集程序。
2.连续图像采集1394-grab-acquire:即连续实时采集图像。在本系统的运动位置设置模块里,需要实时观测镜头与被测目标的相对位置及聚焦情况,然后保存各个位置,所以使用了连续图像采集模式。
五、 图像处理
如上所述,在全自动测量过程中,共采集9帧图像,每幅图像都对应一个图像处理程序,来完成对目标特征的测量和判断。步骤如下:
1.开辟图像缓冲区
在图像处理中,需要对图像做多次变换,因此需开辟多个图像缓冲区来存储图像数据。本系统中共设置100个图像缓冲区,即image buffer0~buffer99, 其中buffer0为系统实时图像缓冲区;buffer1~buffer51分别存储9帧图像的彩色原图、Intensity 图层、Red图层、Green图层、Blue图层、Mask图层、Overlay图层等作为历史图像数据,可以和测量结果数据相对照;其余为临时图像缓冲区,为避免与历史图像缓冲区发生冲突,从buffer99开始向下使用。本系统只使用了12个临时buffer, 即buffer99~ buffer88,buffer52~buffer87未使用。
2.定位原点并建立坐标系
选取图像上不发生变化的特征,使用Match Pattern 或Detect Object来定位原点并建立坐标系。三个检测区域分别以中间的LED窗口即AUTO LED、OFF LED、Defrost LED的中心为该幅图像的坐标原点。
3.定义ROI区域
根据被测目标不同的形状,可以使用不同的ROI模型,包括圆形、环形、扇形、矩形、旋转矩形、任意多边形等。所有ROI区域都以坐标原点为参考点。
4. 测量
通过抽取彩色图像的Intensity plane、Red Plane、Green Plane、Blue Plan(均为8位深度的图像),对各目标ROI区域分别测量光强分量Intensity、颜色分量R/G/B、镭雕图案模式匹配分数、位置坐标等。
其中光强Intensity/R/G/B的范围为0~255,共256个灰阶。
图案模式匹配分数的满分为1000分,得分大小表示目标与标准模型的匹配程度。对三组字符除了做模式匹配测量还做了OCR字符识别,即需要分别识别出AUTO、ECON、OFF。
位置坐标需要进行坐标系变换。对于一幅图像来说,默认的坐标原点位于图像的左上角,测量的直接位置数据是相对于这个原点的,和我们在步骤2.中定义的原点位置不同,坐标系方向也不同。参考下图:
变换后的坐标仍是以像素为单位的,需要乘以像素精度pixel accuracy转化为mm单位,这样才对产品检验有意义。
5.结果输出界面
测量结果包括图像和数据,放在一个Table容器中。Table的第一个Page用来存放图像。图像以二维数组为容器,分为9行5列,存放45幅图像,包含9幅采集的图像和抽取的36幅分量图层。Table的第2~11共10个Page用来存放测量数据,分别以10张表格形式输出,分别对应9幅采集的图像的测量数据和重要特征的全局比较。每个Page上有一个布尔量显示控件,用于指示当前页面的综合判断结果。
图2 Middle area Function LED mode image |
以下仅给出中部检测图像和数据,请参考图2-图7
图3 Middle area Function mode measure data |
图4 Middle area Night mode image |
图5 Middle area Night mode measure data |
图6 Middle area Day mode measure data |
6.任务顺序的优化设计
在相邻的两次图像采集之间需要完成几项任务,包括图像处理、写全局变量、图像输出、测量结果输出、光源切换、位置运动等,这些任务的执行时间是不同的。优化这些任务的编排顺序可显著提高程序的执行速度。
采集图像前要求所有运动静止、光源稳定发光。由计算机向PLC发送运动触发信号和光源切换触发信号的指令完成时间是以10ms为数量级的,而图像
处理、图像输出、测量结果输出、写全局变量的完成时间是以100ms为数量级的。运动是否完成可通过读取PLC中的标志位来确定,但光源是否稳定发光,只能依赖上电后的延迟时间。我们的经验是LED光源从上电到稳定发光至少需要500ms的延时。在一个产品的测试中需要9次光源切换、4次位置运动。如果都用延时的方法,那么将大大降低检测速度。所以我们不是在图像采集后立刻对该幅图像处理,而是先为下一次图像采集做光源切换或运动触发,然后再对本次采集的图像做相对费时的图像处理等,相当于为光源切换或运动触发作了延时处理,但又不占用额外的时间开销。参考以下流程图:
7. Overlay的传递
Overlay是叠加在图像上的一个特殊的图层,用于显示ROI定义范围、坐标系定义和部分图像处理的信息。本系统中在同一位置采集的不同光源照明下的3幅图像,具有相同的坐标系和像素精度,不必每次都做同样的处理,只需将第一幅图像上的Overlay传递给其他两幅图像即可。利用我们编写的Overlay传递vi,可以抽取任意image buffer的Overlay并传递到指定的image buffer中。参考图2、图4、图6,每幅图像上的左上角红色方框内的原点坐标位置及像素精度的文字信息和图像中央位置的坐标系标志就是通过这种方法传递的。
8.ROI与Mask的组合应用
利用ROI来定义感兴趣区域,利用Mask可以屏蔽掉不感兴趣或者已测量过的区域,将ROI与Mask相结合可使一些复杂的测量变得简单而高效。图6中需要测量产品的外露面是否有划伤,经过ROI和Mask的组合,只需两步即可完成。参考图8、图9。
图8 Middle area Day mode mask1 |
图9 Middle area Day mode mask2 |
9.全局特征比较
在9个图像处理子程序中,部分测量数据需要进行全局比较,已评定产品
整体区域的发光亮度的一致性,因此需要在每个图像处理子程序中将关心的数据写入全局变量,最后在主程序中对这些全局变量进行处理,请参考图10。
图10 Global compare parameters |
六、文件I/O
包括公差设置、读取、测量数据存储,数据较多,因此采用表格文件方式,将数据分类以二维数组的形式存取。在图像处理程序中对测量数据判断时,只需读取公差设置相关的sub-array即可。测量数据存储的文件名中插入时间字符(精确到秒),以避免文件名重复。
七、上位链接和串口通讯
进行上位链接通讯时,计算机和PLC之间使用命令(command)和响应(response)进行发送和接收。一次通讯送出的一组数据称作一帧,送出帧的权限称为发送权。上位计算机持有发送权,命令发送后,响应由PLC自动返回。由于PLC的响应需要时间,因此在两次命令之间必须插入延时。帧的格式如下:
@|机器号|头码|正文|FCS|终端
FCS称为帧检查序列,把一帧的开始到FCS前面的数据进行逻辑异或的8位数据变成2个字符的ASCII码,主要用于检查数据错误。FCS的计算采用笔者以前用VB开发的程序,命令的传送使用LabVIEW中的Instrument I/O assistant直接向串口发送,十分简单。Instrument I/O assistant提供三种类型的命令,包括Write,Query and parse,Read and parse。
九、 结论
本项目软件预计开发时间为三个月,实际上不到两个月就完成了,目前机器运行十分稳定、高效,得到客户的赞誉。NI Vision丰富的图像处理功能和LabVIEW灵活易用的编程环境是我们获得成功的主要原因之一。
笔者以前主要使用VB和C++做程序开发,这次是第二次使用LabVIEW做项目。相比之下,LabVIEW图形化编程语言使程序员不必过分关注代码和函数格式,而是把主要精力放在功能设计和结构设计上,从而节省了宝贵的开发时间。此外,LabVIEW的帮助功能和大量的实例程序非常方便程序员的自学提高。总之,我们认为LabVIEW作为测试测量领域的首选开发平台是当之无愧的。