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. Вызовите объект с аргументами, как будто это была функция.

Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты? MATLAB.

Создание

Описание

пример

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

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

Свойства

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

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

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

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

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

Метод для дополнения контура входного изображения.

  • 'Constant' — Интерпретируйте пиксели вне фрейма изображения как наличие постоянного значения.

  • 'Replicate' — Повторите значение пикселей в ребре изображения.

  • 'Symmetric' — Заполните входную матрицу ее зеркальным отображением.

Для получения дополнительной информации об этих методах смотрите, что Ребро Дополняет.

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

Зависимости

Это свойство допустимо, когда вы устанавливаете PaddingMethod к 'Constant'.

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

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

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

Описание

пример

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

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

Входные параметры

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

Один пиксель изображения в пиксельном потоке, заданном как интенсивность представления скалярного значения.

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

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

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

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

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

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

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

Примечание

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

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

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

release(obj)

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

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

Примеры

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

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

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

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