主要内容

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

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

介绍

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

此示例演示如何使用前景检测器和blob分析来检测和计数视频序列中的车辆。它假定摄影机处于静止状态。此示例重点关注检测对象。要了解有关跟踪对象的更多信息,请参阅标题为基于运动的多目标跟踪

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

本示例不是立即处理整个视频,而是从获取初始视频帧开始,在该帧中,移动对象从背景中分割出来。这有助于逐步介绍处理视频的步骤。

前景检测器需要一定数量的视频帧来初始化高斯混合模型。这个例子使用前50帧初始化混合模型中的三种高斯模式。

foregroundDetector =愿景。ForegroundDetector (“NumGaussians”3,...“NumTrainingFrames”, 50); 视频阅读器(“visiontraffic.avi”);i = 1:20 0 frame = readFrame(videoReader); / /帧读取下一个视频帧前景= step(foregroundDetector, frame);结束

经过训练,检测器开始输出更可靠的分割结果。下图显示了一个视频帧和检测器计算出的前景掩码。

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

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

步骤2-在初始视频帧中检测车辆

前景分割过程并不完美,而且经常包含不良的噪声。该示例使用形态学开口来去除噪声并填充检测对象中的间隙。

se = strel (“广场”3);filtered前台= imopen(前台,se);图;imshow (filteredForeground);标题(“清洁前景”);

接下来,利用视觉找到每个连接组件对应于移动汽车的包围盒。BlobAnalysis对象。目标进一步过滤检测的前景,剔除包含小于150像素的斑点。

blobAnalysis =愿景。BlobAnalysis (“BoundingBoxOutputPort”符合事实的...“区域输出端口”假的,“CentroidOutputPort”假的,...“最小面积”,150);bbox=步骤(BlobanAnalysis,filteredForeground);

为了突出显示检测到的汽车,我们在它们周围画了绿色的盒子。

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

包围盒的数量与视频帧中发现的汽车数量相对应。在处理后的视频帧的左上角显示发现的汽车数量。

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

步骤3-处理其余视频帧

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

放像机=愿景。放像机(“名字”检测到汽车的);videoPlayer.Position (3:4) = [650400];%窗口大小:[宽,高]se = strel (“广场”3);形态滤波器去除噪声虽然hasFrame(videoReader) frame = readFrame(videoReader);读取下一个视频帧%检测当前视频帧中的前景前景= step(foregroundDetector, frame);%使用形态学打开移除前景中的噪波filteredForeground=imopen(前景,东南);%检测指定最小面积的连接组件,并且%计算它们的边界框bbox = step(blobAnalysis, filteredForeground);在检测到的车辆周围绘制边界框结果= insertShape(框架,“矩形”,bbox,“颜色”“绿色”);%显示在视频帧中找到的汽车数量numCars = size(bbox, 1);result = insertText(result, [10 10], numCars,“BoxOpacity”, 1...“字形大小”步骤(视频播放器,结果);%显示结果结束

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