exponenta event banner

Ускорение проектирования с потоковой передачей пикселей с помощью кодера MATLAB

В этом примере показано, как ускорить алгоритм обработки пиксельного потока видео в MATLAB ® с помощью MATLAB Coder™.

Для выполнения этого примера необходимо иметь лицензию MATLAB Coder.

Ускорение с помощью кодера MATLAB позволяет моделировать большие размеры кадров, например, видео 1080p, на практических скоростях. Используйте этот рабочий процесс ускорения после отладки алгоритма с использованием небольшого размера кадра. Тестирование дизайна с небольшим изображением показано в Pixel-Streaming Design в примере MATLAB.

Работа кодера MATLAB

Кодер MATLAB генерирует код C из кода MATLAB. Создание кода ускоряет моделирование, блокируя размеры и типы данных переменных. Этот процесс удаляет издержки при проверке интерпретируемого языка на размер и тип данных в каждой строке кода. В этом примере выполняется компиляция обоих файлов тестового стенда. DesignAccelerationHDLTestBench.m и файл проекта DesignAccelerationHDLDesign.m в функцию MEX и использует полученный файл MEX для ускорения моделирования.

Директива (или прагматика)% # codegen под сигнатурой функции указывает, что предполагается создать код для алгоритма MATLAB. При добавлении этой директивы анализатор кода MATLAB помогает диагностировать и исправлять нарушения, которые могут привести к ошибкам при создании кода. Директива% # codegen не влияет на интерпретируемое моделирование.

Передовые практики

Отладка моделирования с большими размерами кадра нецелесообразна в интерпретируемом режиме из-за длительного времени моделирования. Однако отладка моделирования MEX является сложной задачей из-за отсутствия доступа к отладке кода.

Чтобы избежать этих сценариев, рекомендуется разработать и проверить алгоритм и испытательный стенд с использованием размера миниатюрного кадра. В большинстве случаев ориентированная на ЛПВП конструкция может быть реализована без зависимости от размера кадра. После того как вы уверены, что конструкция и испытательный стенд работают правильно, увеличьте размер рамы на испытательном стенде и используйте кодер MATLAB для ускорения моделирования. Чтобы увеличить размер рамы, испытательный стенд требует только незначительных изменений, как вы можете видеть, сравнивая DesignAccelerationHDLTestBench.m с PixelStreamingDesignHDLTestBench.m в Pixel-Streaming Design в MATLAB.

Испытательный стенд

На испытательном стенде DesignAccelerationHDLTestBench.mобъект videyIn считывает каждый кадр из источника видео, а объект scaler интерполирует этот кадр от 240p до 1080p. Это изображение 1080p передается объекту frm2pix, который преобразует полный кадр изображения в поток пикселей и управляющих структур. Функция DesignAccelerationHDLDesign затем вызывается для обработки одного пикселя (и связанной с ним структуры управления) за один раз. После обработки всего потока пикселей и сбора выходного потока объект pix2frm преобразует выходной поток в полнокадровое видео. Функция Design AccelerationHDLViewer отображает выходные и исходные изображения бок о бок.

Приведенный выше поток операций реализован в следующих строках: DesignAccelerationHDLTestBench.m.

     ...
     for f = 1:numFrm
         frmFull = step(videoIn);       % Get a new frame
         frmIn = step(scaler,frmFull);  % Enlarge the frame
         [pixInVec,ctrlInVec] = step(frm2pix,frmIn);
         for p = 1:numPixPerFrm
             [pixOutVec(p),ctrlOutVec(p)] =...
                     visionhdlsobel_design(pixInVec(p),ctrlInVec(p));
         end
         frmOut = step(pix2frm,pixOutVec,ctrlOutVec);
         DesignAccelerationHDLViewer(actPixPerLine,actLine,[frmIn uint8(255*frmOut)]);
     end
     ...

Тип данных frmIn - uint8, в то время как тип данных frmOut, выход обнаружения границ, является логическим. Матрицы различных типов данных не могут быть объединены, поэтому uint8 (255 * frmOut) отображает логическое значение false и true в uint8 (0) и uint8 (255) соответственно.

Как frm2pix, так и pix2frm используются для преобразования между доменами полного кадра и потока пикселей. Внутренний for-loop выполняет обработку потока пикселей. Остальная часть тестового стенда выполняет полнокадровую обработку (т.е. videyIn, scaler и viewer внутри функции DesignAccelerationHDLViewer).

Перед завершением тестового стенда отображается частота кадров, иллюстрирующая скорость моделирования.

Не все функции, используемые в испытательном стенде, поддерживают генерацию кода C. Для тех, кто этого не делает, например tic, toc, fprintf, используйте coder.extrinsic, чтобы объявить их как внешние функции. Внешние функции исключаются из генерации MEX. Моделирование выполняет их в обычном интерпретируемом режиме.

Дизайн пиксельного потока

Функция, определенная в DesignAccelerationHDLDesign.m принимает поток пикселей и пять управляющих сигналов и возвращает модифицированный поток пикселей и управляющие сигналы. Дополнительные сведения о потоковом пиксельном протоколе, используемом системными объектами из Toolbox™ Vision HDL, см. в разделе Потоковый пиксельный интерфейс.

В этом примере функция содержит объект Edge Detector System.

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

Создание файла MEX и моделирование конструкции

Создайте и выполните файл MEX.

codegen('DesignAccelerationHDLTestBench');
DesignAccelerationHDLTestBench_mex;
Code generation successful.


10 frames have been processed in 12.92 seconds.
Average frame rate is 0.77 frames/second.

Программа просмотра отображает исходное видео слева, а выходные данные справа.

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

Введите следующую команду для создания нового проекта HDL Coder™ во временной папке

coder -hdlcoder -new DesignAccelerationProject

Затем добавьте файл DesignAccelerationHDLDesign.m в качестве функции MATLAB и DesignAccelerationHDLTestBench.m в качестве испытательного стенда MATLAB.

Руководство по созданию и заполнению проектов кодера MATLAB HDL см. в разделе Начало работы с MATLAB в Workflow-процессе HDL (HDL Coder).

Запустите помощник по рабочим процессам. В помощнике по рабочим процессам щелкните правой кнопкой мыши шаг «Создание кода». Выберите опцию «Run to selected task» для выполнения всех шагов от начала до создания кода HDL.

Проверьте сгенерированный код HDL, щелкнув ссылки в окне журнала.