visionhdl. PixelStreamAligner

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

Описание

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

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

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

Конструкция

align = visionhdl.PixelStreamAligner возвращает Системный объект, align, который синхронизирует пиксельный поток со ссылочным пиксельным потоком.

Свойства

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

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

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

Методы

шагВыровняйте два потока пиксельных данных
Характерный для всех системных объектов
release

Позвольте изменения значения свойства Системного объекта

Примеры

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

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

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

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');

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

function [pixelOut,ctrlOut] = EdgeDetectandOverlay(pixelIn,ctrlIn)
%EdgeDetectandOverlay 
% Detects edges in an input stream, and overlays the edge data onto the 
% original stream. 
% pixelIn, ctrlIn are a scalar pixel and its associated pixelcontrol structure
% 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