主要内容

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

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

简介

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

这个例子展示了如何使用前景检测器和斑点分析来检测和计数视频序列中的汽车。它假设摄像机是静止的。该示例主要关注检测对象。要了解关于跟踪对象的更多信息,请参阅示例标题基于运动的多目标跟踪

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

该示例不是立即处理整个视频,而是首先获取一个初始视频帧,其中移动的物体从背景中分割出来。这有助于逐步介绍用于处理视频的步骤。

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

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

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

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

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

第2步-在初始视频帧中检测汽车

前景分割过程并不完美,经常包含不希望的噪声。该示例使用形态学开放来去除噪声并填充被检测对象中的空白。

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

接下来,利用视觉找到移动汽车对应的各个连接部件的边界框。BlobAnalysis对象。对象通过拒绝包含小于150像素的斑点进一步过滤检测到的前景。

blobAnalysis =视觉。BlobAnalysis (“BoundingBoxOutputPort”,真的,...“AreaOutputPort”假的,“CentroidOutputPort”假的,...“MinimumBlobArea”, 150);bbox = step(blobAnalysis, filtered前台);

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

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

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

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

步骤3 -处理余下的视频帧

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

videoPlayer =视觉。放像机(“名字”检测到汽车的);videoPlayer.Position(3:4) = [650,400];%窗口大小:[宽,高]Se = strel(“广场”3);%形态学滤波器用于噪声去除hasFrame(视频阅读器)frame = readFrame(视频阅读器);%读取下一个视频帧检测当前视频帧中的前景前台= step(foregroundDetector, frame);%使用形态开口去除前景中的噪声filteredForeground = imopen(前台,se);检测指定最小面积的连接组件,和%计算他们的边界框bbox = step(blobAnalysis, filtered前台);在检测到的汽车周围绘制边界框。结果= insertShape(帧,“矩形”bbox,“颜色”“绿色”);显示在视频帧中发现的汽车数量numCars = size(bbox, 1);结果= insertText(结果,[10 10],numCars,“BoxOpacity”, 1...“字形大小”14);步骤(放像机、结果);%显示结果结束

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