Вуалируйте исправление

В этом примере показано, как удалить вуаль из изображений, полученных при туманных условиях. Алгоритм подходит для FPGAs.

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

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

Чтобы улучшить туманное входное изображение, алгоритм выполняет удаление вуали и затем контрастное улучшение. Схема показывает шаги обеих этих операций.

Этот пример берет туманное изображение RGB, как введено. Чтобы выполнить удаление вуали, алгоритм оценивает темный канал изображения, вычисляет карту airlight на основе темного канала и совершенствовал карту airlight при помощи фильтров. Этап восстановления создает изображение defogged путем вычитания усовершенствованной карты airlight из входного изображения.

Затем Контрастный этап Улучшения оценивает область значений значений интенсивности в изображении и использует контраст, простирающийся, чтобы расширить область значений значений и заставить функции выделиться более ясно.

Вуалируйте удаление

Существует четыре шага в выполнении удаления вуали.

1. Темная Оценка Канала: пиксели, которые представляют область ненеба изображения, имеют низкую интенсивность по крайней мере в одном компоненте цвета. Канал, сформированный этой низкой интенсивностью, называется темным каналом. В нормированном, изображении без вуалей интенсивность темных пикселей канала является очень низкой, почти нуль. В туманном изображении интенсивность темных пикселей канала высока, потому что они повреждаются вуалью. Так, алгоритм удаления вуали использует темные интенсивности пикселей канала, чтобы оценить сумму вуали.

Алгоритм оценивает темный канал$$ I^c_{dark}(x,y) $$ путем нахождения мудрого пикселем минимума через все три компонента входного изображения$$ I^c_{}(x,y) $$ где$$ c\ \epsilon\ [r,g,b] $$.

2. Вычисление Карты Airlight: эффект белизны в изображении известен airlight. Алгоритм вычисляет карту airlight от темной оценки канала путем умножения фактором тумана$z$, который представляет сумму тумана, который будет удален. Значение$z$ - между 0 и 1. Более высокое значение означает, что больше тумана будет удалено из изображения.

$$ I_{air}(x,y) = z \times \min_{c\ \epsilon\ [r,g,b]} I^c_{dark}(x,y)$$

3. Улучшение Карты Airlight: алгоритм приглаживает изображение airlight от предыдущего этапа при помощи блока Bilateral Filter. Это сглаживание усиливает детали изображения. Усовершенствованное изображение упоминается как$I_{refined}(x,y)$.

4. Восстановление: Чтобы уменьшать эффекты сверхсглаживания, этот этап корректирует отфильтрованное изображение с помощью этих уравнений. Константа$m$, представляет среднюю линию изменения темных областей карты airlight от темного до ярких значений. Пример использует опытным путем полученное значение$m=0.6$.

$$ I_{reduced}(x,y) = m \times \ min ({I_{air}}(x,y) , I_{refined}(x,y)) $$

Алгоритм затем вычитает карту airlight из входа туманное изображение и умножается фактором$$ \frac{255}{255-I_{reduced}(x,y)} $$.

$$ I_{restore}(x,y) = 255 \times \frac{I^c_{}(x,y)-I_{reduced}(x,y)}{255-I_{reduced}(x,y)} $$

Контрастное улучшение

В контрастном улучшении существует пять шагов.

1. RGB к Серому Преобразованию: Этот этап преобразует defogged изображение RGB $$ I^c_{restore}(x,y) $$из алгоритма удаления вуали в полутоновое изображение$$ I_{gray}(x,y) $$.

2. Вычисление гистограммы: Этот этап использует блок Histogram, чтобы считать количество пикселей, падающих на каждом уровне яркости от 0 до 255.

3. Нормализация гистограммы: алгоритм нормирует значения гистограммы путем деления их на входной размер изображения.

4. Вычисление CDF: Этот этап вычисляет кумулятивную функцию распределения (CDF) нормированных значений интервала гистограммы путем добавления их в сумму предыдущих значений интервала гистограммы.

5. Контрастное Протяжение: Контраст, простирающийся, является методом повышения качества изображения, который улучшает контраст изображения путем протяжения области значений значений интенсивности, чтобы заполнить целый динамический диапазон. Когда динамический диапазон увеличен, детали в изображении более ясно отображаются.

5a. i1 и i2 вычисление: Этот шаг сравнивает значения CDF с двумя пороговыми уровнями. В этом примере пороги 0.05 и 0.95. Это вычисление определяет, какие значения интенсивности пикселей выравниваются с порогами CDF. Эти значения определяют область значений интенсивности для простирающейся операции.

5b. T вычисление: Этот шаг вычисляет расширенные значения интенсивности пикселей, чтобы встретить желаемым выходным значениям интенсивности,$$o_1 $$ и$$ o_2 $$.

$$ o_1 $$ 10% максимального выходного пола интенсивности (10*255/100) для uint8 входной параметр.

$$ o_2 $$ 90% максимального выходного пола интенсивности (90*255/100) для uint8 входной параметр.

T является вектором с 256 элементами, разделенным на сегменты$$ t_1 $$$$ t_2 $$, и$$ t_3 $$. Элементы сегмента вычисляются из отношения между входной областью значений интенсивности и желаемой выходной областью значений интенсивности.

$$ i_1 $$ и$$ i_2 $$ представляйте две интенсивности пикселей во входной области значений изображения и$$ o_1 $$ и$$ o_2 $$ представляйте две интенсивности пикселей в области значений исправленного выходного изображения.

Эти уравнения показывают, как элементы в T вычисляются.

$$ t_1 = \frac{o_1}{i_1}[0:i_1] $$

$$ t_2 = (((\frac{o_2-o_1}{i_2-i_1})[(i_1+1):i_2]) -
((\frac{o_2-o_1}{i_2-i_1})i_1)) + o_1 $$

$$ t_3 = (((\frac{255-o_2}{255-i_2})[(i_2+1):255]) -
((\frac{255-o_2}{255-i_2})i_2)) + o_2 $$

$$ T = [t_{1} \quad t_{2} \quad t_{3}] $$

5c. Замените значения интенсивности: Этот шаг преобразует интенсивности пикселей изображения defogged к расширенным значениям интенсивности. Каждое пиксельное значение в изображении defogged заменяется соответствующей интенсивностью в T.

Реализация HDL

Модель в качестве примера реализует алгоритм с помощью дымящегося формата пикселя и блоков фиксированной точки из Vision HDL Toolbox. Последовательный интерфейс подражает системе реального времени и эффективен для аппаратных проектов, потому что меньше памяти требуется, чтобы хранить пиксельные данные для расчета. Последовательный интерфейс также позволяет проекту действовать независимо от размера изображения и формата и делает его более эластичным к синхронизации ошибок. Типы данных с фиксированной точкой используют меньше ресурсов и дают лучшую эффективность на FPGA. Необходимые переменные для примера инициализируются в коллбэке InitFcn.

Блок FogImage импортирует входное изображение к модели. Блок Frame To Pixels преобразует входные кадры в пиксельный поток uint8 значения и pixelcontrol шина. Блок Pixels To Frame преобразует пиксельный поток назад во фреймы изображения. hdlInputViewer подсистема и hdlOutputViewer подсистема показывают туманное входное изображение, и defogged улучшил выходное изображение, соответственно. Подсистема ImageBuffer хранит изображение defogged, таким образом, Контрастные этапы Улучшения могут считать его по мере необходимости.

Подсистема FogRectification включает удаление вуали и контрастные алгоритмы улучшения, реализованные с типами данных фиксированной точки.

В подсистеме FogRemoval блок Minimum под названием DarkChannel вычисляет темную интенсивность канала путем нахождения минимума через все три компонента. Затем блок Bilateral Filter уточняет темные результаты канала. Блоку фильтра установили пространственное стандартное отклонение на 2 и набор стандартного отклонения интенсивности к 0.5. Эти параметры используются, чтобы вывести коэффициенты фильтра. Битная ширина выхода от этапа фильтра совпадает с шириной входа.

Затем изображение airlight вычисляется путем умножения усовершенствованного темного канала с фактором тумана, 0.9. Умножение на этот фактор после двустороннего фильтра избегает потери точности, которая произошла бы от усечения до максимального 16-битного входного размера двустороннего фильтра.

Подсистема Восстановления удаляет airlight из изображения и затем масштабирует изображение, чтобы предотвратить сверхсглаживание. Блок Pixel Stream Aligner выравнивает поток входного пикселя с изображением airlight перед вычитанием. Масштабный коэффициент$$ m $$, найден от средней точки различия между оригинальным изображением и изображением с удаленным airlight. Подсистема Восстановления возвращает изображение defogged, которое имеет низкий контраст. Так, контрастное улучшение должно быть выполнено на этом изображении, чтобы увеличить видимость.

Выход от подсистемы FogRemoval хранится в Буфере Изображений. Подсистема ContrastEnhancement утверждает pop предупредите, чтобы считать систему координат назад из буфера.

Подсистема ContrastEnhancement использует блок Color Space Converter, чтобы преобразовать RGB defogged изображение к полутоновому изображению. Затем блок Histogram вычисляет гистограмму значений интенсивности пикселей. Когда гистограмма завершена, блок генерирует сигнал readRdy. Затем подсистема HistNormAndCDFCalculation нормирует значения гистограммы и вычисляет CDF.

i1Andi2Calculation подсистема вычисляет$$ i_1 $$ и$$ i_2 $$ значения, которые описывают входную область значений интенсивности. Затем подсистема TCalculation возвращает список целевых выходных значений интенсивности. Эти 256 значений записаны в интерполяционную таблицу. Логика в области Contrast Stretching-LUT генерирует поп-сигнал считать интенсивности пикселей изображения defogged от Буфера Изображений и питает эти значения, когда чтение адресует к LUT. LUT возвращает соответствующие расширенные значения интенсивности, заданные в T, чтобы заменить пиксельные значения в изображении defogged.

Буферная подсистема Изображений содержит две опции для моделирования связи с внешней памятью. Это - различная подсистема, где можно выбрать между подсистемой BehavioralMemory и Интерфейсом Кадрового буфера Модели (Пакет поддержки Vision HDL Toolbox для Xilinx Находящееся в Zynq Оборудование) блок.

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

Блок Video Frame Buffer требует Пакета поддержки Vision HDL Toolbox для Xilinx Находящийся в Zynq Hardware™. С соответствующим исходным проектом пакет поддержки может сопоставить этот блок с AXI-потоком буфер VDMA на плате. Этот кадровый буфер возвращает сохраненную систему координат, когда это получает сигнал запроса popVB. Поп-запрос с этим блоком должен быть высоким только один цикл на систему координат.

Входные параметры к Буферной подсистеме Изображений являются пиксельным потоком и шиной управления, сгенерированной после удаления вуали. Пиксельный поток выбирается во время операции Contrast Enhancement, после того, как расширенная интенсивность (T) будет вычислена.

Симуляция и результаты

Этот пример использует RGB 240 320 пиксельное входное изображение. И входные пиксели и расширенные выходные пиксели используют uint8 тип данных. Этот проект не имеет мультипиксельной поддержки.

Рисунок показывает вход и расширенные выходные изображения, полученные из подсистемы FogRectification.

Можно сгенерировать HDL-код для подсистемы FogRectification. Лицензия HDL Coder™ требуется, чтобы генерировать HDL-код. Этот проект синтезировался для Intel® Arria® 10 GX (115S2F45I1SG) FPGA. Таблица показывает использование ресурса. Проект HDL достигает тактовой частоты более чем 200 МГц.

% ===============================================================
% |Model Name              ||      FogRectificationHDL     ||
% ===============================================================
% |Input Image Resolution  ||         320 x 240            ||
% |ALM Utilization         ||           10994              ||
% |Total Registers         ||           20632              ||
% |Total RAM Blocks        ||            67                ||
% |Total DSP Blocks        ||            39                ||
% ===============================================================