В этом примере показано, как проектировать алгоритмы обработки видео в виде потока пикселей с использованием объектов Vision HDL Toolbox™ в среде MATLAB ® и генерировать код HDL из проекта.
В этом примере также выполняется тестирование конструкции с использованием небольшого миниатюрного изображения для сокращения времени моделирования. Для моделирования больших изображений, например формата видео 1080p, используйте MATLAB Coder™ для ускорения моделирования. См. раздел Ускорение проектирования с потоковой передачей пикселей с помощью кодера MATLAB.
На испытательном стенде PixelStreamingDesignHDLTestBench.mобъект videyIn считывает каждый кадр из источника видео, а объект scaler уменьшает этот кадр с 240p до размера миниатюры для скорости моделирования. Это миниатюрное изображение передается объекту frm2pix, который преобразует полный кадр изображения в поток пикселей и структур управления. Функция PixelStreamingDesignHDLDesign.m затем вызывается для обработки одного пикселя (и связанной с ним структуры управления) за один раз. После обработки всего потока пикселей и сбора выходного потока объект pix2frm преобразует выходной поток в полнокадровое видео. Объект Viewer отображает выходные и исходные изображения бок о бок.
Приведенный выше поток операций реализован в следующих строках: 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 выполняет обработку потока пикселей. Остальная часть тестового стенда выполняет полнокадровую обработку (т.е. videyIn, scaler и viewer).
Перед завершением тестового стенда отображается частота кадров, иллюстрирующая скорость моделирования.
Функция, определенная в PixelStreamingDesignHDLDesign.m принимает поток пикселей и пять управляющих сигналов и возвращает модифицированный поток пикселей и управляющие сигналы. Дополнительные сведения о потоковом пиксельном протоколе, используемом системными объектами на панели инструментов Vision HDL, см. в разделе Потоковый пиксельный интерфейс.
В этом примере функция содержит объект 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 см. в разделе Начало работы с MATLAB в Workflow-процессе HDL (HDL Coder).
Запустите помощник по рабочим процессам. В помощнике по рабочим процессам щелкните правой кнопкой мыши шаг «Создание кода». Выберите опцию «Run to selected task» для выполнения всех шагов от начала до создания кода HDL.
Проверьте сгенерированный код HDL, щелкнув ссылки в окне журнала.