Этот пример показов, как смоделировать потоковую гамма- коррекцию пикселей для оборудования проектов. Модель сравнивает результаты блока Vision HDL Toolbox™ Gamma Corrector с результатами, сгенерированными полнокадровым блоком Gamma из Computer Vision Toolbox™.
Эта модель примера предоставляет аппаратно совместимый алгоритм. Можно реализовать этот алгоритм на плате с помощью Xilinx™ Zynq™ исходного проекта. См. раздел «Коррекция с оборудованием на основе Zynq» (Пакет поддержки Vision HDL Toolbox для оборудования на основе Xilinx Zynq).
Модели продукта Computer Vision Toolbox на высоком уровне абстракции. Блоки и объекты выполняют полную обработку кадра, работая с одной системой координат изображения за раз. Однако системы FPGA или ASIC выполняют обработку пиксельного потока, работая на одном пикселе изображения за раз. В этом примере моделируются алгоритмы полнофадровой и пиксельной потоковой передачи в той же модели.
Система GammaCorrectionHDL.slx показана ниже.
Различие цвета линий, питающих подсистемы Full-Frame Gamma Compensation и Pixel-Stream Gamma Compensation, указывает на изменение скорости изображения в потоковой ветви модели. Этот переход скорости происходит потому, что поток пикселей посылается за то же время, что и полные видеокадры, и поэтому он передается с более высокой скоростью.
В этом примере Гамма-коррекция используется для коррекции темных изображений. Более темные изображения генерируются путем подачи источника видео в блок Коррупция. Video Source выводит 240p полутоновое видео, а блок Corporation применяет операцию De-gamma, чтобы сделать исходное видео восприимчиво темнее. Затем нисходящий блок Full-Frame Gamma Compensation или подсистема Pixel-Stream Gamma Compensation удаляет предыдущую операцию De-gamma из поврежденного видео, чтобы восстановить исходное видео.
Одна система координат исходного видео, его поврежденная версия и восстановленная версия показаны слева направо на схеме ниже.
Это хорошая практика, чтобы разработать поведенческую систему, используя блоки, которые обрабатывают полные системы координат изображения, блок Full-Frame Gamma Compensation в этом примере, прежде чем переходить к работе над проектом нацеливания FPGA. Такая поведенческая модель помогает проверить проект обработки видео. Позже он может служить ссылкой для проверки реализации алгоритма, нацеленного на FPGA. В частности, блок с более низким PSNR (пиковым отношением сигнал/шум) в разделе «Верификация результата» на верхнем уровне модели сравнивает результаты обработки полного кадра с результатами обработки пиксельного потока.
Задача Frame To Pixels состоит в том, чтобы преобразовать полнокадровое изображение в поток пикселей. Чтобы симулировать эффект горизонтальных и вертикальных периодов гашения, обнаруженных в реальных аппаратных видеосистемах, активное изображение дополнено данными без неизображений. Дополнительные сведения о протоколе потокового пикселя см. в разделе Интерфейс потокового пикселя. Блок Frame To Pixels сконфигурирован как показано:
Поле Number of components устанавливается равным 1 для входа полутонового изображения, а поле Video format равняется 240p, чтобы соответствовать полю источника видео.
В этом примере область Active Video соответствует матрице 240x320 темного изображения из вышестоящего блока Corruption. Шесть других параметров, а именно Total pixels на линию, Total video lines, Starting active line, Ending active line, Front depch и Back devch задают, сколько данных без неизображений будет увеличено на четырех сторонах Активного видео. Для получения дополнительной информации смотрите Систему координат блока To Pixels страницы с описанием.
Обратите внимание, что шаг расчета источника видео определяется продуктом Total pixels на линию и Total video line.
Как показано на схеме ниже, подсистема гамма-компенсации Pixel-Stream содержит только блок Gamma Corrector.
Блок Gamma Corrector принимает поток пикселей, а также шину, содержащую пять сигналов синхронизации, от блока Frame To Pixels. Этот же набор сигналов передается в нисходящий блок Pixels To Frame. Такой сигнальный пучок и техническое обслуживание необходимы для обработки пиксельного потока.
Будучи компаньоном Frame To Pixels, который преобразует полную систему координат изображения в поток пикселей, блок Pixels To Frame, реверсивно, преобразует поток пикселей обратно в полную систему координат, используя сигналы синхронизации. Поскольку выход блока Pixels To Frame является 2-D матрицей полного изображения, нет необходимости дополнительно переносить шину, содержащую пять сигналов синхронизации.
Поле «Количество компонентов» и поля «Формат видеообеих систем координат в пиксели» и «Пиксели в кадр» заданы равными 1 и 240p, соответственно, чтобы соответствовать формату источника видео.
При запуске симуляции будут отображены три изображения (см. изображения, показанные в разделе «Структура примера»):
Исходное изображение, заданное подсистемой Image Source
Темное изображение, созданное блоком Коррупция
Выходные данные HDL, сгенерированные подсистемой гамма-компенсации Pixel-Stream
Присутствие четырех блоков Unit Delay на верхнем уровне модели состоит в том, чтобы выровнять по времени матрицы 2-D для справедливого сравнения.
При построении потокового фрагмента проекта блок PSNR постоянно проверяет результаты HDLOut на соответствие исходному проекту BehavioralOut полного кадра. В ходе симуляции этот блок PSNR должен дать inf выхода, указывающее, что выходное изображение из Full-Frame Gamma Компенсация совпадает с изображением, сгенерированным из модели Pixel-Stream Gamma Компенсация обработки потока.
Пример позволяет вам экспериментировать с различными значениями Гаммы, чтобы изучить их эффект на операцию Гамма и Де-Гамма. В частности, переменная рабочей области с начальным значением 2.2 создается при открытии модели. Изменить его значение можно с помощью командной строки MATLAB следующим образом:
gammaValue=4
Обновление будет распространено на поле Gamma блока Corruption, блок Full-Frame Gamma Compensation и блок Gamma Corrector внутри подсистемы Pixel-Stream Gamma Compensation. Закрытие модели очищается от вашей рабочей области.
Несмотря на то, что Гамма операция является концептуально обратной De-Гамма, подача изображения в Гамму, за которой следует De-Гамма (или De-Гамма сначала Гамма), не обязательно идеально восстанавливает оригинальное изображение. Искажения ожидаются. Чтобы измерить это, в нашем примере другой блок PSNR помещается между SourceImage и BehavioralOut. Чем выше PSNR, тем меньше искажений было введено. В идеале, если выход HDL и исходное изображение идентичны, выходы inf.В нашем примере это происходит только тогда, когда равен 1 (т.е. и блоки Гамма, и De-гамма пропускают исходное изображение через).
Мы также можем использовать Gamma, чтобы испортить исходное изображение, сделав его более ярким, а затем коррекцию De-gamma для восстановления изображения.
Чтобы проверить и сгенерировать HDL-код, на который ссылаются в этом примере, необходимо иметь лицензию HDL- Coder™.
Чтобы сгенерировать HDL-код, используйте следующую команду:
makehdl('GammaCorrectionHDL/Pixel-Stream Gamma Compensation')
Чтобы вывести ОЗУ для реализации интерполяционной таблицы, используемой в Gamma Corrector, для свойства LUTRegisterResetType задано значение none. Чтобы получить доступ к этому свойству, щелкните правой кнопкой мыши блок Gamma Corrector внутри Pixel-Stream Gamma Compensation и перейдите к HDL Coder - > HDL Block Properties...
Чтобы сгенерировать испытательный стенд, используйте следующую команду:
makehdltb('GammaCorrectionHDL/Pixel-Stream Gamma Compensation')