В этом примере показано, как использовать библиотечный блок Vision HDL Toolbox™ Histogram для реализации гистограммы эквализации.
Эта модель примера предоставляет аппаратно совместимый алгоритм. Можно сгенерировать HDL-код из этого алгоритма и реализовать его на плате с помощью Xilinx™ Zynq™ исходного проекта. Смотрите Histogram Equalization with Zynq-Based Hardware (Пакет поддержки Vision HDL Toolbox для Xilinx Zynq-Based Hardware).
Модель показов, как использовать библиотечный блок Гистограммы для повышения контрастности изображений путем применения гистограммы эквализации. Для получения дополнительной информации см. страницу с описанием на блоки Гистограммы. В этом примере гистограммы эквализации три компонента.
Video Partition разбивает большое изображение на четыре неперекрывающихся небольших изображения для параллельных расчетов гистограммы.
HDLHistogram вычисляет накопленную гистограмму изображения.
Эквализация применяет уравненную гистограмму к оригинальному изображению и генерирует улучшенное контрастностью изображение.
Существуют случаи использования, когда гистограмма вычисляется по всему изображению или по небольшим представляющим интерес областям, представляющим разделы изображения. Вычисление гистограммы большого изображения занимает много времени. Компонент раздела видео в этом примере разделяет большое изображение на четыре неперекрывающихся небольших изображения. Гистограмма вычисляется по четырем маленьким изображениям одновременно. Каждый входной кадр разбит на четыре 120 на 160 небольших изображений. Каждое маленькое изображение соединяется с блоком Frame To Pixels, чтобы генерировать потоки пикселей и соответствующие сигналы управления.
Подсистема HDLHistogram оптимизирована для генерации HDL-кода. Гистограмма пиксельных потоков вычисляется с помощью блока Histogram. Поскольку входное изображение имеет серую шкалу с типом данных uint8, входные пиксели сгруппированы в 256 интервалов. Модель читает вычисленные интервалы гистограммы последовательно, когда блок утверждает сигнал readRdy. Значения интервала отправляются на кумулятивное вычисление гистограммы. После того, как все 256 значений интервала считаны, модель утверждает, что binReset сбрасывает все интервалы на нуль. Собранная гистограмма каждого небольшого изображения затем складывается вместе, чтобы вычислить накопленную гистограмму большого изображения.
Временная схема считывания и сброса интервалов гистограммы показана на следующем рисунке.
Гистограмма эквализации может быть применена к текущей системе координат, где была вычислена накопленная гистограмма, или системе координат после. Если применяется к текущей системе координат, вход видео должно быть сохранено. Этот пример задерживает вход видео на одну систему координат и выполняет равномерную эквализацию к исходному видео. Уравнившееся видео затем сравнивается с оригинальным видео.
HDL-код, сгенерированная из гистограммы, была синтезируем с использованием Xilinx ISE на Virtex6 (XC6VLX240T-1FFG1156) FPGA, и схема работала примерно на 190 МГц, что достаточно для обработки данных в реальном времени.
Чтобы проверить и сгенерировать HDL-код этого примера, вы должны иметь лицензию HDL- Coder™.
Можно использовать команды
makehdl('HistogramEqualizationHDL/HDLHistogram')
или
makehdltb('HistogramEqualizationHDL/HDLHistogram')
для генерации HDL-кода и испытательного стенда для подсистемы HDLHistogram. Примечание: Генерация испытательного стенда занимает много времени из-за большого размера данных. Рассмотрите сокращение времени симуляции перед генерацией испытательного стенда.