exponenta event banner

Гамма-коррекция

В этом примере показано, как моделировать пиксельную потоковую гамма-коррекцию для аппаратных конструкций. Модель сравнивает результаты, полученные в блоке Vision HDL Toolbox™ Gamma Corrector, с результатами, полученными в полнокадровом блоке Gamma из Computer Vision Toolbox™.

В этом примере модели представлен аппаратно совместимый алгоритм. Вы можете осуществить этот алгоритм на правлении, использующем справочный дизайн Xilinx™ Zynq™. См. раздел Гамма-коррекция с аппаратным обеспечением на основе Zynq (пакет поддержки панели инструментов Vision HDL для аппаратного обеспечения на основе Xilinx Zynq).

Структура примера

Инструментарий Computer Vision Toolbox обеспечивает высокий уровень абстракции. Блоки и объекты выполняют полнокадровую обработку, работая на одном кадре изображения за раз. Однако системы FPGA или ASIC выполняют обработку потока пикселей, работая на одном пикселе изображения за один раз. В этом примере моделируются полнокадровые и пиксельные алгоритмы потоковой передачи в одной модели.

Ниже показана система GammaCorrureHDL.slx.

Разница в цвете линий, питающих подсистемы полнокадровой гамма-компенсации и пиксельной гамма-компенсации, указывает на изменение скорости изображения в потоковой ветви модели. Этот переход скорости происходит потому, что поток пикселей отправляется в то же самое время, что и полные видеокадры, и поэтому он передается с более высокой скоростью.

В этом примере гамма-коррекция используется для коррекции темных изображений. Более темные изображения генерируются путем подачи источника видео в блок «Повреждение». Источник видео выводит 240p видео в градациях серого, и блок искажения применяет операцию De-gamma, чтобы сделать исходное видео более темным. Затем нисходящий блок полнокадровой гамма-компенсации или подсистема пиксельной гамма-компенсации удаляет предыдущую операцию де-гамма из поврежденного видео, чтобы восстановить исходное видео.

Один кадр исходного видео, его поврежденная версия и восстановленная версия показаны слева направо на схеме ниже.

Рекомендуется разработать поведенческую систему, используя блоки, которые обрабатывают полные кадры изображения, блок гамма-компенсации полного кадра в этом примере, прежде чем перейти к работе над конструкцией FPGA-нацеливания. Такая поведенческая модель помогает проверить дизайн обработки видео. Позднее он может служить справочником для проверки реализации алгоритма, направленного на FPGA. В частности, нижний блок PSNR (пиковое отношение сигнал/шум) в секции проверки результата на верхнем уровне модели сравнивает результаты обработки полного кадра с результатами обработки потока пикселей.

От кадра до пикселей: создание потока пикселей

Задача Frame To Pixels состоит в преобразовании полнокадрового изображения в поток пикселей. Для моделирования эффекта периодов горизонтального и вертикального гашения, обнаруженных в реальных аппаратных видеосистемах, активное изображение дополняется данными, не являющимися данными изображения. Дополнительные сведения о потоковом пиксельном протоколе см. в разделе Потоковый пиксельный интерфейс. Блок Frame To Pixels настроен так, как показано на рисунке:

Для ввода изображения в градациях серого в поле Number of components установлено значение 1, а в поле Video format установлено значение 240p, соответствующее значению источника видео.

В этом примере область Active Video соответствует матрице 240x320 темного изображения из блока Коррупция в восходящем направлении. Шесть других параметров, а именно «Общее количество пикселей на строку», «Общее количество видеопостроек», «Начальная активная линия», «Конечная активная линия», «Передняя часть» и «Задняя часть», указывают, сколько данных, не относящихся к изображениям, будет увеличено на четырех сторонах активного видео. Дополнительные сведения см. на странице ссылок блока «От кадра до пикселов».

Обратите внимание, что время выборки источника видео определяется произведением суммарных пикселей на строку и суммарных строк видео.

Гамма-коррекция

Как показано на диаграмме ниже, подсистема гамма-компенсации пиксельного потока содержит только блок гамма-корректора.

Блок гамма-корректора принимает поток пикселей, а также шину, содержащую пять сигналов синхронизации, от блока «кадр-пиксели». Он передает тот же набор сигналов в нисходящий блок «Пикселы в кадр». Такой пучок сигналов и техническое обслуживание необходимы для обработки потока пикселей.

Пиксели в кадр: преобразование пиксельного потока обратно в полный кадр

В качестве компаньона к кадру к пикселям, который преобразует полный кадр изображения в поток пикселей, блок пикселов к кадру преобразует поток пикселей обратно в полный кадр, используя сигналы синхронизации. Поскольку выходной сигнал блока Pixels To Frame является 2-D матрицей полного изображения, нет необходимости дополнительно переносить по шине, содержащей пять сигналов синхронизации.

Поле «Количество компонентов» и поля «Формат видео» обоих полей «От кадра до пикселей» и «От пикселей до кадра» установлены в 1 и 240p соответственно для соответствия формату источника видео.

Просмотр изображений и проверка результатов

При запуске моделирования отображаются три изображения (см. изображения, показанные в разделе «Структура примера»):

  • Исходный образ, заданный подсистемой Image Source

  • Темное изображение, созданное блоком «Коррупция»

  • Выходной сигнал HDL, генерируемый подсистемой гамма-компенсации Pixel-Stream

Наличие четырех блоков единичной задержки на верхнем уровне модели позволяет выровнять по времени матрицы 2-D для справедливого сравнения.

При построении потоковой части конструкции блок PSNR непрерывно проверяет результаты HDLOut по сравнению с исходной полнокадровой конструкцией BehaviureOut. Во время моделирования этот блок PSNR должен выдавать выходные данные, указывающие, что выходное изображение из полнокадровой гамма-компенсации соответствует изображению, сформированному из модели пиксельной гамма-компенсации обработки потока.

Изучение примера

В примере можно поэкспериментировать с различными значениями Гамма, чтобы проверить их влияние на операции Гамма и Де-гамма. В частности, при$gammaValue$ открытии модели создается переменная рабочей области с начальным значением 2.2. Изменить его значение можно с помощью командной строки MATLAB следующим образом:

gammaValue=4

Обновленные$gammaValue$ данные будут переданы в поле Гамма блока Коррупция, блока Гамма-компенсация полного кадра и блока Гамма-корректора в подсистеме Гамма-компенсация пиксельного потока. Закрытие модели очищается$gammaValue$ от рабочей области.

Хотя гамма-операция концептуально является обратной De-гамма, подача изображения в Gamma, за которой следует De-гамма (или De-гамма сначала, а затем гамма), не обязательно полностью восстанавливает исходное изображение. Ожидаются искажения. Чтобы измерить это, в нашем примере другой блок PSNR помещается между SourceImage и BehaviureOut. Чем выше PSNR, тем меньше искажений. В идеале, если выход HDL и исходное изображение идентичны, PSNR выводит inf. В нашем примере это происходит только тогда, когда$gammaValue$ равно 1 (т.е. и гамма-блоки, и де-гамма-блоки пропускают исходное изображение).

Мы также можем использовать Гамма для повреждения исходного изображения, делая его более ярким, с последующей коррекцией Де-гамма для восстановления изображения.

Создание кода HDL и проверка его поведения

Для проверки и генерации кода HDL, на который ссылается этот пример, необходимо иметь лицензию HDL Coder™.

Для создания кода HDL используется следующая команда:

makehdl('GammaCorrectionHDL/Pixel-Stream Gamma Compensation')

Чтобы вывести ОЗУ для реализации таблицы подстановки, используемой в гамма-корректоре, свойство LUTRegisterResetType имеет значение none. Чтобы получить доступ к этому свойству, щелкните правой кнопкой мыши блок Гамма-корректора внутри компенсации гамма-потока пикселей и перейдите к кодеру HDL - > Свойства блока HDL...

Для создания стенда выполните следующую команду:

makehdltb('GammaCorrectionHDL/Pixel-Stream Gamma Compensation')