Объектный подсчет

Этот пример показывает, как использовать морфологические операции, чтобы считать объекты в видеопотоке.

Введение

Входной видеопоток содержит изображения главных продуктов. В этом примере вы используете цилиндр морфологическая операция, чтобы удалить неровное освещение и вводную морфологическую операцию, чтобы удалить разрывы между главными продуктами. Вы затем преобразовываете изображения в двоичный файл, с помощью различного порога для каждого кадра. Если этот порог применяется, вы считаете количество главных продуктов и вычисляете центроид каждого главного продукта.

Инициализация

Используйте эти следующие разделы кода, чтобы инициализировать необходимые переменные и Системные объекты.

Создайте Системный объект, чтобы считать видео из avi файла.

filename = 'staples.mp4';
hVideoSrc = vision.VideoFileReader(filename, ...
                                   'ImageColorSpace', 'Intensity',...
                                   'VideoOutputDataType', 'single');

Создайте объект системы анализа блоба считать главные продукты и найти их центроиды.

hBlob = vision.BlobAnalysis( ...
            'AreaOutputPort', false, ...
            'BoundingBoxOutputPort', false, ...
            'OutputDataType', 'single');

Создайте Системный объект, чтобы отобразить выходное видео.

hVideoOut = vision.VideoPlayer('Name', 'Counted Staples');
hVideoOut.Position(3:4) = [650 350];

Потоковый цикл обработки

Здесь вы вызываете цикл обработки, чтобы считать главные продукты во входном видео. Этот цикл использует Системные объекты, которых вы инстанцировали.

Цикл останавливается, когда вы достигаете конца входного файла, который обнаруживается Системным объектом BinaryFileReader.

while ~isDone(hVideoSrc)
    I = step(hVideoSrc);
    Im = imtophat(I, strel('square',18));
    Im = imopen(Im, strel('rect',[15 3]));
    th = multithresh(Im); % Determine threshold using Otsu's method
    BW = Im > th;
    Centroids = step(hBlob, BW);               % Blob Analysis
    
    StaplesCount = int32(size(Centroids,1));  
    txt = sprintf('Staple count: %d', StaplesCount);
    It = insertText(I,[10 280],txt,'FontSize',22); % Display staples count
             
    Centroids(:, 2) = Centroids(1,2);            % Align markers horizontally

    It = insertMarker(It, Centroids, 'o', 'Size', 6, 'Color', 'r');
    It = insertMarker(It, Centroids, 'o', 'Size', 5, 'Color', 'r');
    It = insertMarker(It, Centroids, '+', 'Size', 5, 'Color', 'r');
    
    step(hVideoOut, It);
end

Релиз

Здесь вы вызываете метод релиза на Системных объектах, чтобы закрыть любые открытые файлы и устройства.

release(hVideoSrc);

Сводные данные

Выходное видео показывает отдельные главные продукты, отмеченные круговым и знаком "плюс". Это также отображает количество главных продуктов, которые появляются в каждом кадре.