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(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)

Описание

пример

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

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

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

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

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

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

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

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

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

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

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

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

Примечание

Генерация HDL-кода не поддержана для матриц. Поэтому вы не можете управлять на N-by-M окружением непосредственно. Вы можете:

  • Разделите фильтр на вертикальные и горизонтальные составляющие.

  • Конкатенация пикселей окружения в N *M-by-1 вектор.

Типы данных: 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