对NI LabVIEW有一定了解的童鞋都知道,在LabVIEW中有许多的快速VI。安装了NI Acquisition Software后,也会有一个视觉采集(Vision Acquisition)的快速VI。如下图1所示:
图1 Vision Acquisition视觉采集快速VI
图2 Vision Acquisition视觉采集快速VI即时帮助信息
从即时帮助信息中,可以了解到,使用NI 视觉采集快速VI可以创建、编辑采集。当在程序框图旋转视觉采集快速VI时,NI Vision Acquisition向导会被启动。选择采集源并且配置采集使用NI-IMAQ,NI-IMAQdx,或者是通过读取AVT视频文件或文件夹中的图片文件进行仿真采集。在采集配置好后,选择输入控件和显示控件后在LabVIEW中进行编辑设置。双击Vision Acquisition视觉采集快速VI可以编辑采集。
需要注意的是,所有在快速VI中创建的图像需要在使用后释放缓存引用。使用IMAQ Dispose.vi来清除快速VI的图像输出当图像再不需要时。
经验:释放图像缓存,很多人都不喜欢使用,因为LabVIEW中有一定的智能性,有时会自动清理缓存。但是这个过程并不是一定有效的,在编译程序时,之前编译的程序可能只有800K,然后突然之间变成了好几M的,这个原因很大部分就是图像的缓存没有清除,也被编译到了应用程序中。如果是一张500万像素的图像,通常应该在4.8M左右。所以,必要的释放缓存,是非常好的一种方法。
将快速VI旋转到程序框图中,等待视觉采集向导出现:
图3 Vision Acquisition视觉采集快速VI初始化
图4 NI Vision Acquisition Express视觉采集快速VI界面
在视觉采集快速VI界面中可以看到,本地采集源枚举出来了本地所有的可利用资源。主要的有NI-IMAQdx Devices和Simulated Acquisition仿真采集。图4中显示了本地的资源有一个IMAQdx设备:工业相机AVT Guppy PRO 125B,仿真采集可以使用文件夹图片和AVT视频。下面先介绍一下使用真实相机进行采集的过程。(使用USB摄像头的筒子们要注意了,也是从这里开始哟。)选择上工业相机AVT Guppy PRO 125B,按照右下角的提示“Press the Snap or Grab buttons above to acquire image”点击Snap快拍(快拍是指采集单张)或Grab抓取(抓取是指连续采集)按钮采集图像。如图5所示:
图5 视觉采集快速VI-选择采集源Select Acquisition Sources
图6 视觉采集快速VI工具栏
在图6所示的视觉采集快速VI工具栏中,从左到右分别是Snap快拍,Grab抓取,Zoom to Fit适合窗口,Zoom 1:1原始尺寸,Zoom In放大,Zoom Out缩小。可以使用缩放工具对图像进行放大缩小。在左下角的提示信息中,显示了图像采集的相关信息。如Acquiring at 24.93fps采集帧率,1292x964图像的分辨率,8-bit image 8位深的图像,255,鼠标所在像素点的灰度值,(0,0)鼠标所以在点的像素坐标。
选择好采集源后,点击Next按钮,进入下一步Select Acquisition Type选择采集类型。如图7所示:
图7 视觉采集快速VI-选择采集类型Select Acquisition Type
在采集类型中,共有四种类型,第一类为单帧采集加处理Single Acquisition with processing,第二类为连续采集加内部处理Continuous Acquisition with inline processing,第三类为有限采集加内部处理Finite Acquisition with inline processing,第四类为有限采集加后处理。其中内部处理为采集完图像,马上处理,这是机器视觉图像处理中常用的方法,而后处理则是指先采集多个图像,投入寄存器中,再在后续的环节焦距处理。
第一类因为只采集单帧,然后就处理了,所以没有什么参数,从其中的说明信息与框图示意图可以看到,其只采集单帧图像并处理,没有循环结构。
第二类需要连续采集图像,下面的说明信息指出这个采集用于连续采集图像。如果你不想丢失图像,选择采集所有图像(Acquire Every image)在采集图像类型(Acquire Image Type)中,并且在缓存的图像数量(Number of Images to Buffer)中指定需要缓存的图像数量。为了避免图像丢失,图像处理的平均时间必须小于图像采集时间。如果图像处理时间大于图像采集时间,那么可以采集图像类型中选择采集最近的图像(Acquire Most Recent Image),以前的图像将会被丢弃。在框图中示意图中看到,其使用的是While循环,会一直采集,直到遇到停止信号。
第三类有限采集加内处理,这个采集用于采集固定数量的图像。当一个图像被采集到,可以用于图像处理中。这个类型可以用于显示图像,或者是处理图像在采集完成后。缓存的图像数量可以指定需要有限采集的图像数量。框图示意中显示的是For循环,用于有限次的循环采集、处理。
第四类有限采集加后处理,这个采集类型适用于采集固定数量的图像。这些图像可以使用当缓存图像数量中指定的所有图像采集完成。这个采集类型适合于图像处理时间大于图像采集时间的应用场合。
因为项目应用中一般来讲,都是会连续采集的,且不能丢失图像的,因此选择第二类连续采集图像,采集图像类型选择采集所有图像,缓存设置为默认的5(缓存太大,可能引起内存占用太高或溢出),然后点击Next下一步,进入配置采集设置(configure Acquisition Settings)。如图8所示:
图8 视觉采集快速VI-配置采集设置Configure Acquisition Settings
在配置采集设置中,左边为参数设置,右边为工具按钮与图像显示、图像信息显示区域。重点看一下左边的参数。
Video Mode视频模式,其中显示了当前选择的相机支持的视频模式。如图9所示:
图9 Video Mode视频模式
视频模式可以根据需要选择不同分辨率、不同帧率的模式。通常来讲,我们会使用最大分辨率下的最高速度的模式,如图中的Format 7,Mode0,1292x964。注意一点的就是,其中虽然枚举了大量的视频模式,但是也有可能部分模式无法使用的,测试时会报错。
Reset to Defaults重置为默认值,是将参数重新设置为默认值。Show All Attributes显示所有属性,如果不勾选,则如图8所示,只出现Camera Attributes相机属性。而如果勾选,则如图10所示,不仅有Camera Attributes相机属性,还有Acquisition Attributes采集属性,Camera Information相机信息,Statues Information状态信息等参数。
图10 视觉采集快速VI-显示所有属性Show All Attributes
其中除了相机属性可以写的属性,可以在采集时实时更新外,其它的信息要么是读属性,要么只能在初始化之前进行一次设置。相机属性设置时,可以点击工具栏听Test按钮,实时采集图像进行调整,以查看各属性对采集图像的影响。
下面以AVT的Guppy PRO 125B为例,为大家介绍一下,工业相机中的属性。因为AVT的这款相机是一款标准相机,因此其参数属性,具有一定的代表性。使用摄像头的筒子们请注意了,你的USB摄像头,不一定支持这些属性,所以不能调整的,也不要奇怪。加黑粗体的属性可能是比较重要的。
图11 采集属性Acquisition Attributes
Bayer拜尔:一般用于彩色相机,调整RGB分量的比例等;
Bits Per Pixel每像素位深:指定像素的位学,可以使用硬件值,还有如10bit,12bit,14bit;
Controller控制器:可以指定要求的数据流通道,以及数据流通道模式;
Frame Interval帧间距:每帧之间的时间间隔。灰色表示属性不可用。
Height高度:图像的高度,单位为像素。可以调小,获得更高的速度;
Ignore First Frame忽略第一帧:真时忽略第一帧,假时第一帧也有效。相机因为需要启动,有想相机第一帧有可能会比较黑,可以忽略第一帧。这个现象在USB摄像头常见;
Offset X位置偏移X:将X方向偏移指定的像素;
Offset Y位置偏移Y:将Y方向偏移指定的像素;
Overwrite Mode盖写模式:有取得最新、取得最旧、失败等参数;
Packet Size消息包大小:指定消息包的大小,这个对于图像采集速度、以及是否可以清楚完整的成像有影响,需要小心设置,可以参看石鑫华视觉网文章多个500万像素相机同时采集图像;
Payload Size有效负载尺寸:即为整个图像的大小尺寸,等于宽x高;
Pixel Format像素格式:如Mono8、Mono16、RGB、YUV422、BAYER8之类的;Mono为黑白相机,RGB、YUV422、BAYER8之类的为彩色相机;
Pixel Signedness像素符号:可选有Signed有符号、unsigned无符号、Use Hardware Value使用硬件值等方式;
Receive Timestamp Mode接受时间标识模式:None无、Tick Count秒钟、System Time系统时间;
Receive Dual Packets接受双包:False不接受,True接受;
Shift Pixel Bits移位像素位:用于16位的图像;
Speed速度:100M、200M、400M、800M,这里设置的速度是1394总线的带宽速度。1394A可以设置为400M,如果是1394B,可以设置为800M,带宽越高,能提供给相机速度也就越快。如果是一个13FPS的500万像素的相机,使用800M时,速度可以达到13FPS,如果只是使用400M,那么可能只有6.5FPS;
Timeout超时:这个用于设置在指定的时间内采集图像则超时;通常触发采集时需要进行设置。
Video Mode视频模式:根据不同的模式采集图像,常用Format 7中的格式。从图9中我们可以看到,其实许多模式的尺寸是比较接近的,如Format 7 Mode 0,1292x964与1280x960 Mono8,30.0fps或15fps接近,但是在本相机的使用中,1280x960 30FPS时无法使用。而且在Format 7 Mode0时最多只能达到26.2FPS的速度,而达不到AVT Guppy PRO标称的31FPS速度。使用AVT自己的驱动、演示程序也一样。估计应该是PCI的1394B卡问题。如果使用PCI-E的1394B卡,也许能达到31FPS,但是需要实验。另外使用Format格式时,即使是使用小尺寸,如644x482分辨率时,也是使用的全部的传感器面积;而如果使用的640x480,Mono 8,30fps时,只会取传感器的中心的1/4大小用于成像;其差别如图13、图14所示,二者的视野是不一样的。
Width宽度:相机采集视野的宽度,像素单位。可以调小以提高采集速度。工业相机中Height、Width一般都是可以设置的,也就是平常说的支持AOI功能。如果被测物是一个细长型的,可以将高方向调小,以节约带宽。如果被测物是一个圆型的,那么可以将宽方向调成与高方向一致。
图12 相机属性
图13 Format 7 Mode 3 644x482模式下的采集视野较大
图14 普通的640x480 Mono8 30fps下采集视野较小
相机属性Camera Attributes。相机属性都是可以对相机进行实时设置的。有些参数改变,对成像影响比较大,有些参数改变,对成像影响很小。
Auto Exposure自动曝光:Mode模式有相对、忽略等。下面的Value值则表示设置的大小 。实现发现,自动曝光值的改变,对图像没有影响;
Brightness亮度:改变图像的亮度,从最小值到最大值,亮度上有细小的变化;
Gain增益:改变图像的增益,值越小图像越暗但是噪声越小,质量越高;值越大,越亮,但是噪声增大;
Gamma伽玛:相对伽玛值的改变,可以使图像的灰度有较大的改变;
Shutter快门:改变相机的快门时间,值越大,需要的曝光时间就越长,图像就越明亮;相对值是以最小快门单位为准的,不同的相机,最小快门单位是不一样的,需要查手册;
Trigger触发:使用外部信号,来触发相机拍照;
Trigger Activation触发启动:低电平、高电平触发;
Trigger Mode触发模式:如图15所示,有边缘触发、电平触发、可编程触发等(可联合外部触发,进行连续、一次、多次内部触发)
Trigger Parameter触发参数:触发参数。没理解是什么意思。
Trigger Source触发源:可以有硬件输入端口,有些有多个触发接口的,也可以选择软件触发(Software Trigger);
Trigger Delay触发延时:即触发后延时指定的时间再拍照。可以用于运动的物体需要静止下来又有惯性需要一定时间静止时触发拍摄。
图15 触发模式
图16 相机信息、状态信息
Camera Information相机信息
Base Address基地址:相机的硬件地址;
Bus Type总线类型:如火线、USB、千兆网等;
Model Name型号名:相机的型号名称;
Serial Number High序列号高位:相机的序列号;
Serial Number Low序列号低位:相机的序列号;可以使用序列号,对系统进行必要的加密保护;
Vendor Name供应商名称:生产相机的厂家
Status Information状态信息
Acq In Progress采集进度:False没有在采集,True正在采集;
Last Buffer Count最后缓存计数:即图像连续采集完后的缓存计数;
Last Buffer Number最后缓存总数:即最后缓存的总数;
Lost Buffer Count丢失缓存计数:即发生错误、或丢失的缓存计数。
对相机属性设置好后,再点击Next进入下一步选择输入控件、显示控件Select Controls /Indicators。如图17所示:
图17 视觉采集-选择控件与指示器Select Controls/Indicators
选择需要的控件设置为输入控件或显示控件,左边栏的为输入控件,右边栏的为显示控件。如果不选择,这些控件在快速VI中将不会引入接线端。有些控件是默认选择的,是不可少的,如Image Out、Stop等。
选择好需要的控件点击Finish完成向导。等待生成LabVIEW的快速VI,如图18所示:
图18 视觉采集-生成LabVIEW VI
生成的快速VI如图19所示:
图19 视觉采集快速VI生成的LabVIEW程序
如果需要编辑或查看快速VI采集的原理,可以在快速VI上面单击鼠标右键,然后选择打开前面板,如图20所示:
图20 打开视觉采集快速VI的前面板进行编辑
图21 编辑视觉采集快速VI确认
图21为点击打开前面板后出现的确认对话框,如果转换,则会将快速VI转换成标准VI,转换后的标准VI如图22所示:
图22 视觉采集快速VI转换成标准VI后的状态
图23 快速VI转换成标准VI后的图标
从图23中可以看到,快速VI转换成标准VI后,其不再有快速VI的命名,而是以未命名来表示的。这个VI打开后是未保存状态,需要保存到硬盘中。而且之后再双击这个VI,不会弹出快速VI向导,而是打开子VI的前面板。
利用视觉采集快速VI,可以非常方便的从相机、摄像头采集到图像,而且也非常方便对各种属性进行设置,如快门、增益、触发等,因为可以在测试时就对其测试效果。而快速VI内部的框图原理,也为NI 视觉软件初学者提供了一种比较好的解决思路。
假如在选择采集源中选择仿真采集中的文件夹中的图片或者AVI视频,那么在选择采集类型中与从相机中采集是一样的,仅仅只是在配置采集设置与选择输入控件/显示控件中略有不同,如下图24~27所示:
图24 视觉采集快速VI-从文件夹中读取图片配置测试
读取文件夹中的图片时,需要设置一个图片的路径,这里是必须选择文件的,不能选择文件夹,如果是需要整个文件夹中的所有图片,则勾选下面的Cycle Through Folder of Images循环文件夹中的所有图片。
图25视觉采集快速VI-从文件夹中读取图片选择输入控件与显示控件
图26 视觉采集快速VI-读取AVI视频配置采集设置
读取AVI视频配置采集设置中与读取文件夹中的图片类似,只是少了一个循环读取文件夹中的图片选项。
图27 视觉采集快速VI-读取AVI视频选择输入控件与显示控件
选择需要的图片、AVI视频(仅限AVI格式),并且进行必要的配置,选择需要的控件,就可以仿真采集了。