Этот пример показывает, как использовать морфологические операции, чтобы считать объекты в видеопотоке.
Входной видеопоток содержит изображения главных продуктов. В этом примере вы используете цилиндр морфологическая операция, чтобы удалить неровное освещение и вводную морфологическую операцию, чтобы удалить разрывы между главными продуктами. Вы затем преобразовываете изображения в двоичный файл, с помощью различного порога для каждого кадра. Если этот порог применяется, вы считаете количество главных продуктов и вычисляете центроид каждого главного продукта.
Используйте эти следующие разделы кода, чтобы инициализировать необходимые переменные и Системные объекты.
Создайте Системный объект, чтобы считать видео из 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);
Выходное видео показывает отдельные главные продукты, отмеченные круговым и знаком "плюс". Это также отображает количество главных продуктов, которые появляются в каждом кадре.