В этом примере показано, как спроектировать аппаратный фильтр изображений с использованием объектов Vision HDL Toolbox™.
Ключевыми возможностями модели для аппаратно-целевой обработки видео в MATLAB ® являются:
Интерфейс потокового пикселя: Системные объекты в Vision HDL Toolbox используют интерфейс потокового пикселя. Последовательная обработка эффективна для аппаратных проектов, потому что для хранения пиксельных данных требуется меньше памяти. Последовательный интерфейс позволяет объекту работать независимо от размера и формата изображения и делает проект более устойчивым к ошибкам синхронизации видео. Для получения дополнительной информации смотрите Интерфейс потокового пикселя.
Функция, предназначенная для генерации HDL-кода: После преобразования данных в поток пикселей, можно спроектировать модель оборудования, выбрав Системные объекты из библиотек Vision HDL Toolbox. Часть проекта, предназначенная для генерации HDL-кода, должна быть в отдельной функции.
Преобразование в видео на основе фрейма: Для верификации можно отобразить видео на основе фрейма или сравнить результат вашего аппаратно-совместимого проекта с выходом поведенческой модели на основе фрейма MATLAB. Vision HDL Toolbox предоставляет системную object™, которая позволяет десериализовать выход вашего проекта.
Считайте файл изображения в рабочую область. Этот пример изображения содержит 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
The 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);
Выберите объект обработки изображений из visionhdl
библиотека. В этом руководстве используются visionhdl.ImageFilter
.
Создайте функцию, содержащую постоянный образец этого объекта. Функция обрабатывает один пиксель, выполняя один вызов объекта.
The 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
The 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) функция в Image Processing Toolbox™. The imfilter
функция действует на системе координат как матрица и возвращает изменённую систему координат как матрицу. Можно сравнить эту матрицу с матричным выходом pix2frm
объект.
Чтобы избежать зависимости от лицензии Image Processing Toolbox, это руководство не выполняет сравнение.
Когда ваш проект работает в симуляции, используйте HDL- Coder™, чтобы сгенерировать HDL-код для HDLTargetedDesign
функция. См. «Генерация HDL-кода из MATLAB».