Этот пример показывает, как обнаружить и считать автомобили в видео последовательности с помощью приоритетного детектора на основе Гауссовых моделей смеси (GMMs).
Обнаружение и подсчет автомобилей могут использоваться, чтобы анализировать шаблоны трафика. Обнаружение является также первым шагом до выполнения более сложных задач, таких как отслеживание или классификация автомобилей их типом.
Этот пример показывает, как использовать приоритетный детектор и анализ блоба, чтобы обнаружить и считать автомобили в видео последовательности. Это принимает, что камера является стационарной. Пример фокусируется на обнаружении объектов. Чтобы узнать больше об отслеживании объектов, смотрите пример, названный Основанный на движении Несколько Объектное Отслеживание.
Вместо того, чтобы сразу обработать целое видео, пример запускается путем получения начального кадра видео, в котором движущиеся объекты сегментируются происхождения. Это помогает постепенно ввести шаги, используемые, чтобы обработать видео.
Приоритетный детектор требует определенного числа кадров видео в порядке инициализировать Гауссову модель смеси. Этот пример использует первые 50 кадров, чтобы инициализировать три режима Gaussian в модели смеси.
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
После обучения детектор начинает выводить более надежные результаты сегментации. Две фигуры ниже показа один из кадров видео и приоритетной маски вычисляются детектором.
figure; imshow(frame); title('Video Frame');
figure; imshow(foreground); title('Foreground');
Приоритетный процесс сегментации не совершенен и часто включает нежелательный шум. Пример использует морфологическое открытие, чтобы удалить шум и заполнить разрывы в обнаруженных объектах.
se = strel('square', 3); filteredForeground = imopen(foreground, se); figure; imshow(filteredForeground); title('Clean Foreground');
Затем, мы находим ограничительные рамки каждого связанного компонента, соответствующего движущемуся автомобилю при помощи видения. Объект BlobAnalysis. Объектные дальнейшие фильтры обнаруженный передний план путем отклонения блобов, которые содержат меньше чем 150 пикселей.
blobAnalysis = vision.BlobAnalysis('BoundingBoxOutputPort', true, ... 'AreaOutputPort', false, 'CentroidOutputPort', false, ... 'MinimumBlobArea', 150); bbox = step(blobAnalysis, filteredForeground);
Чтобы подсветить обнаруженные автомобили, мы чертим зеленые поля вокруг них.
result = insertShape(frame, 'Rectangle', bbox, 'Color', 'green');
Количество ограничительных рамок соответствует количеству автомобилей, найденных в кадре видео. Мы отображаем количество найденных автомобилей в левом верхнем углу обработанного кадра видео.
numCars = size(bbox, 1); result = insertText(result, [10 10], numCars, 'BoxOpacity', 1, ... 'FontSize', 14); figure; imshow(result); title('Detected Cars');
В последнем шаге мы обрабатываем остающиеся кадры видео.
videoPlayer = vision.VideoPlayer('Name', 'Detected Cars'); videoPlayer.Position(3:4) = [650,400]; % window size: [width, height] se = strel('square', 3); % morphological filter for noise removal while ~isDone(videoReader) frame = step(videoReader); % read the next video frame % Detect the foreground in the current video frame foreground = step(foregroundDetector, frame); % Use morphological opening to remove noise in the foreground filteredForeground = imopen(foreground, se); % Detect the connected components with the specified minimum area, and % compute their bounding boxes bbox = step(blobAnalysis, filteredForeground); % Draw bounding boxes around the detected cars result = insertShape(frame, 'Rectangle', bbox, 'Color', 'green'); % Display the number of cars found in the video frame numCars = size(bbox, 1); result = insertText(result, [10 10], numCars, 'BoxOpacity', 1, ... 'FontSize', 14); step(videoPlayer, result); % display the results end release(videoReader); % close the video file
Выходные видеодисплеи ограничительные рамки вокруг автомобилей. Это также отображает количество автомобилей в левом верхнем углу видео.