Проект предназначенное на оборудование изображение просачивается 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.

Похожие темы