exponenta event banner

visionhdl. HVCounter

Подсчитывает активные пиксельные размеры потокового видео

Описание

visionhdl.HVCounter Система object™ анализирует видеопоток и возвращает текущее число строк на кадр и пикселей на строку. Объект также задерживает управляющие сигналы потока пикселей, чтобы соответствовать результату подсчета. Используйте этот объект для алгоритмов, использующих расположение пикселя в интересующем кадре или области.

Эта форма сигнала показывает сигналы управления потоком пикселей и результирующие выходные сигналы счетчика для первых двух строк видеокадра, который имеет 10 пикселей на строку. visionhdl.HVCounter Системный объект имеет задержку в два цикла для возврата текущих значений счетчика.

Для подсчета активных строк на кадр и активных пикселей на строку потока пикселей:

  1. Создать visionhdl.HVCounter и задайте его свойства.

  2. Вызовите объект с аргументами, как если бы это была функция.

Дополнительные сведения о работе системных объектов см. в разделе Что такое системные объекты?.

Создание

Описание

HVcnt = visionhdl.HVCounter возвращает объект System, который подсчитывает расположение строки и пикселя в пределах кадра или области, представляющей интерес. Объект, использующий значения по умолчанию для свойств, может считать кадры до (511 пикселей) -by- (355 строк).

пример

HVcnt = visionhdl.HVCounter(Name,Value) возвращает объект System, задающий свойства с использованием одной или нескольких пар имя-значение. Заключите каждое имя свойства в отдельные кавычки. Например, HVcnt = visionhdl.HVCounter('ActivePixelsPerLine',1920,'ActiveVideoLines',1080) создает объект, который может считать кадры до (2047 пикселей) -by- (2047 строк).

Свойства

развернуть все

Если не указано иное, свойства не настраиваются, что означает невозможность изменения их значений после вызова объекта. Объекты блокируются при их вызове, и release функция разблокирует их.

Если свойство настраивается, его значение можно изменить в любое время.

Дополнительные сведения об изменении значений свойств см. в разделе Проектирование системы в MATLAB с использованием системных объектов.

Максимальное число пикселей на строку, указанное как положительное целое число. Объект реализует счетчик пикселей, который имеет ceil(log2(ActivePixelsPerLine)) биты. Например, для кадра с 320 пикселями на строку счетчик имеет 9 битов. Для кадра с 1024 пикселями на строку счетчик имеет 11 битов.

Максимальное число строк на кадр, указанное как положительное целое число. Объект реализует счетчик строк, ceil(log2(ActiveVideoLines)) биты. Например, для кадра с 240 пикселями на строку счетчик имеет 8 битов. Для кадра с 1080 пикселями на строку счетчик имеет 11 битов.

Использование

Синтаксис

Описание

пример

[hCount,vCount,ctrlOut] = HVcnt(ctrlIn) обновление горизонтальных и вертикальных счетчиков местоположения hCount и vCount на основе сигналов управления потоком пикселей, ctrlIn. ctrlOut output является отложенной версией ctrlIn который соответствует времени значений счетчика.

Этот системный объект использует структуру для сигналов управления кадрами, связанных с каждым пикселем потока пикселей. Этот интерфейс позволяет объекту работать независимо от размера и формата изображения. Все объекты Vision HDL Toolbox™ System используют один и тот же потоковый интерфейс. Объект принимает и возвращает структуру, содержащую пять управляющих сигналов. Сигналы управления указывают достоверность каждого пикселя и его местоположение в кадре. Чтобы преобразовать матрицу пикселей в поток пикселей и управляющие сигналы, используйте visionhdl.FrameToPixels Системный объект. Полное описание интерфейса см. в разделе Потоковый пиксельный интерфейс.

Входные аргументы

развернуть все

Управляющие сигналы, сопровождающие входной поток пикселей, указанный как pixelcontrol структура, содержащая пять logical сигналы типа данных. Сигналы описывают достоверность пикселя и его местоположение в кадре. Дополнительные сведения см. в разделе Структура пиксельного управления.

Типы данных: struct

Выходные аргументы

развернуть все

Местоположение пикселя в строке, возвращаемое как положительное целое число. Объект очищает число пикселей в начале каждой строки. Если входные пикселы на строку превышают размер счетчика, объект возвращает насыщенное значение до начала следующей строки.

Типы данных: fi(0,ceil(log2(ActiveVideoLines)),0)

Местоположение строки в интересующей рамке или области, возвращаемое как положительное целое число. Объект очищает число строк в начале каждого кадра. Если входные строки на кадр превышают размер счетчика, объект возвращает насыщенное значение до начала следующего кадра.

Типы данных: fi(0,ceil(log2(ActiveVideoLines)),0)

Управляющие сигналы, сопровождающие вывод потока пикселей, возвращаемого в виде pixelcontrol структура, содержащая пять logical сигналы типа данных. Сигналы описывают достоверность пикселя и его местоположение в кадре. Дополнительные сведения см. в разделе Структура пиксельного управления.

Типы данных: struct

Функции объекта

Чтобы использовать функцию объекта, укажите объект System в качестве первого входного аргумента. Например, для освобождения системных ресурсов объекта System с именем obj, используйте следующий синтаксис:

release(obj)

развернуть все

stepЗапустить алгоритм объекта System
releaseДеблокирование ресурсов и разрешение изменений значений свойств объекта системы и входных признаков
resetСброс внутренних состояний объекта System

Примеры

свернуть все

Получение текущего местоположения пикселя в интересующей области (ROI).

Загрузите входной кадр.

frmOrig = imread('coins.png');
[frmActiveLines,frmActivePixels] = size(frmOrig);
imshow(frmOrig)
title 'Input Image'

Создайте объект сериализатора и определите неактивные пиксельные области.

frm2pix = visionhdl.FrameToPixels(...
      'NumComponents',1,...
      'VideoFormat','custom',...
      'ActivePixelsPerLine',frmActivePixels,...
      'ActiveVideoLines',frmActiveLines,...
      'TotalPixelsPerLine',frmActivePixels+20,...
      'TotalVideoLines',frmActiveLines+20,...
      'StartingActiveLine',3,...
      'FrontPorch',10);

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

hPos = 80;
vPos = 60;
hSize = 15;
vSize = 20;
roicoin = visionhdl.ROISelector('Regions',[hPos vPos hSize vSize]);

Сериализируйте тестовый образ, вызвав объект сериализатора. pixIn - вектор значений интенсивности. ctrlIn - вектор структур управляющих сигналов.

[pixIn,ctrlIn] = frm2pix(frmOrig);

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

[~,~,numPixelsPerFrame] = getparamfromfrm2pix(frm2pix);
pixROIOut = uint8(zeros(numPixelsPerFrame,1));
ctrlOut = repmat(pixelcontrolstruct,numPixelsPerFrame,1);
ctrlOut2 = repmat(pixelcontrolstruct,numPixelsPerFrame,1);

Напишите функцию, которая создает и вызывает visionhdl. object™ системы HVCounter. Этот объект возвращает значения горизонтального и вертикального счета, которые представляют текущее местоположение пикселя в интересующей области. Из этой функции можно создать код HDL.

function  [hCount,vCount,ctrlOut] = pixelCount(ctrlIn)
%pixelCount 
% Returns the current active pixel count per line, hCount, and the active
% line count, vCount, based on the pixel-stream control signals.
% ctrlIn and ctrlOut are structures that contain control signals associated
% with the pixel.
% The object implements counters that accommodate the next power-of-two above
% each property value. This configuration can count frames up to (512 
% pixels)-by-(256 lines).
% You can generate HDL code from this function.

  persistent hvcount;
  if isempty(hvcount)
    hvcount = visionhdl.HVCounter(...
      'ActivePixelsPerLine',320,...
      'ActiveVideoLines',240);    
  end
  
 [hCount,vCount,ctrlOut] = hvcount(ctrlIn);
end

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

oldvCount = 0;
for p = 1:numPixelsPerFrame
    [pixROIOut(p),ctrlOut(p)] = roicoin(pixIn(p),ctrlIn(p));
    [hCount,vCount,ctrlOut2(p)] = pixelCount(ctrlOut(p));
    if (vCount ~=0 && vCount ~= oldvCount)
        fprintf('\n Valid pixels in line #%d : ',vCount);
        oldvCount = vCount;
    end
    if hCount ~= 0
        fprintf('#%d ',hCount);
    end
end
 Valid pixels in line #1 : #1 #2 #3 #4 #5 #6 #7 #8 #9 #10 #11 #12 #13 #14 #15 
 Valid pixels in line #2 : #1 #2 #3 #4 #5 #6 #7 #8 #9 #10 #11 #12 #13 #14 #15 
 Valid pixels in line #3 : #1 #2 #3 #4 #5 #6 #7 #8 #9 #10 #11 #12 #13 #14 #15 
 Valid pixels in line #4 : #1 #2 #3 #4 #5 #6 #7 #8 #9 #10 #11 #12 #13 #14 #15 
 Valid pixels in line #5 : #1 #2 #3 #4 #5 #6 #7 #8 #9 #10 #11 #12 #13 #14 #15 
 Valid pixels in line #6 : #1 #2 #3 #4 #5 #6 #7 #8 #9 #10 #11 #12 #13 #14 #15 
 Valid pixels in line #7 : #1 #2 #3 #4 #5 #6 #7 #8 #9 #10 #11 #12 #13 #14 #15 
 Valid pixels in line #8 : #1 #2 #3 #4 #5 #6 #7 #8 #9 #10 #11 #12 #13 #14 #15 
 Valid pixels in line #9 : #1 #2 #3 #4 #5 #6 #7 #8 #9 #10 #11 #12 #13 #14 #15 
 Valid pixels in line #10 : #1 #2 #3 #4 #5 #6 #7 #8 #9 #10 #11 #12 #13 #14 #15 
 Valid pixels in line #11 : #1 #2 #3 #4 #5 #6 #7 #8 #9 #10 #11 #12 #13 #14 #15 
 Valid pixels in line #12 : #1 #2 #3 #4 #5 #6 #7 #8 #9 #10 #11 #12 #13 #14 #15 
 Valid pixels in line #13 : #1 #2 #3 #4 #5 #6 #7 #8 #9 #10 #11 #12 #13 #14 #15 
 Valid pixels in line #14 : #1 #2 #3 #4 #5 #6 #7 #8 #9 #10 #11 #12 #13 #14 #15 
 Valid pixels in line #15 : #1 #2 #3 #4 #5 #6 #7 #8 #9 #10 #11 #12 #13 #14 #15 
 Valid pixels in line #16 : #1 #2 #3 #4 #5 #6 #7 #8 #9 #10 #11 #12 #13 #14 #15 
 Valid pixels in line #17 : #1 #2 #3 #4 #5 #6 #7 #8 #9 #10 #11 #12 #13 #14 #15 
 Valid pixels in line #18 : #1 #2 #3 #4 #5 #6 #7 #8 #9 #10 #11 #12 #13 #14 #15 
 Valid pixels in line #19 : #1 #2 #3 #4 #5 #6 #7 #8 #9 #10 #11 #12 #13 #14 #15 
 Valid pixels in line #20 : #1 #2 #3 #4 #5 #6 #7 #8 #9 #10 #11 #12 #13 #14 #15 

См. также

Блоки

Представлен в R2019a