主要内容

检测汽车使用高斯混合模型

这个例子展示了如何在视频序列使用前景检测和计数汽车探测器基于高斯混合模型(gmm)。

介绍

汽车检测和计数可以用来分析交通模式。检测也是第一步之前执行更复杂的任务,比如跟踪或车辆的类型的分类。

这个例子展示了如何使用前台探测器和blob分析汽车在视频序列中检测和计数。它假设相机是静止的。这个例子重点检测对象。了解更多关于跟踪对象,看到标题的例子动态的多个对象跟踪

步骤1 -导入视频和初始化前景探测器

而不是立即处理整个视频,这个例子首先获得最初的视频帧中移动对象从背景中分割出来。这有助于逐步引入用于处理视频的步骤。

前台探测器需要一定数量的视频帧来初始化高斯混合模型。下面的例子使用了前50帧初始化三个高斯混合模型中的模式。

foregroundDetector = vision.ForegroundDetector (“NumGaussians”3,“NumTrainingFrames”,50);videoReader = videoReader (“visiontraffic.avi”);我= 1:15帧= readFrame (videoReader);%读下个视频帧前景=步骤(foregroundDetector,框架);结束

培训后,探测器开始输出更可靠的分割结果。下面的两个图显示一个视频帧和前台面具计算探测器。

图;imshow(框架);标题(视频帧的);

图;imshow(前景);标题(“前景”);

第二步——在一个初始检测汽车视频帧

前景分割过程并不完美,通常包括不良的噪音。示例使用形态学开消除噪音和填补空白的检测对象。

se = strel (“广场”3);filteredForeground = imopen(前台、se);图;imshow (filteredForeground);标题(“干净的前景”);

接下来,找到每个连接组件的边界框对应一个移动的汽车通过使用视觉。BlobAnalysis对象。对象进一步过滤器检测到前台拒绝blob含有少于150像素。

blobAnalysis = vision.BlobAnalysis (“BoundingBoxOutputPort”,真的,“AreaOutputPort”假的,“CentroidOutputPort”假的,“MinimumBlobArea”,150);bbox =步骤(blobAnalysis filteredForeground);

强调发现的汽车,我们画绿框。

结果= insertShape(框架,“矩形”bbox,“颜色”,“绿色”);

边界框的数量对应于汽车的数量在视频帧中找到。发现汽车的数量显示在左上角的视频帧进行处理。

numCars =大小(bbox, 1);结果= insertText(因此,10 [10],numCars,“BoxOpacity”, 1“字形大小”14);图;imshow(结果);标题(检测到汽车的);

步骤3 -流程视频帧

在最后一步,我们处理剩下的视频帧。

放像机= vision.VideoPlayer (“名字”,检测到汽车的);videoPlayer.Position (3:4) = [650400];%窗口大小(宽度、高度):se = strel (“广场”3);%形态滤波器对噪声去除hasFrame (videoReader)帧= readFrame (videoReader);%读下个视频帧%检测前景在当前视频帧前景=步骤(foregroundDetector,框架);%在前台使用形态学开去除噪声filteredForeground = imopen(前台、se);%检测连接组件与指定的最小面积,和%计算其边界框bbox =步骤(blobAnalysis filteredForeground);%画边框在检测到汽车结果= insertShape(框架,“矩形”bbox,“颜色”,“绿色”);%显示汽车的数量在视频帧中找到numCars =大小(bbox, 1);结果= insertText(因此,10 [10],numCars,“BoxOpacity”, 1“字形大小”14);步骤(放像机、结果);%显示结果结束

输出视频显示汽车周围的边界框。它还显示在左上角的汽车数量的视频。