В этом примере показано, как спроектировать предназначенный на оборудование фильтр изображений с помощью объектов 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
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
.
Создайте функцию, содержащую персистентный экземпляр этого объекта. Функциональные процессы один пиксель путем выполнения одного вызова объекта.
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) функция в Image Processing Toolbox™. imfilter
функция работает с системой координат как матрица, и возвратите модифицированную систему координат как матрицу. Можно сравнить эту матрицу с матричным выходом pix2frm
объект.
Чтобы избежать зависимости от лицензии Image Processing Toolbox, этот пример не выполняет сравнивание.
Если ваш проект работает в симуляции, используйте HDL Coder™, чтобы сгенерировать HDL-код для HDLTargetedDesign
функция. Смотрите Генерируют HDL-код Из MATLAB.