Подсчет Объектов

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

Введение

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

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

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

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

filename = 'staples.mp4';
hVideoSrc = VideoReader(filename);

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

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

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

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

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

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

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

while hasFrame(hVideoSrc)
    I = rgb2gray(readFrame(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

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

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