主要内容

开始以编程方式进行图像采集

概述

本节通过实现一个简单的运动检测应用程序演示创建图像采集应用程序所需的基本步骤。该应用程序通过对传入的图像帧执行像素到像素的比较来检测场景中的运动。如果场景中没有任何东西移动,像素值在每一帧中保持不变。当图像中有东西移动时,应用程序将显示改变值的像素。

该示例强调了如何使用Image Acquisition Toolbox™软件仅用几行代码就创建可工作的图像采集应用程序。

请注意

要运行本例中的示例代码,必须将一个图像采集设备连接到系统。该设备可以是专业级别的图像采集设备,如帧捕获器,或通用的微软®窗户®图像采集设备,如网络摄像头。该代码可以使用各种类型的设备,只需要稍加更改。

请注意

对于图像采集工具箱的以前版本,所有适配器的文件都包含在安装中。从版本R2014a开始,每个适配器都可以通过支持包单独获得。为了使用图像采集工具箱,您必须安装相机使用的适配器。看到硬件适配器的图像采集支持包获取有关使用MATLAB安装适配器的信息®附加组件。

要使用“图像采集工具箱”软件获取图像数据,必须执行以下基本步骤。

一步

描述

步骤1

安装和配置您的图像采集设备

步骤2:

向“图像采集工具箱”软件检索唯一标识图像采集设备的信息

步骤3

创建一个视频输入对象

步骤4

预览视频流(可选)

步骤5:

配置图像采集对象属性(可选)

步骤6

获取图像数据

步骤7

清理

步骤1:安装图像采集设备

按照图像采集设备自带的安装说明操作。设置通常包括:

  • 正在您的计算机中安装框架抓取板。

  • 安装设备所需的任何软件驱动程序。这些是由设备供应商提供的。

  • 将相机连接到取景板上的连接器上。

  • 通过运行相机自带的应用软件并查看实时视频流来验证相机是否正常工作。

一般的Windows图像采集设备,如网络摄像头和数字视频摄像机,通常不需要安装帧捕获板。您可以通过USB或火线端口将这些设备直接连接到计算机。

安装和配置完图像采集硬件后,在计算机上双击桌面上的图标启动MATLAB。您不需要执行MATLAB的任何特殊配置来执行图像采集。

步骤2:检索硬件信息

在此步骤中,您将获得工具箱所需的几条信息,以惟一地标识想要访问的图像采集设备。在创建图像采集对象时使用此信息步骤3:创建一个视频输入对象

下表列出了这些信息。你可以使用imaqhwinfo函数检索每个项。

设备信息

描述

适配器名称

一个适配器是工具箱用于通过其设备驱动程序与图像采集设备通信的软件。该工具箱包括用于特定供应商的图像采集设备和特定类别的图像采集设备的适配器。看到确定适配器名称更多信息。

设备ID

设备ID是适配器分配的一个数字,用于唯一标识可与之通信的每个图像采集设备。看到判断设备ID更多信息。

请注意

指定设备ID是可选的;工具箱使用第一个可用设备ID作为默认值。

视频格式

视频格式指定图像分辨率(宽度和高度)和视频流的其他方面。图像采集设备通常支持多种视频格式。看到确定支持的视频格式更多信息。

请注意

指定视频格式是可选的;工具箱使用一种受支持的格式作为默认格式。

确定适配器名称

要确定适配器的名称,请输入imaqhwinfo函数,没有任何参数。

imaqhwinfo ans = InstalledAdaptors: {'dcam' 'winvideo'} MATLABVersion: '7.4 (R2007a)' ToolboxName: 'Image Acquisition Toolbox' ToolboxVersion: '2.1 (R2007a)'

返回的数据中imaqhwinfo,InstalledAdaptors字段列出计算机上可用的适配器。在这个例子中,imaqhwinfo发现电脑上有两个适配器:“dcam”而且“winvideo”.计算机上的清单可能只包含一个适配器名称。选择提供对图像采集设备访问的适配器名称。有关更多信息,请参见确定设备适配器名称

判断设备ID

要查找特定图像采集设备的设备ID,请输入imaqhwinfo函数,指定适配器的名称作为唯一参数。的第一个调用中找到了适配器名称imaqhwinfo,描述于确定适配器名称)。在返回的数据中的deviceidfield是一个单元格数组,包含通过指定适配器访问的所有设备的设备id。

请注意

本例使用DCAM适配器。您应该替换您想要使用的适配器的名称。

info = imaqhwinfo('dcam') info = AdaptorDllName: [1x77 char] AdaptorDllVersion: '2.1 (R2007a)' AdaptorName: 'dcam' DeviceIDs: {[1]} DeviceInfo: [1x1 struct]

确定支持的视频格式

若要确定图像采集设备支持的视频格式,请参阅DeviceInfo返回的数据的字段imaqhwinfo.的DeviceInfoField是一个结构数组,其中每个结构提供关于特定设备的信息。要查看特定设备的设备信息,可以使用设备ID作为结构数组的引用。方法也可以查看特定设备的信息imaqhwinfo函数,指定适配器名称和设备ID作为参数。

要获取设备支持的视频格式列表,请查看SupportedFormats字段的值。的SupportedFormats字段是字符向量的单元格数组,其中每个字符向量是设备支持的视频格式的名称。有关更多信息,请参见确定支持的视频格式

dev_info = imaqhwinfo('dcam',1) dev_info = DefaultFormat: 'F7_Y8_1024x768' DeviceFileSupported: 0 DeviceName: 'XCD-X700 1.05' DeviceID: 1 VideoInputConstructor: 'videoinput('dcam', 1)' VideoDeviceConstructor: 'imaq. DefaultFormat: 'F7_Y8_1024x768' DeviceFileSupported: 0VideoDevice('dcam', 1)' SupportedFormats: {'F7_Y8_1024x768' 'Y8_1024x768'}

步骤3:创建一个视频输入对象

在此步骤中,您将创建视频输入对象,工具箱使用该对象来表示MATLAB和图像采集设备之间的连接。使用视频输入对象的属性,可以控制图像采集过程的许多方面。有关图像采集对象的更多信息,请参见创建图像采集对象

要创建视频输入对象,请使用videoinput函数在MATLAB提示符。的DeviceInfo方法返回的imaqhwinfo函数包含默认值videoinput中的设备的函数语法VideoInputConstructor字段。有关设备信息结构的更多信息,请参见确定支持的视频格式

下面的示例为DCAM适配器创建一个视频输入对象。替换系统上可用的图像采集设备的适配器名称。

vid = videoinput('dcam',1,'Y8_1024x768')

videoinput函数接受三个参数:适配器名称、设备ID和视频格式。您在第2步中检索了此信息。适配器名称是唯一必需的参数;的videoinput功能可以使用默认的设备ID和视频格式。要确定默认的视频格式,请查看DefaultFormat字段的值。看到确定支持的视频格式更多信息。

您可以指定设备配置文件(也称为摄像机文件)的名称,而不是指定视频格式。设备配置文件通常由帧抓取器供应商提供。这些文件包含在设备上使用特定相机所需的所有配置设置。看到使用设备配置文件(摄像头文件)更多信息。

查看视频输入对象摘要

要查看刚刚创建的视频输入对象的摘要,请输入变量名从视频在MATLAB命令提示符。显示的摘要信息显示了对象的许多特征,例如每个触发器将捕获的帧数、触发器类型和对象的当前状态。您可以使用视频输入对象属性来控制这些特性中的许多。看到步骤5:配置对象属性(可选)更多信息。

使用'XCD-X700 1.05'的视频输入对象摘要。采集源:input1可用。采集参数:'input1'是当前选中的源。使用选定的源,每个触发器有10帧。'Y8_1024x768'视频数据在开始时记录。每1帧抓取第一个。在触发时将数据记录到“内存”。触发参数:启动时1个“立即”触发器。状态:等待启动。从开始开始获得0帧。 0 frames available for GETDATA.

步骤4:预览视频流(可选)

在创建视频输入对象之后,MATLAB就能够访问图像采集设备并准备好获取数据。然而,在开始之前,您可能想要查看视频流的预览,以确保图像令人满意。例如,您可能想要更改相机的位置、更改照明、纠正对焦或对图像采集设置进行其他更改。

请注意

此步骤在此过程中是可选的,因为您可以在创建视频输入对象后随时预览视频流。

要预览本例中的视频流,请输入预览函数,指定在第3步中创建的视频输入对象作为参数。

预览(vid)

预览函数在屏幕上打开一个视频预览图窗口,其中包含实时视频流。要停止直播视频流,可以调用stoppreview函数。要重新启动预览流,请调用预览同样的视频输入对象。

当预览窗口打开时,视频输入对象设置预览财产“上”.如果通过设置图像采集对象属性改变了图像的特征,则在预览窗口中显示的图像将反映该变化。

下图显示了该示例的视频预览窗口。

视频预览窗口

关闭“视频预览”窗口关闭按钮或使用closepreview函数,将视频输入对象指定为参数。

closepreview (vid)

调用closepreview关闭所有打开的视频预览窗口。

步骤5:配置对象属性(可选)

在创建视频输入对象并预览视频流之后,您可能希望修改图像的特征或采集过程的其他方面。您可以通过设置图像采集对象属性的值来实现这一点。本节

图像采集对象的类型

工具箱使用两种类型的对象来表示与图像采集设备的连接:

  • 视频输入对象

  • 视频源对象

视频输入对象代表了MATLAB和视频采集设备之间的高水平连接。视频输入对象支持的属性对于每种类型的设备都是相同的。方法创建了一个视频输入对象videoinput函数步骤3

在创建视频输入对象时,工具箱会自动创建一个或多个与视频输入对象关联的视频源对象。每个视频源对象表示一个或多个物理数据源的集合,这些数据源被视为单个实体。工具箱创建的视频源对象的数量取决于设备和指定的视频格式。在任何时候,只有一个视频源对象,称为选择源,可以主动。这是用于获取的资源。有关这些图像采集对象的更多信息,请参见创建图像采集对象

查看对象属性

要查看视频输入对象或视频源对象支持的所有属性的完整列表,请使用得到函数。要列出在步骤3中创建的视频输入对象的属性,在MATLAB提示符下输入以下代码。

get (vid)

得到函数列出对象的所有属性及其当前值。

一般设置:的DeviceID = 1 DiskLogger = [] DiskLoggerFrameCount = 0事件日志= [1 x0 struct] FrameGrabInterval = 1 FramesAcquired = 0 FramesAvailable = 0 FramesPerTrigger = 10日志=从LoggingMode =内存Name = Y8_1024x768-dcam-1 NumberOfBands预览= 1 =在ReturnedColorSpace =灰度ROIPosition =[0 0 1024 768] =关闭标签=运行超时= 10 Type = videoinput用户数据= []VideoFormat = Y8_1024x768 VideoResolution =(1024 768)。

方法可查看当前选定的与此视频输入对象关联的视频源对象的属性getselectedsource函数与得到函数。的getselectedsource函数返回当前活动的视频源。要列出当前选定的视频源对象与步骤3中创建的视频输入对象相关联的属性,在MATLAB提示符处输入以下代码。

get (getselectedsource (vid))

得到函数列出对象的所有属性及其当前值。

请注意

视频源对象属性是特定于设备的。连接到系统的设备支持的属性列表可能与此示例中显示的列表不同。

一般设置:Parent = [1x1 videoinput] Selected = on SourceName = input1 Tag = Type = videosource设备特定属性:FrameRate = 15 Gain = 2048 Shutter = 2715

设置对象属性

要设置视频输入对象属性或视频源对象属性的值,可以使用点表示法引用对象属性,就像引用结构中的字段一样。

有些属性是只读的;您不能设置它们的值。这些属性通常提供关于对象状态的信息。其他属性在对象运行时变为只读。要查看可设置的所有属性的列表,请使用函数,将对象指定为唯一参数。

为了实现连续的图像采集,该示例设置了TriggerRepeat财产.要设置此属性,请在MATLAB提示符下输入以下代码。

从视频。TriggerRepeat = Inf;

为了帮助应用程序在处理数据时跟上传入的视频流,该示例设置了FrameGrabInterval财产5.这指定对象在视频流中每五帧获取一次。的值可能需要进行实验FrameGrabInterval属性来查找在图像采集设置中提供最佳响应的值。)这个例子展示了如何通过引用属性来设置对象属性的值,就像在MATLAB结构中引用字段一样。

从视频。FrameGrabInterval = 5;

要设置视频源对象属性的值,必须首先使用getselectedsource函数检索对象。(你也可以通过搜索视频输入对象来获得所选的源属性的视频源对象的选择属性设置为“上”)。

为了说明这一点,该示例将值赋给标签财产。

Vid_src = getselectedsource(vid);vid_src。标签= 'motion detection setup';

请注意

若要获取可用于函数的选项列表,请按选项卡在MATLAB命令行上输入一个函数后,按。列表展开,您可以滚动选择属性或值。有关使用此高级选项卡完成功能的信息,请参见对函数使用Tab补全

步骤6:获取图像数据

创建视频输入对象并配置其属性后,即可获取数据。这通常是任何图像采集应用程序的核心,它涉及以下步骤:

  • 启动视频输入对象的方法开始一个对象开始函数。启动对象为数据采集做好准备。例如,启动一个对象会锁定某些对象属性的值(它们变成只读)。然而,启动一个对象并不启动图像帧的获取。数据日志记录的启动取决于触发器的执行。

    下面的示例调用开始函数启动视频输入对象。对象在获得请求的帧数时停止。因为该示例指定持续获取,所以必须调用停止函数停止对象。

  • 触发收购—为了获取数据,视频输入对象必须执行一个触发器。触发器可以以几种方式发生,这取决于TriggerType属性已配置。例如,如果指定即时触发器,则对象在启动后立即自动执行触发器。方法的调用,如果指定手动触发器,则该对象等待触发函数在开始数据采集之前。有关更多信息,请参见获取图像数据

    在这个例子中,因为TriggerType属性设置为“立即”(默认值)和TriggerRepeat属性设置为,对象会自动开始执行触发器并持续获取数据帧。

  • 将数据引入MATLAB工作区—根据视频输入对象的值,工具箱将获取的数据存储在内存缓冲区、磁盘文件或两者中LoggingMode财产。要处理这些数据,必须将其带入MATLAB工作区。要将多个帧引入工作区,请使用getdata函数。一旦数据在MATLAB工作区中,您就可以像操作其他数据一样操作它。有关更多信息,请参见工作与图像数据在MATLAB工作空间

请注意

该工具箱提供了一种获取单帧图像数据的方便方法,不需要启动或触发对象。看到将单个帧引入工作区更多信息。

运行示例

要运行该示例,在MATLAB提示符处输入以下代码。该示例循环,直到获得指定数量的帧。在每个循环迭代中,示例调用getdata将最近的两个帧引入MATLAB工作区。为了检测运动,该示例从另一帧中减去一帧,创建一个不同的图像,然后显示它。在获取的帧中改变了值的像素将在差分图像中具有非零值。

getdata函数在将帧带入MATLAB工作区时从内存缓冲区中删除帧。及时地将帧从内存缓冲区移到MATLAB工作区是很重要的。如果不将获取的帧从内存中移出,就会很快耗尽系统上的所有可用内存。

请注意

该示例使用图像处理工具箱™软件中的函数。

创建视频输入对象。vid = videoinput('dcam',1,'Y8_1024x768') %设置此应用程序的视频输入对象属性。从视频。TriggerRepeat = 100;从视频。FrameGrabInterval = 5;设置视频源对象属性的值。Vid_src = getselectedsource(vid);vid_src。标签= 'motion detection setup'; % Create a figure window. figure; % Start acquiring frames. start(vid) % Calculate difference image and display it. while(vid.FramesAvailable >= 2) data = getdata(vid,2); diff_im = imabsdiff(data(:,:,:,1),data(:,:,:,2)); imshow(diff_im); drawnow % update figure window end stop(vid)

请注意drawnow是使用后的呼叫吗imshow以确保图窗口被更新。在循环中更新GUI或图形时,这是一个很好的实践。

下图显示了示例如何显示检测到的运动。图中显示了代表运动的区域。

图示例显示窗口

请注意

若要获取可用于函数的选项列表,请按选项卡在MATLAB命令行上输入一个函数后,按。列表展开,您可以滚动选择属性或值。有关使用此高级选项卡完成功能的信息,请参见对函数使用Tab补全

图像数据MATLAB工作空间

在这个例子中,getdata函数返回变量中的图像帧数据作为一个480 × 640 × 1 × 10的8位数据数组(uint8).

whoos名称大小字节类数据4-D 3072000 uint8 array dev_info 1x1 1601 struct array info 1x1 2467 struct array vid 1x1 1138 videoinput object vid_src 1x1 726 videosource object

阵列的高度和宽度主要由视频格式的视频分辨率决定。但是,您可以使用ROIPosition属性以指定取代视频分辨率的值。设备通常以列逐行表示视频分辨率;MATLAB用逐列表示矩阵维数。

第三维表示图像中颜色带的数量。因为示例数据是灰度图像,所以第三维为1。对于RGB格式,图像帧有三个波段:红色是第一个波段,绿色是第二个波段,蓝色是第三个波段。第四个维度表示从视频流中获得的帧数。

第七步:清理

当您使用完您的图像采集对象时,您可以将它们从内存中删除,并清除MATLAB工作区中与这些对象相关的变量。

删除(vid)清除关闭(gcf)

有关更多信息,请参见删除图像采集对象

Baidu
map