主要内容

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

此示例显示如何使用基于高斯混合模型(GMMS)的前景探测器检测和计数视频序列中的汽车。

介绍

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

此示例显示如何使用前景探测器和BLOB分析来检测和计数视频序列中的汽车。它假设相机是静止的。该示例侧重于检测对象。要了解有关跟踪对象的更多信息,请参阅标题的示例基于运动的多目标跟踪

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

而不是立即处理整个视频,该示例通过获得从背景中分段的初始视频帧开始,而是通过其中分段。这有助于逐步介绍用于处理视频的步骤。

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

forearddetector = Vision.ForeCloundDetector('numgaussians',3,......'numtringframes',50);VideoReader = Videoreader('VisionTraffic.avi');为了i = 1:150帧= ReadFrame(Videoreader);%读取下一个视频帧前景=步骤(前景detector,帧);结尾

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

数字;imshow(框架);标题('视频框架');

数字;imshow(前景);标题('前景');

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

前景分割过程并不完美,并且通常包括不良噪声。该示例使用形态开口来消除噪音并填补检测到的物体中的间隙。

se = strel('正方形',3);filteredforeground = imopen(前景,se);数字;imshow(滤过门);标题('干净的前景');

接下来,通过使用Vision.Blobanalysis对象查找与移动汽车对应的每个连接组件的边界框。该对象进一步通过拒绝包含少于150像素的BLOB来筛选检测到的前景。

Blobanalysis = Vision.Blobanalysis('bandingboxoutputport', 真的,......'AreaOutputport', 错误的,'centroidoutputport', 错误的,......'MiniplingBlobarea',150);bbox =步骤(Blobanalysis,filteredforeground);

要突出显示检测到的汽车,我们将在它们周围绘制绿色框。

结果= insertshape(帧,'矩形',bbox,'颜色''绿色');

边界框的数量对应于视频帧中的汽车数量。显示已加工视频帧的左上角的找到的汽车数量。

numcars = size(bbox,1);结果= InsertText(结果,[10 10],numcars,'boxopacity',1,......'字体大小',14);数字;imshow(结果);标题('检测到的汽车');

第3步 - 处理其余的视频帧

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

VideoPlayer = Vision.videoplayer('名称''检测到的汽车');Videoplayer.Position(3:4)= [650,400];%窗口大小:[宽度,高度]se = strel('正方形',3);噪声消除的百分比形态过滤器尽管Hasfame(Videoreader)Frame = ReadFrame(Videoreader);%读取下一个视频帧%检测当前视频帧中的前景前景=步骤(前景detector,帧);%使用形态开口去除前景中的噪音filteredforeground = imopen(前景,se);%检测具有指定最小区域的连接组件,%计算它们的边界框bbox =步骤(Blobanalysis,filteredforeground);%绘制检测到的汽车周围的边界盒结果= insertshape(帧,'矩形',bbox,'颜色''绿色');%显示视频帧中发现的汽车数量numcars = size(bbox,1);结果= InsertText(结果,[10 10],numcars,'boxopacity',1,......'字体大小',14);步骤(导镀器,结果);%显示结果结尾

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