exponenta event banner

Проектирование аппаратного фильтра изображений в MATLAB

В этом примере показано, как проектировать аппаратный фильтр изображений с использованием объектов Vision HDL Toolbox™.

Основные характеристики модели аппаратной обработки видео в MATLAB ®:

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

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

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

Импорт данных

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

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

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выберите мощность 2, которая соответствует размеру активной линии наибольшего требуемого формата кадра. Значение по умолчанию 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(Панель инструментов обработки изображений) в Toolbox™ обработки изображений. imfilter функция работает с кадром как с матрицей и возвращает измененный кадр как с матрицей. Можно сравнить эту матрицу с выводом матрицы pix2frm объект.

Во избежание зависимости от лицензии панели инструментов обработки изображений в данном учебном пособии сравнение не выполняется.

Создание кода HDL

Как только ваш проект работает в моделировании, используйте Coder™ HDL для создания кода HDL для HDLTargetedDesign функция. См. раздел Создание кода HDL из MATLAB.

Связанные темы