我在试着在video frame
.里探测车辆更具体地,是检测车辆,然后计算检测到的车辆的数量。
顺便说一下,我使用的是MathWorks:打开这个链接的MATLAB代码。
所以你可以在上面的链接中找到更多细节..。
假设我们提取了一个特定的视频帧。我需要的是,通过增加更多的行来扩展代码,这些行可以进一步指定检测到的车辆的类型(如果是汽车或轨道)?例如)。
Concerning the original code used by Mathworks:
1)导入视频(待处理)并初始化前景颜色检测器:
这样做的目的是为了使视频的处理更加容易。因此,我们不需要处理整个视频,而是可以将我们的处理应用到一个框架中,在这个帧中,所有的运动对象都被从背景中分割出来。前景检测器需要一定数量的视频帧来初始化高斯混合模型。此示例使用前50帧初始化混合模型中的三种高斯模式。
foregroundDetector = vision.ForegroundDetector('NumGaussians', 3, ...
'NumTrainingFrames', 50);
videoReader = vision.VideoFileReader('visiontraffic.avi');
for i = 1:150
frame = step(videoReader); % read the next video frame
foreground = step(foregroundDetector, frame);
end
2)视频帧中的车辆检测:
不幸的是,前景颜色检测器并不完美,因为它提供了一些附加噪声。因此,为了消除添加的噪声,执行“形态学概念”将是很有趣的:
se = strel('square', 3);
filteredForeground = imopen(foreground, se);
figure; imshow(filteredForeground); title('Clean Foreground');
3)然后,利用vision.BlobAnalysis对象,找到与运动汽车相对应的每个连通部件的包围盒。该对象通过拒绝包含小于150个像素的块来进一步过滤检测到的前景。。
blobAnalysis = vision.BlobAnalysis('BoundingBoxOutputPort', true, ...
'AreaOutputPort', false, 'CentroidOutputPort', false, ...
'MinimumBlobArea', 150);
bbox = step(blobAnalysis, filteredForeground);
( 4)让我们用一个小的矩形框来突出显示每个检测到的车辆:
result = insertShape(frame, 'Rectangle', bbox, 'Color', 'green');
5)计算视频帧中出现的车辆数量:
numCars = size(bbox, 1);
result = insertText(result, [10 10], numCars, 'BoxOpacity', 1, ...
'FontSize', 14);
非常感谢你的帮助。
发布于 2014-12-08 02:41:27
这个问题是一个积极的研究领域,有许多可能的方法。一种可能是训练分类器来区分汽车和卡车。您可以使用这个演示如何使用HOG特征和SVM分类器对数字进行分类的示例开始工作。
https://stackoverflow.com/questions/27185316
复制相似问题