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'pixels'.

Объект реализует кольцевой буфер 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