14.2.1 MATLAB图像采集工具箱

14.2.1 MATLAB图像采集工具箱

(1)MATLAB控制相机硬件的原理

图像采集工具箱是MATLAB专为图像采集而设计的一个平台(图14-6),这个平台帮助用户建立一个与硬件进行底层交流的桥梁,同时提供一些特殊函数,使用户可以用MATLAB命令实现图像的采集。

使用图像采集工具箱,程序开发者无须与特定的图像采集硬件(相机或图像卡)直接打交道,在硬件安装成功后,MATLAB图像采集工具箱即“接管”了与硬件的底层交流工作。在图像采集工具箱这个平台上,不管是何种型号、何种接口的相机,都是一样的,对于用户来说,可以用同样的函数进行控制。这样的操作模式将程序开发者从繁杂的底层函数中解脱出来,使程序开发变得简单。此外,当需要更换硬件时,这种模式开发的程序也无须更改代码,因此具有广泛的适用性。

(2)使用MATLAB图像采集工具箱进行图像的采集

使用MATLAB图像采集工具箱进行图像采集的具体流程如图14-7所示,下面分步骤进行具体说明。

图14-6 MATLAB图像采集工具箱示意图

图14-7 使用MATLAB进行图像采集的具体流程图

1)第一步:安装图像采集硬件按照数字相机的说明书正确安装相机的驱动程序(当前的计算机操作系统上一般会自带一些简易摄像头的驱动,这类相机无须安装驱动即可使用)。安装完成后,正确连接相机和计算机,用相机自带的测试软件进行图像采集的测试,确保相机的安装正常。

在安装好相机硬件后,还要安装MATLAB与硬件进行底层交流的“适配模块”(MATLAB与硬件驱动之间的桥梁)。对于目前很多类别的数字相机,图像采集工具箱中已经提供了与硬件进行底层交流的“适配模块”,因此无须特别安装。表14-1为R2011b版本中已安装的适配模块的详细情况。

表14-1 MATLAB图像采集工具箱包含的适配器列表

对于图像采集工具箱中未提供适配接口的硬件,用户需要自行安装或开发适配模块(相关方法或信息可从网络资源中获取,这里不详细叙述)。

在安装完成后,可以通过MATLAB命令查询系统中已经安装的适配模块的信息。

例1:查询作者电脑上安装的适配器信息。

上面的结果表明作者的电脑系统上安装了两类适配器:一种是“matrox ”,一种是“winvideo”。还可以进一步查询某一特殊适配器的情况。

例2:查询作者电脑上winvideo适配器的细节。

上面结果表明作者的电脑(surface pro)上安装了两个winvideo格式的摄像头,可以分别查询两个摄像头的信息。

例3:查询两个winwideo摄像头的信息。

2)第二步:建立图像采集对象

图像采集硬件和适配器安装完成后,工具箱就接管了与底层硬件的交流工作,用户直接就可以用MATLAB控制相机进行图像采集。要完成对相机的控制,先要建立一个在程序中代表相机的对象。其方法很简单,用videoinput函数可以实现(函数具体用法请自行查询)。

例4:建立一个winwideo摄像头对象。

vid表示创建的摄像头对象。

例5:通过get函数查看摄像头对象的所有属性。

相机对象建立后,可以打开一个窗口,实时显示采集到的图像,如图14-8所示。

例6:利用preview命令对相机进行预览。

图14-8 使用preview实时显示采集到的图像

3)第三步:设置图像采集参数

在开始图像采集之前,一般需要按要求进行相关的参数设置,用set函数可对相机参数(按照上文所介绍的,使用“get”命令查看)和采集参数进行设置(也可以不设置参数,此时图像采集按默认参数进行)。

相机参数包括Shutter(快门)、Gain(增益)、FrameRate(帧率)等。不同的相机,可以设定的参数也不相同,所以用户在进行设定前必须确认相机有哪些参数可以修改。需要注意的是,大部分相机的曝光模式(AutoExposureMode)默认值是“on”,即在整个拍摄过程中,相机会根据环境光强的变化自动调整曝光参数。对光学测量来说,这是不希望发生的现象,因此需要将此属性设置为“off”。

采集参数包括TriggerRepeat(触发次数)、FramesPerTrigger(触发采集帧数)、FrameGrabInterval(帧抓取间隔)及FrameAcquiredFcn(帧获取调用函数)等。为了更好地理解要设置的参数,先对工具箱控制图像采集的流程进行简要说明。

一个完整的图像采集过程如图14-9所示。图像采集时,首先对硬件创建采集对象,然后启动对象,此时数据流开始发送,但并不采集和保存。只有当对象被触发后,采集才正式开始。

图14-9 一个完整的图像采集过程示意图

TriggerRepeat参数让使用者指定发出触发信号的次数。如果用户希望相机能够连续采集不停止,可以将此属性设为“Inf”。

FramesPerTrigger参数让用户设置在一次触发中需要采集图像的数量。

FrameGrablnterval参数让用户选择以间隔方式进行图像采集。具体示意图如图14-10所示。

图14-10 FrameGrabInterval参数的释义示意图

FramesAcquiredFcn参数用来设置一个由图像采集触发的函数的函数名。任何时候,一旦采集了一幅图像,就会调用这个函数。因此,用户可以在这个函数中添加图像数据处理的语句,实现图像的实时采集和处理。

例7:设置相机TriggerRepeat参数为Inf。

4)第四步:开始采集并处理

参数设定完毕后,就可以采集图像了。图像采集工具箱提供了一个非常简单的图像采集函数—getsnapshot来完成单张图像的采集。

例8:使用getsnapshot函数采集图像,将图像进行二值化处理并存储。

但是使用getsnapshot命令只能采集一张图像。如果希望能够连续采集图像,可以循环使用getsnapshot。但这并不是一个好方法,因为每执行一次getsnapshot,就要“启动”和“终止”图像采集一次,因而循环执行getsnapshot会使得程序效率很低。

在图像采集中,实现图像的处理可以用上面提到的FramesAcquiredFcn函数来实现。如果在图像采集对象中设置了此函数,则任何时候一旦采集了一幅图像,就会调用这个函数。

例9:使用FramesAcquiredFcn函数实现图像采集、二值化处理和存储。

5)第五步:采集完成后清除对象

所有工作完成后,需要使用delete命令清除图像采集对象,否则,该对象还驻留在内存中,影响后续使用。设图像采集对象为vid,则清除方法为delete(vid)。