В этом примере показано, как спроектировать алгоритмы обработки видео в пиксельных потоках, используя объекты Vision HDL Toolbox™ в среде MATLAB ® и сгенерировать HDL-код из проекта.
Этот пример также проверяет проект, используя маленькое миниатюрное изображение, чтобы уменьшить время симуляции. Чтобы симулировать большие изображения, такие как формат видео 1080p, используйте MATLAB Coder™, чтобы ускорить симуляцию. Смотрите Ускорение потокового проекта пикселей с помощью MATLAB Coder.
На испытательном стенде PixelStreamingDesignHDLTestBench.m
объект videoIn считывает каждую систему координат из источника видео, и объект скалера уменьшает эту систему координат с 240p до размера миниатюры для скорости симуляции. Это миниатюрное изображение передается объекту frm2pix, который преобразует полную систему координат изображения в поток пикселей и структур управления. Функция PixelStreamingDesignHDLDesign.m
затем вызывается, чтобы обработать один пиксель (и связанную с ним структуру управления) за раз. После того, как мы обработаем весь поток пикселей и собираем выходной поток, объект pix2frm преобразует выходной поток в полнокадровое видео. Объект средство просмотра отображает выходные и оригинальные изображения один за другим.
Рабочий процесс выше реализован в следующих линиях PixelStreamingDesignHDLTestBench.m
.
... for f = 1:numFrm frmFull = step(videoIn); % Get a new frame frmIn = step(scaler,frmFull); % Reduce the frame size
[pixInVec,ctrlInVec] = step(frm2pix,frmIn); for p = 1:numPixPerFrm [pixOutVec(p),ctrlOutVec(p)] = PixelStreamingDesignHDLDesign(pixInVec(p),ctrlInVec(p)); end frmOut = step(pix2frm,pixOutVec,ctrlOutVec);
step(viewer,[frmIn frmOut]); end ...
И frm2pix, и pix2frm используются для преобразования между полным кадром и пиксельным потоком областей. Внутренний цикл for-loop выполняет обработку потока пикселей. Остальная часть испытательного стенда выполняет обработку полного кадра (т.е. videoIn, scaler и viewer).
Перед завершением испытательного стенда отображается частота систем координат, чтобы проиллюстрировать скорость симуляции.
ПиксельныеФункция, заданная в PixelStreamingDesignHDLDesign.m
принимает поток пикселей и пять управляющих сигналов и возвращает измененный поток пикселей и сигналы управления. Дополнительные сведения о протоколе потокового пикселя, используемом системными объектами из Vision HDL Toolbox, см. в разделе Интерфейс потокового пикселя.
В этом примере функция содержит объект Gamma Corrector System.
В особом внимании этого примера находится рабочий процесс, а не сам проект алгоритма. Поэтому проект кода довольно прост. Как только вы знакомы с рабочим процессом, легко реализовать расширенные алгоритмы видео, используя возможности, предоставляемые системными объектами из Vision HDL Toolbox.
Симулируйте проект с испытательным стендом до генерации HDL-кода, чтобы убедиться в отсутствии ошибок во время выполнения.
PixelStreamingDesignHDLTestBench;
10 frames have been processed in 32.53 seconds. Average frame rate is 0.31 frames/second.
Средство просмотра отображает оригинальное видео слева, а выход справа. Ясно видно, что операция приводит к более яркому изображению.
Введите следующую команду, чтобы создать новый HDL Coder™ проект,
coder -hdlcoder -new PixelStreamingDesignProject
Затем добавьте файл PixelStreamingDesignHDLDesign.m
к проекту в качестве функции MATLAB и PixelStreamingDesignHDLTestBench.m
в качестве испытательного стенда MATLAB.
Руководство по созданию и заполнению проектов MATLAB HDL Coder см. в разделе Начало работы с MATLAB в HDL-процессе (HDL Coder).
Запустите советник по рабочим процессам. В Workflow Advisor щелкните правой кнопкой мыши шаг 'Генерация Кода'. Выберите опцию «Run to selected task», чтобы выполнить все шаги от начала до генерации HDL-кода.
Просмотрите сгенерированный HDL-код, щелкнув по ссылкам в окне журнала.