visionhdl.PixelStreamAligner

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

Описание

The 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 сигналы типа данных. Сигналы описывают валидность пикселя и его местоположение в системе координат. Для получения дополнительной информации смотрите Pixel Control Structure.

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

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

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

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

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

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

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

расширить все

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

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

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

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

Пиксельный поток управляет сигналами для обоих выходных потоков, возвращаемым как структура, содержащая пять logical сигналы. Для получения дополнительной информации смотрите Pixel Control Structure. Эти сигналы являются задержанной версией 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

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

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