Проект предназначенное на оборудование изображение просачивается MATLAB

Этот пример показывает, как разработать предназначенный на оборудование фильтр изображений с помощью объектов Vision HDL Toolbox™.

Ключевые возможности модели для предназначенной на оборудование обработки видеоданных в MATLAB®:

  • Потоковая передача пиксельного интерфейса: Системные объекты в Vision HDL Toolbox используют пиксельный интерфейс потоковой передачи. Последовательная обработка эффективна для аппаратных проектов, потому что меньше памяти требуется, чтобы хранить пиксельные данные. Последовательный интерфейс включает объекту действовать независимо от размера изображения и формата и делает проект более эластичным к ошибкам синхронизации видео. Для получения дополнительной информации смотрите Пиксельный Интерфейс Потоковой передачи.

  • Функция предназначалась для генерации HDL-кода: Если данные преобразованы в пиксельный поток, можно разработать модель оборудования путем выбора Системных объектов из библиотек Vision HDL Toolbox. Часть проекта, предназначенного для генерации HDL-кода, должна быть в отдельной функции.

  • Преобразование в основанное на кадре видео: Для верификации можно отобразить основанное на кадре видео, или можно сравнить результат аппаратно-совместимого проекта с выводом MATLAB основанная на кадре поведенческая модель. Vision HDL Toolbox обеспечивает Систему object™, который позволяет вам десериализовать вывод своего проекта.

Importdata

Считайте файл изображения в рабочую область. Это демонстрационное изображение содержит 256×256 пиксели. Каждый пиксель является одной интенсивностью представления значения uint8. Чтобы уменьшать скорость симуляции при тестировании, выберите фрагмент миниатюры изображения.

Симуляция последовательного видео на интерпретированном языке MATLAB может быть длительной. Если вы отладили проект с небольшим размером изображения, используйте генерацию кода MEX, чтобы ускорить тестирование с увеличенными изображениями. Смотрите Ускоряют Передающий потоком пиксель Проект Используя MATLAB Coder.

origIm = imread('rice.png');
origImSize = size(origIm)
imActivePixels = 64;
imActiveLines = 48;
inputIm = origIm(1:imActiveLines,1:imActivePixels);
figure
imshow(inputIm,'InitialMagnification',300)
title 'Input Image'
origImSize =

   256   256

Сериализируйте данные

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

Чтобы моделировать со стандартным форматом видео, выберите предопределенный дополнительный формат видео, чтобы совпадать с вашим входным источником. Чтобы моделировать с изображением пользовательского размера, выберите размерности неактивных областей, чтобы окружить изображение. Этот пример использует пользовательское изображение. Свойства объекта visionhdl.FrameToPixels соответствуют размерностям в схеме.

Создайте объект visionhdl.FrameToPixels и установите свойства изображения. Изображение является изображением интенсивности со скалярным значением, представляющим каждый пиксель, поэтому свойство NumComponents набора к 1. Этот пример заполняет изображение миниатюр 5 неактивными строками выше и ниже и 10 неактивными пикселями на передней и задней части каждой строки.

Используйте функцию getparamfromfrm2pix, чтобы получить полезные размеры изображения от объекта сериализатора. Этот синтаксис отбрасывает первые два возвращенных значения и сохраняет только общее количество пикселей в заполненном кадре. Вызовите объект преобразовать изображение в вектор пикселей и вектор управляющих сигналов.

Примечание: Этот синтаксис запускается только в R2016b или позже. Если вы используете более ранний релиз, заменяете каждый вызов объекта с эквивалентным синтаксисом step. Например, замените myObject(x) на step(myObject,x).

frm2pix = visionhdl.FrameToPixels(...
         'NumComponents',1,...
         'VideoFormat','custom',...
         'ActivePixelsPerLine',imActivePixels,...
         'ActiveVideoLines',imActiveLines,...
         'TotalPixelsPerLine',imActivePixels+20,...
         'TotalVideoLines',imActiveLines+10,...
         'StartingActiveLine',6,...
         'FrontPorch',10);

[~,~,numPixelsPerFrame] = getparamfromfrm2pix(frm2pix);
[pixel,ctrl] = frm2pix(inputIm);

Разработайте совместимую с HDL модель

Выберите объект обработки изображений из библиотеки visionhdl. Этот пример использует visionhdl.ImageFilter.

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

Аргументы ctrlIn и ctrlOut объекта являются структурами, которые содержат пять управляющих сигналов. Сигналы указывают на валидность каждого пикселя и местоположение каждого пикселя в кадре.

Установите коэффициенты фильтра visionhdl.ImageFilter выполнять 2×2 операция размытости.

Для этого примера вы не должны изменять свойство LineBufferSize объекта фильтра. Этот параметр не влияет на скорость симуляции, таким образом, это не должно быть изменено при симуляции с маленьким тестовым изображением. При выборе LineBufferSize выберите степень двойки, которая размещает активный размер строки самого большого необходимого формата кадра. Значение по умолчанию, 2048, размещает формат 1080p видео.

function [pixOut,ctrlOut] = HDLTargetedDesign(pixIn,ctrlIn)

  persistent filt2d
  if isempty(filt2d) 
      filt2d = visionhdl.ImageFilter(...
          'Coefficients',ones(2,2)/4,...
          'CoefficientsDataType','Custom',...
          'CustomCoefficientsDataType',numerictype(0,1,2),...
          'PaddingMethod','Symmetric');
  end
    
  [pixOut,ctrlOut] = filt2d(pixIn,ctrlIn);
end

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

pixelOut = zeros(numPixelsPerFrame,1,'uint8');
ctrlOut  = repmat(pixelcontrolstruct,numPixelsPerFrame,1);
 for p = 1:numPixelsPerFrame
    [pixelOut(p),ctrlOut(p)] = HDLTargetedDesign(pixel(p),ctrl(p));
 end

Десериализуйте фильтрованный пиксельный поток

Системный объект visionhdl.PixelsToFrame преобразовывает пиксельный поток в основанное на кадре видео. Используйте этот объект десериализовать отфильтрованные данные из visionhdl.ImageFilter. Установите свойства размера изображения совпадать с тестовым изображением. Вызовите объект преобразовать вывод предназначенной на HDL функции к матрице.

pix2frm = visionhdl.PixelsToFrame(...
         'NumComponents',1,...
         'VideoFormat','custom',...
         'ActivePixelsPerLine',imActivePixels,...
         'ActiveVideoLines',imActiveLines);

[outputIm,validIm] = pix2frm(pixelOut,ctrlOut);

Отображение результатов

Используйте функцию imshow, чтобы отобразить результат операции.

if validIm
    figure
    imshow(outputIm,'InitialMagnification',300)
    title 'Output Image'
end

Сравните с поведенческой моделью

Если у вас есть поведенческая модель проекта, можно сравнить выходные кадры визуально или математически. Для фильтрации можно сравнить visionhdl.ImageFilter с функцией imfilter в Image Processing Toolbox™. Функция imfilter работает с кадром как матрица, и возвратите измененный кадр как матрицу. Можно сравнить эту матрицу с матричным выводом объекта pix2frm.

Чтобы избежать зависимости от лицензии Image Processing Toolbox, этот пример не выполняет сравнивание.

Генерация HDL-кода

Если ваш проект работает в симуляции, используйте HDL Coder™, чтобы сгенерировать HDL-код для функции HDLTargetedDesign. Смотрите Генерируют HDL-код Из MATLAB.

Похожие темы