visionhdl.PixelStreamAligner

Выровняйте два потока пиксельных данных

Описание

visionhdl.PixelStreamAligner Система object™ синхронизирует потоки на два пикселя путем задержки одного потока, чтобы совпадать с синхронизацией ссылочного потока. Много алгоритмов Vision HDL Toolbox™ задерживают пиксельный поток, и сумма задержки может измениться, когда вы настраиваете параметры алгоритма. Можно использовать этот объект выровнять потоки для того, чтобы наложить, сравнить или объединить два потока такой как в Гауссовой операции размытости. Используйте задержанный поток в качестве refPixel и refCtrl аргументы. Используйте более ранний поток в качестве pixelIn и ctrlIn аргументы.

Эта схема формы волны показывает входные потоки, pixelIn и refPixelIn, и их связанные управляющие сигналы. Ссылочный входной кадр запускается позже, чем pixelIn система координат. Выходные сигналы показывают, что объект задерживает pixelIn совпадать со ссылочным потоком, и что оба потока вывода совместно используют управляющие сигналы. Форма волны показывает короткую задержку между входом refCtrl и выход refCtrl. В этой симуляции, чтобы вместить задержку четырех линий между входными потоками, MaxNumberofLines свойство должно быть установлено в по крайней мере 4.

Для получения дополнительной информации на пиксельной шине управления и размерностях видеокадра, смотрите Пиксельный Интерфейс Потоковой передачи.

Выровнять два потока пиксельных данных:

  1. Создайте visionhdl.PixelStreamAligner объект и набор его свойства.

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

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

Создание

Синтаксис

align = visionhdl.PixelStreamAligner(Name,Value)

Описание

align = visionhdl.PixelStreamAligner(Name,Value) создает Системный объект, который синхронизирует пиксельный поток со ссылочным пиксельным потоком. Установите свойства с помощью одной или нескольких пар "имя-значение". Заключите каждое имя свойства в одинарные кавычки. Например, 'MaxNumberOfLines',16 устанавливает буферную глубину, которая вмещает перемещение синхронизации между двумя входными потоками.

Свойства

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

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

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

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

Размер буфера памяти линии в виде степени двойки, которая вмещает количество активных пикселей в горизонтальной линии. Если вы задаете значение, которое не является степенью двойки, объект использует следующую самую большую степень двойки. Объект реализует кольцевой буфер 2M местоположения, где M является MaxNumberofLines + log2 (LineBufferSize).

Буферная глубина, которая вмещает перемещение синхронизации между входными потоками в виде положительного целого числа. Объект реализует кольцевой буфер 2M местоположения, где M является MaxNumberofLines + log2 (LineBufferSize), и буфер адресов линии MaxNumberofLines местоположения. Круговая память хранит ранее входные линии, пока ссылочные управляющие сигналы не прибывают. Буфер адресов линии хранит адрес запуска каждой линии. Когда ссылочные управляющие сигналы прибывают, объект использует сохраненный адрес, чтобы считать и отправить задержанную линию. Это свойство должно вместить различие в синхронизации между двумя входными потоками, включая внутреннюю задержку, прежде чем объект прочитает первую строку. В процессе моделирования объект предупреждает, когда переполнение происходит. Чтобы избежать условия переполнения, увеличьте MaxNumberofLines. Задержка между потоками не может превысить целую систему координат.

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

Синтаксис

[pixelOut,refOut,ctrlOut] = align(pixelIn,ctrlIn,refPixel,refCtrl)

Описание

[pixelOut,refOut,ctrlOut] = align(pixelIn,ctrlIn,refPixel,refCtrl) синхронизирует пиксельный поток со ссылочным потоком, refPixel и refCtrl, путем задержки первого входа, pixelIn, выровняться со ссылочным входом. Получившиеся выровненные пиксельные потоки, pixelOut и refOut, совместно используйте управляющие сигналы, ctrlOut. Можно использовать этот объект выровнять потоки для наложения или сравнения.

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

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

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

Поток входного пикселя в виде скалярного значения интенсивности или вектора-строки из трех значений, представляющих один пиксель в R'G'B' или цветовом пространстве Y'CbCr. Поскольку объект задерживает этот пиксельный поток, чтобы совпадать с управляющими сигналами ссылочного потока, refPixel pixelIn должен быть ранее этих двух потоков.

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

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

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

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

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

Входной пиксель в виде скалярного значения интенсивности или вектора-строки из трех значений, представляющих один пиксель в R'G'B' или цветовом пространстве Y'CbCr. Поскольку объект задерживает pixelIn введите поток, чтобы совпадать со ссылочными управляющими сигналами, refPixel должен быть позже этих двух потоков. Справочные данные и его управляющие сигналы проходят через объект с маленькой задержкой.

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

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

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

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

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

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

Выходной пиксель, возвращенный как скалярное значение интенсивности или вектор-строка из трех значений, представляющих один пиксель в R'G'B' или цветовом пространстве Y'CbCr.

Тип данных совпадает с типом данных pixelIn.

Выведите ссылочный пиксель, возвращенный как скалярное значение интенсивности или вектор-строка из трех значений, представляющих один пиксель в R'G'B' или цветовом пространстве Y'CbCr.

Тип данных совпадает с типом данных refIn.

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

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

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

release(obj)

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

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

Примеры

свернуть все

Наложите обработанный видеопоток на входном потоке.

Подготовьте тестовое изображение путем выбора фрагмента файла изображения.

frmActivePixels = 64;
frmActiveLines = 48;
frmOrig = imread('rice.png');
frmInput = frmOrig(1:frmActiveLines,1:frmActivePixels);
figure
imshow(frmInput,'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);

Сериализируйте тестовое изображение. pixIn вектор из значений интенсивности. ctrlIn вектор из структур управляющего сигнала. Предварительно выделите векторы для выходных сигналов.

[pixIn,ctrlIn] = frm2pix(frmInput);

[~,~,numPixelsPerFrame] = getparamfromfrm2pix(frm2pix);
ctrlOut = repmat(pixelcontrolstruct,numPixelsPerFrame,1);
overlayOut = zeros(numPixelsPerFrame,1,'uint8');

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

function [pixelOut,ctrlOut] = EdgeDetectandOverlay(pixelIn,ctrlIn)
% EdgeDetectandOverlay 
% Detect edges in an input stream, and overlay the edge data onto the 
% original stream. 
% pixelIn and ctrlIn are a scalar pixel and its associated pixelcontrol
% structure, respectively.
% You can generate HDL code from this function.

  persistent align
  if isempty(align)
    align = visionhdl.PixelStreamAligner;
  end    
  
  persistent find_edges
  if isempty(find_edges)
    find_edges = visionhdl.EdgeDetector;
  end
  
  [edgeOut,edgeCtrl] = find_edges(pixelIn,ctrlIn);
  [origOut,alignedEdgeOut,ctrlOut] = align(pixelIn,ctrlIn,edgeOut,edgeCtrl);
  if (alignedEdgeOut)
      pixelOut = uint8(0); % Set edge pixels to black
  else
      pixelOut = origOut;
  end
end

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

for p = 1:numPixelsPerFrame
    [overlayOut(p),ctrlOut(p)] = EdgeDetectandOverlay(pixIn(p),ctrlIn(p));
end

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

pix2frm = visionhdl.PixelsToFrame( ...
      'NumComponents',1, ...
      'VideoFormat','custom', ...
      'ActivePixelsPerLine',frmActivePixels, ...
      'ActiveVideoLines',frmActiveLines);
[frmOutput,frmValid] = pix2frm(overlayOut,ctrlOut);
if frmValid
    figure
    imshow(frmOutput,'InitialMagnification',300)
    title 'Output Image'
end

Смотрите также

Блоки

Объекты

Введенный в R2017a