exponenta event banner

Исправление тумана

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

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

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

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

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

Внедрение ЛПВП

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

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

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

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

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

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

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

Подсистема управления расширением использует блок конвертера цветового пространства для преобразования дефогированного изображения RGB в изображение в оттенках серого. Затем блок гистограммы вычисляет гистограмму значений интенсивности пикселей. По завершении гистограммы блок генерирует сигнал readRdy. Затем подсистема HistNormAndCDFCalculation нормализует значения гистограммы и вычисляет CDF.

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

Подсистема буфера изображений содержит два варианта моделирования подключения к внешней памяти. Это вариативная подсистема, в которой можно выбрать между подсистемой памяти поведения и интерфейсом буфера кадров модели (пакет поддержки панели инструментов Vision HDL для аппаратного обеспечения на основе Xilinx Zynq).

Используйте подсистему «Память поведения», если у вас нет указанного ниже пакета поддержки. Этот блок содержит блоки HDL FIFO. Функция «Память поведения» возвращает сохраненный кадр, когда он принимает сигнал всплывающего запроса. Для каждой строки кадра должен быть высок запрос pop в BehaviureMemory.

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

Входами в подсистему буфера изображения являются поток пикселей и шина управления, генерируемые после удаления тумана. Поток пикселей выбирается во время операции «Усиление контрастности» после вычисления интенсивностей растяжения (Т).

Моделирование и результаты

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

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

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

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