exponenta event banner

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) создает объект System, синхронизирующий поток пикселей с потоком опорных пикселей. Задайте свойства, используя одну или несколько пар имя-значение. Заключите каждое имя свойства в отдельные кавычки. Например, '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. Объект принимает и возвращает значение скалярного пикселя и управляющие сигналы в виде структуры, содержащей пять сигналов. Сигналы управления указывают достоверность каждого пикселя и его местоположение в кадре. Чтобы преобразовать матрицу пикселей в поток пикселей и управляющие сигналы, используйте 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 вход.

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

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

release(obj)

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

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

Примеры

свернуть все

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

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

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

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

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