平均图像随时间

这个例子显示了如何随时间推移获得的平均图像。

对于一些高级应用,采集过程可能需要为他们获取的图像进行处理,而你的处理结果记录到磁盘。

使用图像采集工具箱™回调,触发和日志功能,这个例子说明如何完成以下任务:

  • 获得每10秒5帧

  • 重复采集10次

  • 而获取的图像,平均所获得的帧和存储结果到磁盘。

实验装置由白沙地流下随着时间的沙漏。该示例使用一个回调函数,在发现

  • MATLABROOT \工具箱\ IMAQ \ imaqdemos \ HTML \平均

目录,即平均值获取使用图像处理工具箱™功能的图像帧。

配置采集

创建和配置一个视频输入对象进行收购。

%Access中使用24比特的RGB格式的装置。VID = videoinput('WINVIDEO'1,'RGB24_320x240');%假设数据记录可以立即开始启动时,%立即触发被使用。triggerconfig(VID,'即时');%配置获取收集5张...framesPerTrigger = 5;vid.FramesPerTrigger = framesPerTrigger;%......并重复触发额外的9倍%(总共10个触发器执行)。nAdditionalTrigs = 9;vid.TriggerRepeat = nAdditionalTrigs;

以控制帧将被记录的速率,有2种选择:

  • 配置设备的帧速率

  • 使用TimerFcn执行的回调

首先,使用该设备的帧速率的解决方案将被示出,随后通过使用定时器回调的替代解决方案。

使用帧速率选项将提供与该设备的实际视频码流率最密切配合收购的结果,而使用定时器方法提供收购结果独立于设备的流率。

帧速率基于采集(方案一)

如果它是由该设备所支持的设备的帧速率只能配置。万博1manbetx因为它是一个设备的特定属性,可以将视频源对象上找到。

%访问选择用于采集的视频源。SRC = getselectedsource(VID);%声明本设备提供了frameRate属性。得到(SRC)
一般设置:父= 1x1的videoinput]上SOURCENAME =输入1标签= TYPE = videosource的UserData = []设备特定属性中选择=:BacklightCompensation =上亮度= 255 BrightnessMode =自动对比度= 127曝光= 511 ExposureMode =自动对焦= 58传帧率= 15.1500伽玛= 0虹膜= 4饱和度= 108锐度= 127最大光圈= 100 WhiteBalanceMode =汽车
%使用frameRate属性,可以将获取源%,以提供工具箱每秒30帧。FPS = 30;src.FrameRate = num2str(FPS);%由于目的是获得每10秒5帧,工具箱%不应该获得所有帧直到设备提供300'th%的画面:acqPeriod = 10;frameDelay = FPS * acqPeriod
frameDelay = 300
%如果触发由该值延迟,该工具箱将未缓冲%,直到300'th帧的任何帧是由设备提供的。vid.TriggerFrameDelay = frameDelay;%为了确保收购不接近超时,配置%的超时值的预期持续时间采集略高于。totalTrigs = nAdditionalTrigs + 1;acqDuration =(acqPeriod * totalTrigs)+ 3
acqDuration = 103
vid.Timeout = acqDuration;

图像平均

为了节省处理的图像到磁盘,使用VIDEOWRITER对象。每一组获取的帧的使用图像处理工具箱函数进行平均,然后写入到磁盘。

%创建一个AVI文件并配置它。vwObj = VideoWriter('imaverages.avi'“压缩的AVI”);vwObj.FrameRate = FPS;%使用视频输入对象的UserData存储处理信息。userdata.average = {};userdata.avi = vwObj;vid.UserData =用户数据;%配置视频输入对象到每5个采集的帧由处理%指定是在每次触发执行的回调例程。vid.TriggerFcn = {'util_imaverage',framesPerTrigger};%现在,图像采集和处理的配置完成时,%在采集开始。启动(VID)%等待采集完成。这提供了收购%的时间完成对象被删除之前。等待(VID,acqDuration);%验证的平均帧被保存到AVI文件。用户数据= vid.UserData;vwObj = userdata.avi;framesWritten1 = vwObj.FrameCount
framesWritten1 = 10
%显示所得的获取的帧的平均值。%提示在沙漏随时间的下腔室的变化。imaqmontage(userdata.average);标题(“平均值结果 - 帧速率基于”);

%一旦视频输入对象不再需要,删除%,并从工作区清除它。还删除并清除VideoWriter对象。删除(VID)删除(vwObj)清除VIDvwObj

基于定时器的采集(溶液2)

承担这一任务的另一种解决方案是使用TimerFcn。所述TimerFcn可以每10秒,在该点5帧被获取并取平均值来执行。为了启动在正确的时刻获取,使用手动触发。

注意,这种方法是独立配置设备的帧速率。

%的设备访问和配置采集。有%的TimerFcn触发采集每10秒。VID = videoinput('WINVIDEO'1,'RGB24_320x240');triggerconfig(VID,'手册');vid.TimerFcn = @trigger;vid.TimerPeriod = acqPeriod;%配置采集收集每次5帧%装置被触发。重复触发额外的9倍。vid.FramesPerTrigger = framesPerTrigger;vid.TriggerRepeat = nAdditionalTrigs;%配置的处理程序和AVI文件。vid.TriggerFcn = {'util_imaverage',framesPerTrigger};vwObj2 = VideoWriter('imaverages2.avi'“压缩的AVI”);vwObj2.FrameRate = FPS;%使用视频输入对象的UserData存储处理信息。userdata2.average = {};userdata2.avi = vwObj2;vid.UserData = userdata2;%开始采集。开始(VID);等待(VID,acqDuration);%验证的平均帧被保存到AVI文件。userdata2 = vid.UserData;vwObj2 = userdata2.avi;framesWritten2 = vwObj2.FrameCount
framesWritten2 = 10
%显示所得的获取的帧的平均值。%提示在沙漏随时间的下腔室的变化。imaqmontage(userdata2.average);标题(“ - 基于时间平均结果”);

%一旦视频输入对象不再需要,删除%,并从工作区清除它。还删除并清除VideoWriter对象。删除(VID)删除(vwObj2)清除VIDvwObj2