1、边干边学机器视觉图象采集部分下 边干边学机器视觉图象采集部分下 3.1 多缓冲区采集方式多缓冲区采集方式 从前面的章节中,我们学会了如何采集图象。在高速图象采集应用中,我们会发现前面的 Grab 方式会存在一个问题,即当图象采集速度非常高时,处理程序还来不及处理当前的图象,图象缓冲区里面的数据已经被新的图象数据所覆盖了。为了解决采集缓冲区不足的问题,我们很自然的想到一个解决方案增加图象采集缓冲区。NI-IMAQ 提供了两种多缓冲区的方式,一种是 Sequence,另一种是 Ring,如图 3.1 所示。图 3.1 多缓冲区图象采集方式 Sequence 和 Ring 都是多缓冲区图象采集方式,
2、它们的区别是,Sequence 是单次采集,而 Ring 是连续采集,类似 Snap 和 Grab。在 Ring 方式下,当一个 buffer 中的数据正在被处理时,新采集到的图象数据会更新到另外的 Buffer 中去。下面本文将依次介绍 Sequence 和 Ring 的实现方式。3.1.1 Sequence 图象采集图象采集方式方式 Sequence 图象采集方式由 IMAQ Sequence.vi 实现,如图 3.2 所示。图 3.2 IMAQ Sequence.vi IMAQ Sequence.vi 最重要的参数是 Images In,如图 3.3 所示。Images In 是一个图象
3、数据缓冲区引用数组,里面包含了多个由 IMAQ Create.vi 创建的图象数据缓冲区的引用。只边干边学机器视觉图象采集部分下 有知道多个图象数据缓冲区在哪里,IMAQ Sequence.vi 才能完成多缓冲区模式的图象采集。图 3.3 IMAQ Sequence.vi 参数 Sequence 图象采集方式的完整实现,大家可以参考范例程序中的 HL Sequence.vi,如图3.4 所示。第 1,4,5 步是大家熟悉的初始化图象采集卡,释放图象采集卡和释放图象缓冲区的程序。第 2 步是调用 IMAQ Create.vi 创建多个图象数据缓冲区,需要注意的是,多个图象数据缓冲区的名字必须不一
4、样。第 3 步是调用 IMAQ Sequence.vi 采集多帧图象数据,当指定数量的图象采集完毕后,IMAQ Sequence.vi 会返回并结束 Sequence 采集过程。图 3.4 HL Sequence.vi 3.1.2 Ring 图象采集方式图象采集方式 Ring 图象采集方式需要由三个 VI 来实现,它们分别是:,和。IMAQ Configure List.vi 完成缓冲区列表的配置,告诉驱动程序缓冲区的数量(Number of buffers),以连续还是单次的方式进行图象采集(Continuous?)以及缓冲区的位置(Memory Location)。边干边学机器视觉图象采集
5、部分下 IMAQ Configure Buffer.vi 把创建好的图象缓冲区分配到缓冲区列表的对应位置上。IMAQ Extract Buffer.vi 把采集到的图象从缓冲区中提取出来,为后续图象处理做准备。与上节思路相同,我们打开范例程序中的 LL Ring.vi,学习 Ring 图象采集方式的实现方法,如图 3.5 所示(由于文档宽度的关系,仅把关键部分代码进行截图分析,以下同)。图 3.5 LL Ring.vi 第一步,调用 IMAQ Configure List.vi 告诉驱动程序是以 Continuous 的方式进行图象采集,缓冲区的位置在 System就是开发应用程序的主机上。第
6、二步,调用 IMAQ Configure Buffer.vi 把创建好的图象缓冲区关联到缓冲区列表的对应位置上。第三步,调用 IMAQ Start.vi 开启一个图象采集的过程,需要注意的是,在调用 IMAQ Start.vi 前,必须调用 IMAQ Configure List.vi 和 IMAQ Configure Buffer.vi 来配置采集过程。第四步,调用 IMAQ Extract Buffer.vi 从缓冲区中把图象提取出来。第五步,把 IMAQ Extract Buffer.vi 的 Buffer to Exact 参数设置为-1 表示释放当前被提取的缓冲区。IMAQ Extr
7、act Buffer.vi 在提取图象数据时会对当前被提取的缓冲区进行保护,所以当采集过程完成时,需要释放当前被保护的缓冲区。Ring 图象采集方式实现的主要过程如上所述,其余步骤就是大家已经熟悉的初始化图象采集硬件,释放图象采集硬件和释放缓冲区了。3.2 触发触发 很多机器视觉应用,比如生产线上的产品外观检测,并不需要一直在采集图象,而是当产品达到检测位置后,才采集图象并进行分析。3.2.1 触发触发信号信号类型类型 一般来说,图象采集卡都支持外触发,NI 的图象采集卡也不例外,如图 3.6 所示。图 3.6 PCI-1409 Trigger 信号 图 3.6 是图象采集卡 PCI-1409
8、 的外部触发信号的说明。触发信号不仅可以启动一个图象采集过程,还能停止一个图象采集过程。通过 TRIG 端口,NI 的图象采集卡不仅能接收外部的触发信号,还能向外部设备发出触发信号,如图 3.7 所示。边干边学机器视觉图象采集部分下 图 3.7 输出触发信号 图 3.7 中,程序通过调用 IMAQ Trigger Drive2.vi 向外部输出触发信号,触发信号的驱动信号为 Vertical Synchronization Signal(也可以为其它)。图 3.7 的下半部分是用示波器抓捕到的触发信号。除了支持外部触发信号外,NI 的图象采集卡还可以通过 RTSI 线和 PXI 总线传递触发信
9、号,这种特性可以方便系统集成工程师实现与运动控制卡和数据采集卡的高速可靠的同步。触发信号类型可以在参数 Trigger Type 中选择,如图 3.8 所示。图 3.8 选择触发信号类型 3.2.2 实现实现触发触发方式方式的的图象图象采集采集 触发信号虽然种类繁多,但使用起来却非常简单,需要记住的一个原则“在开始采集图象前必须先配置好触发信号”。与上节思路相同,我们打开范例程序中的 HL Triggered Snap.vi,学习触发方式图象采集方式的实现方法,如图 3.9 所示。边干边学机器视觉图象采集部分下 图 3.9 HL Triggered Snap.vi 从图 3.9 中,我们可以看
10、出,相比基本的 Snap 采集方式,触发方式下的 Snap 采集方式仅仅多使用了 IMAQ Configure Trigger2.vi 对触发进行了配置。它告诉驱动程序触发信号是什么类型(Trigger Type),触发信号从哪个触发端口进入(Trigger Number)以及当触发信号有效后,完成什么动作(Trigger start of acquisition)。尽管触发信号的使用方式很多,很容易产生一种学起来很难的感觉,不过不要担心,在NI 的范例查找器里面,可以找到所有触发信号使用方式的范例程序,如所示,参考范例程序就可以大大缩短学习曲线。图 3.10 使用触发信号的范例程序 到这里,图象的采集过程就介绍完毕了,希望对大家的日常开发工作有所帮助,下面将介绍图象采集到计算机后如何保存以及如何从图象文件中读取数据。






