Устранение тумана

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

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

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

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

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

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

Удаление тумана

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

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

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

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

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

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

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

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

Затем алгоритм вычитает карту освещения из входного туманного изображения и умножает на множитель.$$ \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 в Gray Conversion: Этот этап преобразует разреженное изображение RGB $$ I^c_{restore}(x,y) $$из алгоритма удаления тумана в полутоновое изображение,.$$ I_{gray}(x,y) $$

2. Вычисление гистограммы: Этот этап использует блок Гистограммы, чтобы подсчитать количество пикселей, падающих на каждом уровне интенсивности от 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. Замена значений интенсивности: Этот шаг преобразует интенсивность пикселей отключенного изображения в растянутые значения интенсивности. Каждое значение пикселя в отключенном изображении заменяется соответствующей интенсивностью в Т.

Реализация HDL

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

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

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

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

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

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

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

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

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

Подсистема Image Buffer содержит две опции моделирования подключения к внешней памяти. Это вариант подсистемы, в которой можно выбрать между подсистемой BehavioralMemory и Интерфейсом Буфера Системы Координат Модели (Пакет поддержки Vision HDL Toolbox для Xilinx Zynq-Based Hardware).

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

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

Входами для подсистемы Image Buffer являются поток пикселей и шина управления, сгенерированные после удаления тумана. Поток пикселей выбирается во время операции улучшения контрастности после вычисления растянутой интенсивности (T).

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

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

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

Можно сгенерировать HDL-код для подсистемы FogRectification. Для генерации HDL-кода требуется HDL- Coder™ лицензия. Этот проект была синтезируем для 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                ||
% ===============================================================
Для просмотра документации необходимо авторизоваться на сайте