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

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

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

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

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

Систему GammaCorrectionHDL.slx показывают ниже.

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

В этом примере Гамма-коррекция используется, чтобы откорректировать темные изображения. Более темные изображения сгенерированы путем питания Источника видеосигнала блок Corruption. Video Source выходные параметры полутоновое видео на 240 пунктов и блок Corruption применяет De-гамма операцию, чтобы сделать исходное видео перцепционно более темным. Затем нисходящий блок Full-Frame Gamma Compensation или Гамма подсистема Компенсации Пиксельного Потока удаляют предыдущую De-гамма операцию из поврежденного видео, чтобы восстановить исходное видео.

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

Это - хорошая практика, чтобы разработать поведенческие системные блоки использования, которые обрабатывают кадры полного образа, блок Full-Frame Gamma Compensation в этом примере, перед продвижением к тому, чтобы работать над предназначающимся для FPGA проектом. Такая поведенческая модель помогает проверить проект обработки видеоданных. Позже, это может служить ссылкой для проверки реализации алгоритма, предназначенного к FPGA. А именно, ниже PSNR (пиковое отношение сигнал-шум) блок в разделе Result Verification в верхнем уровне модели сравнивает результаты обработки полной системы координат с теми от обработки пиксельного потока.

Система координат к пикселям: генерация пиксельного потока

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

Номер поля компонентов определяется к 1 для входа полутонового изображения, и поле Формата видео составляет 240 пунктов, чтобы совпадать с тем из источника видеосигнала.

В этом примере Активная Видео область соответствует 240x320 матрица темного изображения от восходящего блока Corruption. Шесть других параметров, а именно, Общие пиксели на строку, Общие видео линии, Запуская активную линию, Заканчивая активную линию, Передний подъезд и Заднее крыльцо задают, сколько неданных изображения будет увеличено на четырех сторонах Активного Видео. Для получения дополнительной информации смотрите страницу с описанием блока Frame To Pixels.

Обратите внимание на то, что шаг расчета Источника видеосигнала определяется продуктом Общих пикселей на строку и Общих видео линий.

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

Как показано в схеме ниже, Гамма подсистема Компенсации Пиксельного Потока содержит только блок Gamma Corrector.

Блок Gamma Corrector принимает пиксельный поток, а также шину, содержащую пять сигналов синхронизации, от блока Frame To Pixels. Это передает тот же набор сигналов с нисходящим блоком Pixels To Frame. Такой пакет сигнала и обслуживание необходимы для обработки пиксельного потока.

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

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

Номер поля компонентов и полей Формата видео и Системы координат К Пикселям и Пикселей, Чтобы Структурировать определяется в 1 и 240 пунктах, соответственно, чтобы совпадать с форматом источника видеосигнала.

Image Viewer и верификация результата

Когда вы запустите симуляцию, три изображения будут отображены (отошлите к изображениям, показанным в "Структуре Примера" Раздел):

  • Исходное изображение дано подсистемой Источника изображения

  • Темное изображение производится блоком Corruption

  • HDL выход сгенерирован гамма подсистемой Компенсации Пиксельного Потока

Присутствие четырех блоков Unit Delay на верхнем уровне модели ко времени - выравнивают 2D матрицы для справедливого сравнения.

При создании фрагмента потоковой передачи проекта PSNR блочно-непрерывно проверяет, что результаты HDLOut против исходной полной системы координат проектируют BehavioralOut. В ходе симуляции этот блок PSNR должен дать inf выход, указав, что выходное изображение от Гамма Компенсации Полной Системы координат совпадает с изображением, сгенерированным от потока, обрабатывающего модель Pixel-Stream Gamma Compensation.

Исследование примера

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

gammaValue=4

Обновленный$gammaValue$ будет распространен к полю Gamma блока Corruption, блока Full-Frame Gamma Compensation и блока Gamma Corrector в Гамма подсистеме Компенсации Пиксельного Потока. Закрытие модели очищается$gammaValue$ из вашей рабочей области.

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

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

Сгенерируйте HDL-код и проверьте его поведение

Проверять и сгенерировать HDL-код сослались в этом примере, у вас должна быть лицензия HDL Coder™.

Чтобы сгенерировать HDL-код, используйте следующую команду:

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

Чтобы вывести RAM, чтобы реализовать интерполяционную таблицу, используемую в Гамма Корректоре, свойство LUTRegisterResetType не установлено ни в один. Чтобы получить доступ к этому свойству, щелкните правой кнопкой мыши по блоку Gamma Corrector в Гамма Компенсации Пиксельного Потока и перейдите к HDL Coder-> HDL Block Properties...

Чтобы сгенерировать испытательный стенд, используйте следующую команду:

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