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) возвращается линия буферизуют Системный объект. Установите свойства с помощью пар "имя-значение". Заключите каждое имя свойства в одинарные кавычки.

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

Свойства

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

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

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

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

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

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

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

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

  • 'Symmetric' — Установите значение дополнительных пикселей, чтобы зеркально отразить ребро изображения.

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

  • '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 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