exponenta event banner

visionhdl. LineBuffer

Хранить видеопостроки и возвращать соседние пикселы

Описание

visionhdl.LineBuffer Система object™ выбирает пиксели окрестности из данных потокового изображения. Он управляет сигналами управления видео и дополнением краев и конвейерно предназначен для высокоскоростного видео. Объект выводит один столбец окрестности за один раз. Чтобы составить окрестности для дальнейшей обработки, используйте shiftEnable сигнал для сохранения выходных столбцов, включая заполнение, в сдвиговом регистре. Этот объект позволяет совместно использовать ресурсы буфера линий, когда проект выполняет несколько операций в одной окрестности.

Следующая форма сигнала показывает visionhdl.LineBuffer объект возвращает столбцы 5 на 1 пиксел, составляющие окрестность 5 на 5. Показанный временной интервал находится в начале (верхнем левом углу) входного кадра. Вывод начинается после того, как объект сохранил два (floor(M/2)) строки и получает начало третьей строки. shiftEnable сигнал подается на два цикла раньше выходного ctrl.valid сигнал, указывающий, что первые два (floor(M/2)) столбцы являются исключительно заполняющими пикселями. Аналогично, shiftEnable остается на высоком уровне в течение двух дополнительных циклов в конце линии.

Чтобы извлечь области скользящего пикселя из видеопотока, выполните следующие действия.

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

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

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

Создание

Описание

пример

linemem = visionhdl.LineBuffer(Name,Value) возвращает объект System буфера строки. Задайте свойства, используя пары имя-значение. Заключите каждое имя свойства в отдельные кавычки.

Пример: linemem = visionhdl.LineBuffer('NeighborhoodSize',[5 5])

Свойства

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

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

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

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

Размер формируемой выходной окрестности, определяемый как 2-элементный вектор строки целочисленных размеров [вертикальная горизонталь]. Объект возвращает вектор столбца из вертикальных элементов. Горизонтальный размер используется для определения заполнения.

Выберите один из этих методов заполнения границы входного изображения.

  • 'Constant' - Интерпретировать пикселы вне кадра изображения как имеющие постоянное значение.

  • 'Replicate' - повторять значение пикселов на краю изображения.

  • 'Symmetric' - Задайте значение пикселов заполнения для отражения края изображения.

  • 'None' - Исключить логику заполнения. Объект не устанавливает для пикселов вне кадра изображения какое-либо конкретное значение. Эта опция уменьшает аппаратные ресурсы, используемые объектом, и блокирование, требуемое между кадрами, но влияет на точность выходных пикселей на краях кадра. Для поддержания синхронизации потока пикселей выходной кадр имеет тот же размер, что и входной кадр. Однако, чтобы избежать использования пикселей, вычисленных из неопределенных значений заполнения, маскируйте n/2 пикселей вокруг края кадра для нисходящих операций, где n - размер ядра операций. Дополнительные сведения см. в разделе Увеличение пропускной способности при отсутствии заполнения.

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

Значение, используемое для наложения границы входного изображения, заданного как целое число. Объект переводит это значение в тот же тип данных, что и входной пиксель.

Зависимости

Это свойство допустимо при установке PaddingMethod кому 'Constant'.

Укажите степень два, которая соответствует количеству активных пикселов в одной горизонтальной строке.

Если задано значение, которое не является степенью два, объект использует следующую наибольшую степень два.

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

Синтаксис

Описание

пример

[pixelOut,ctrlOut,shiftEnable] = lineMem(pixelIn,ctrlIn) возвращает вектор столбца пикселей в ядре и сопутствующие управляющие сигналы.

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

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

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

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

Один пиксель изображения в потоке пикселей, заданный как скалярное значение, представляющее интенсивность.

double и single типы данных поддерживаются для моделирования, но не для генерации кода HDL.

Типы данных: uint8 | uint16 | uint32 | int8 | int16 | int32 | fi | logical | double | single

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

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

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

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

Значения пикселя окрестности одного столбца, возвращаемые в виде вектора 1-by-M, где M - вертикальный размер окрестности. Тип данных выходного пикселя совпадает с типом данных входных пикселей.

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

Примечание

Генерация кода HDL поддерживается для небольших матриц, но матричные операции могут повлиять на производительность оборудования и использование ресурсов. Поэтому сведите к минимуму, насколько ваша конструкция работает непосредственно в районе N-by-M. Вы можете:

  • Разделите фильтр на вертикальные и горизонтальные компоненты.

  • Объедините соседние пикселы в вектор N * M-by-1.

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

Типы данных: int8 | int16 | int32 | uint8 | uint16 | uint32 | logical | double | single

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

Столбцы, содержащие только пиксели заполнения, не утверждаются ctrl.valid. shiftEnable сигнал устанавливается как для заполняющих, так и для активных столбцов.

Примечание

Для большей части кадра объект возвращает входные управляющие сигналы, поступившие с нижним пикселем столбца. Однако к финалу floor(M/2) строки каждого кадра, нижний пиксель столбца является пикселем заполнения, поэтому объект генерирует выходные сигналы управления. Объект генерирует последовательно утвержденный ctrl.valid сигнал для допустимых пикселов в каждой строке.

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

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

release(obj)

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

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

Примеры

свернуть все

visionhdl.LineBuffer Система object™ сохраняет видеолинии и возвращает скользящие области для операций с изображениями на основе ядра. В этом примере вычисляется среднее значение для каждого района.

Импорт источника изображения и настройка объектов сериализатора и десериализатора.

frmOrig = imread('rice.png');
frmActivePixels = 48;
frmActiveLines = 32;
frmIn = frmOrig(1:frmActiveLines,1:frmActivePixels);
figure
imshow(frmIn,'InitialMagnification',300)
title 'Input Image'

frm2pix = visionhdl.FrameToPixels(...
      'NumComponents',1,...
      'VideoFormat','custom',...
      'ActivePixelsPerLine',frmActivePixels,...
      'ActiveVideoLines',frmActiveLines,...
      'TotalPixelsPerLine',frmActivePixels+10,...
      'TotalVideoLines',frmActiveLines+10,...
      'StartingActiveLine',6,...
      'FrontPorch',5);
[~,~,numPixPerFrm] = getparamfromfrm2pix(frm2pix);

pix2frm = visionhdl.PixelsToFrame(...
      'NumComponents',1,...
      'VideoFormat','custom',...
      'ActivePixelsPerLine',frmActivePixels,...
      'ActiveVideoLines',frmActiveLines);

Запишите функцию, которая создает и вызывает системный object™. Объект одновременно возвращает один столбец окрестности. Для сохранения столбцов используйте сдвиговый регистр. Затем вычислите среднее значение пиксельной окрестности. Из этой функции можно создать ЛПВП.

Примечание.Синтаксис этого объекта выполняется только в R2016b или более поздних версиях. При использовании более ранней версии замените каждый вызов объекта эквивалентным step синтаксис. Например, заменить myObject(x) с step(myObject,x).

         
function  [pixOut,ctrlOut] = AvgFilter(pixIn,ctrlIn)
%AvgFilter
% Calculates the average pixel value for each 3x3 kernel
% pixIn and pixOut are scalar uint8 pixel values.
% ctrlIn and ctrlOut are structures that contain control signals associated
% with the pixel.
% You can generate HDL code from this function.

  persistent linemem;
  if isempty(linemem)
     linemem = visionhdl.LineBuffer;
  end
  persistent dataShiftReg; 
  if isempty(dataShiftReg)
      % use typeof(pixIn)?
     dataShiftReg = fi(zeros(3,3),0,8,0);
  end
  % HDL code gen does not support arrays of structs
  persistent controlShiftReg1;
  persistent controlShiftReg2;    
  persistent controlShiftReg3;
  if isempty(controlShiftReg1)
     controlShiftReg1 = pixelcontrolstruct();
     controlShiftReg2 = pixelcontrolstruct();
     controlShiftReg3 = pixelcontrolstruct();
  end
  
  persistent div9;
  if isempty(div9)
      div9 = fi(1/9,0,12,15);
  end

 % Advance shift registers 
 dataShiftReg(:,2:end) = dataShiftReg(:,1:end-1);
 controlShiftReg3 = controlShiftReg2;
 controlShiftReg2 = controlShiftReg1;
 
 % Fetch next column
 [dataShiftReg(:,1),controlShiftReg1] = linemem(fi(pixIn,0,8,0),ctrlIn);
 
 % Calculate the average over the neighborhood
 pixOut = uint8((sum(dataShiftReg(:),'native')).*div9);
 ctrlOut = controlShiftReg3;

end

Обработка изображения путем вызова функции для каждого пикселя.

pixOutVec = ones(numPixPerFrm,1,'uint8');
ctrlOutVec = repmat(pixelcontrolstruct(false,false,false,false,false),numPixPerFrm,1);

[pixInVec,ctrlInVec] = frm2pix(frmIn);
for p = 1:numPixPerFrm
    [pixOutVec(p),ctrlOutVec(p)] = AvgFilter(pixInVec(p),ctrlInVec(p));
end

Повторно создайте отфильтрованный кадр.

[frmOut,frmValid] = step(pix2frm,pixOutVec,ctrlOutVec);

if frmValid
    figure;
    imshow(frmOut,'InitialMagnification',300)
    title 'Output Image'
end

Алгоритмы

Объект хранит M - 1 строк допустимых пикселей, как указано размером окрестности. Он добавляет биты заполнения на краю кадра. Объект возвращает первый выходной столбец, как только он может сформировать полный столбец окрестности, что происходит в начале входной строки floor(M/2).

См. также

Блоки

Объекты

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