В этом примере показано, как использовать программируемые коэффициенты, чтобы откорректировать изменяющееся во времени нарушение на входном видео.
Существует много различных методов для фильтрации изображения и видеосигналов, которые требуют коэффициентов фильтра, которые варьируются от системы координат до системы координат. Чтобы динамически изменить коэффициенты блока Image Filter, установите содействующий исходный параметр Фильтра на Input port
. Блок Image Filter производит входной содействующий порт в начале каждой системы координат.
Модель в качестве примера применяет нарушение яркости к входному видео, и подсистема Фильтра HDL вычисляет коэффициенты фильтра для каждой системы координат и корректирует нарушение. Модель включает три видео средства просмотра: один для исходного входного видео, другого для видео, которому повреждают и третьего для результата фильтра, который противодействует нарушению.
Модель также включает Систему координат в Пиксели и Пиксели, чтобы Структурировать блоки, чтобы преобразовать матричное видео формата в формат потоковой передачи, подходящий для моделирования HDL.
Нарушение в этой модели является модуляцией яркости с помощью медленной синусоиды. Поскольку нарушение моделируется просто поведенчески, первый шаг должен преобразовать изображение в значения с двойной точностью. 16-битный счетчик подсчитывает в частоте кадров, и встречное значение умножается на 2*pi/40. Синусоида выход уменьшен масштаб 0,3 и смещение 1,0, затем добавляется. Эти вычисления приводят к +/-30 изменение % в яркости в течение 40 систем координат. После применения нарушения модель преобразует назад в uint8
при помощи округления с насыщением.
Подсистема Алгоритма HDL запускается путем извлечения необходимой области в центре изображения. Поскольку эта модель сконфигурирована для 320x240
источник видеосигнала, это использует 100x100
область в центре видеопотока.
Блок Image Statistics находит среднее значение той центральной области. Новое среднее значение вычисляется для каждого 100x100
система координат. Блок устанавливает validOut порт на true
указать, когда новое среднее значение допустимо.
Адаптирование Главной Средней подсистемы вычисляет поправочный коэффициент, требуемый противодействовать нарушению.
Вы могли использовать центральную среднюю к области яркость непосредственно с "серо-мировым" предположением, что средняя яркость является серединой шкалы (128 в этом случае). Но, более точный подход должен использовать предыдущие средние значения яркости, учитывая, что средняя яркость не изменяет быстро систему координат, чтобы структурировать.
Формирование среднего значения средних значений известно как главное среднее значение, но то вычисление дало бы равный вес прошлым системам координат. Вместо этого подсистема взвешивает прошлые системы координат с экспоненциальным дробным затуханием с коэффициентами [1 1/2 1/4 1/8 1/16 1/32 1/64 1/64]
. Последним коэффициентом обычно был бы 1/128
но путем корректировки того значения, сумма весов становится точно 2, заставляя нормализацию учесть простую операцию сдвига. Обратите внимание на то, что начальное значение всех регистров линии задержки является серединой шкалы (128), чтобы избежать крупных переходных процессов запуска в коррекции.
Подсистема находит поправочный коэффициент с помощью текущего среднего значения и взвешенного главного среднего значения. Начиная с главного среднего значения, увеличенного 2, если вы вычитаете текущее среднее значение из него, получившееся значение является взвешенным главным средним значением плюс или минус остаточный член в направлении исправления ошибки.
Коррекция затем масштабируется 2^-7 и отправляется в выходной порт. Нормализация могла быть применена здесь путем деления на главное среднее значение, но на практике, простое масштабирование работает достаточно хорошо.
Коррекция выход от Адаптирования Главной Средней подсистемы затем используется, чтобы масштабировать коэффициенты фильтра, в этом случае Гауссов фильтр размера 5x5
со стандартным отклонением значения по умолчанию 0.5. В фактическом FPGA этот фильтр использует 25 множителей. Конвейеризация не вызывает беспокойства здесь, поскольку эти значения вычисляются задолго до того, как они необходимы. Блок производит содействующий порт когда vStart
сигналом во входе ctrl шина является true
.
В этом простом примере вы могли альтернативно применить поправочный коэффициент к скалярному пиксельному потоку и затем отфильтровать. Показанная архитектура может расшириться для более комплексных адаптивных изменений в коэффициентах фильтра.
5x5
умножьтесь поправочного коэффициента с гауссовыми коэффициентами, мог быть реализован как один последовательный множитель, а не 25 параллельных множителей. Чтобы достигнуть этой реализации HDL, включайте блок продукта в Подсистему и щелкните правой кнопкой по Subsystem, чтобы открыть HDL Block Properties. Установите свойство SharingFactor на 25 реализовывать один мультиплексированный временем множитель. С этой установкой умножить операция использует на 25 времен более быстрые часы, чем остальная часть проекта. Рассмотрите свою необходимую пиксельную тактовую частоту и может ли ваше устройство разместить более быстрый уровень.