visionhdl.LineBuffer

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

Описание

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

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

Чтобы извлечь районы скользящего пикселя из видеопотока:

  1. Создайте visionhdl.LineBuffer Объекту и установите его свойства.

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

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

Создание

Описание

пример

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

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

Свойства

расширить все

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

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

Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Использование Системных объектов.

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

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

  • '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 сигналы типа данных. Сигналы описывают валидность пикселя и его местоположение в системе координат. Для получения дополнительной информации смотрите Pixel Control Structure.

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

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

расширить все

Пиксельные значения соседства одиночного столбца, возвращенные как a 1-байт- 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. The shiftEnable сигнал применяется как для заполнения, так и для активных столбцов.

Примечание

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

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

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

release(obj)

расширить все

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

Примеры

свернуть все

The 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™. Объект возвращает по одному столбцу окрестности за раз. Используйте регистр сдвига для сохранения столбцов. Затем вычислите среднее значение соседства пикселей. Вы можете сгенерировать HDL из этой функции.

Примечание.Синтаксис объекта выполняется только в 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