exponenta event banner

Улучшение при низком освещении

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

LLE (low-light enhancement) - это этап предварительной обработки для приложений в области автономного вождения, сбора научных данных и общего визуального улучшения. Изображения, полученные в условиях низкой освещенности и неравномерной яркости, имеют низкий динамический диапазон с высокими уровнями шума. Эти качества могут привести к ухудшению общей производительности алгоритмов компьютерного зрения, которые обрабатывают такие изображения. Этот алгоритм улучшает видимость основных элементов изображения.

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

Алгоритм LLE

Этот пример выполняет LLE, инвертируя входное изображение и применяя алгоритм устранения помутнения к инвертированному изображению. После инвертирования изображения с низким светом пиксели, представляющие небыречную область, имеют низкую интенсивность, по меньшей мере, в одном цветовом канале. Эта характеристика похожа на изображение, запечатленное в туманных погодных условиях [1]. Интенсивность этих темных пикселей в основном обусловлена рассеянием, или воздушным светом, поэтому они обеспечивают точную оценку эффектов помутнения. Чтобы улучшить темный канал в перевернутом изображении с низким освещением, алгоритм изменяет изображение с воздушным освещением на основе условий окружающего освещения. Изображение воздушного света модифицируется с использованием оценки темного канала и затем уточняется сглаживающим фильтром. Чтобы избежать шума от чрезмерного усиления, в примере применяется нелинейная коррекция для лучшей оценки карты воздушного освещения. Хотя этот пример отличается своим подходом, краткий обзор улучшения изображения с низким освещением см. в разделе Улучшение изображения с низким освещением (панель инструментов обработки изображений) (панель инструментов обработки изображений).

Алгоритм LLE принимает трехканальное изображение RGB с низким уровнем света в качестве входного сигнала. На этом рисунке показана блок-схема алгоритма LLE.

Алгоритм состоит из шести этапов.

1. Масштабирование и инверсия: входное изображение$I^c(x,y), c\ \epsilon\ [r,g,b]$ преобразуется в диапазон [0,1] делением на 255, а затем инвертированием в пикселях.

$$I^c_{scal}(x,y) = \frac{I^c(x,y)}{255}$$

$$I^c_{inv}(x,y) = 1 - I^c_{scal}(x,y)$$

2. Оценка темного канала: Темный канал оценивается путем нахождения пиксельного минимума по всем трем каналам инвертированного изображения [2]. Минимальное значение умножается на коэффициент помутнения, $z$который представляет количество помутнения для удаления. Значение$z$ находится в диапазоне от 0 до 1. Более высокое значение означает, что из изображения будет удалено больше помутнения.

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

3. Уточнение: Изображение воздушного света с предыдущей стадии уточняется итеративным сглаживанием. Это сглаживание усиливает детали изображения после улучшения. Эта стадия состоит из пяти итераций фильтра с ядром 3 на 3 для каждой стадии. Уточненное изображение хранится в. $I_{refined}(x,y)$Эти уравнения получают коэффициенты фильтра,, $h$используемые для сглаживания.

$$I_{refined(n+1)}(x,y) = I_{refined(n)}(x,y) * h,\ n = [0,1,2,3,4]\ \&
\ I_{refined(0)} = I_{air}$$

$$ where \ h = \frac{1}{16}
 \left[ {\begin{array}{ccc}
 1 & 2 & 1\\ 2 & 4 & 2\\ 1 & 2 & 1\\
 \end{array} } \right] $$

$$Let\ I_{refined(5)}(x,y) = I_{refined}(x,y)$$

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

$$ I_{nlc}(x,y) = \frac{[I_{refined}(x,y)]^4}{[I_{refined}(x,y)]^4+m^4} $$

5. Восстановление: Восстановление выполняется пиксельно по трем каналам инвертированного и скорректированного изображения, $I_{nlc}$как показано:

$$ I^c_{restore}(x,y) = \frac{I^c_{scal}(x,y)-I_{nlc}(x,y)}{1-I_{nlc}(x,y)} $$

6. Инверсия: Для получения окончательного улучшенного изображения этот этап инвертирует выходные данные этапа восстановления и масштабируется до диапазона [0,255].

$$ I^c_{enhanced}(x,y) = 255 \times (1 - I^c_{restore})$$

Упрощение алгоритма LLE

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

Оценка темного канала без масштабирования и инверсии задается

$$I_{air}(x,y) = \frac{z}{255}I'_{air}(x,y)$$ where $$I'_{air}(x,y) = 255
- \min_{c\ \epsilon\ [r,g,b]}I^c(x,y)$$

Результатом итеративной операции уточнения на$I_{air}$ является

$$I_{refined}(x,y) = \frac{z}{255}I'_{refined(5)}(x,y)$$

где

$$I'_{refined(n+1)}(x,y) = I'_{refined(n)}(x,y) * h,\ n = [0,1,2,3,4]\
\& \ I'_{refined(0)}(x,y) = I'_{air}(x,y)$$

Подстановка$I_{refined}$ в уравнение нелинейной коррекции дает

$$I_{nlc}(x,y) = \frac{z^4[I'_{refined}(x,y)]^4}{z^4[I'_{refined}(x,y)]^4
+ (255 \times m)^4}$$

Подстановка$I_{nlc}$ в уравнение восстановления дает

$$I^c_{restore}(x,y) = 1 - \frac{I^c(x,y)}{255} -
\frac{I^c(x,y)}{255}\frac{z^4}{(255 \times m)^4}[I'_{refined}(x,y)]^4$$

Вычитание$I^c_{restore}$ из 1 и умножение на 255 дает

$$I^c_{enhanced}(x,y) = I^c(x,y)\times \left(1 +
\Big[\frac{z}{255 \times m}I'_{refined}(x,y)\Big]^4\right)$$

Если средняя точка интенсивности равна $m$0,6, а коэффициент помутнения $z$равен 0,9, упрощенное уравнение

$$ I^c_{enhanced}(x,y) = I^c(x,y) \times \left( 1 +
\Big[\frac{1}{170}I'_{refined}(x,y)\Big]^4 \right)$$

В приведенном выше уравнении коэффициент, умноженный$I^c(x,y)$ на, можно назвать коэффициентом расширения. Константа$\frac{1}{170}$ может быть реализована как постоянное умножение, а не как деление. Следовательно, реализация этого уравнения в ЛПВП не требует блока деления.

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

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

open_system('LLEExample');

Местоположение входного изображения указывается в блоке LowLightImage. Подсистема LLEBehavioural вычисляет улучшенное изображение с использованием необработанных уравнений, как описано в разделе Алгоритм LLE. Подсистема LLESimplified вычисляет улучшенное изображение с использованием упрощенных уравнений. В simpOutputViewer отображаются выходные данные подсистемы LLESimplified.

Подсистема LLEHDL реализует упрощенное уравнение, используя формат парящего пикселя и блоки с фиксированной точкой из панели инструментов Vision HDL. Подсистема ввода преобразует входные кадры в поток пикселей uint8 значения и pixelcontrol с использованием блока «Кадр в пиксель». Подсистема вывода преобразует выходной поток пикселей обратно в кадры изображения для каждого канала с использованием блока Pixel To Frame. Полученные кадры сравниваются с результатом работы подсистемы LLESimplified. Подсистема hdlOutputViewer и подсистема inputViewer показывают улучшенное выходное изображение и входное изображение с низким освещением соответственно.

open_system('LLEExample/LLEHDL');

Подсистема LLEHDL инвертирует вход uint8 поток пикселей путем вычитания каждого пикселя из 255. Затем подсистема DarkChannel вычисляет минимальную интенсивность темного канала для всех трех каналов. Подсистема ItingFilter сглаживает изображение освещения с помощью последовательных блоков фильтра изображения. Рост битов каждой ступени фильтра поддерживается для сохранения точности. Коэффициент расширения рассчитывается в области Коэффициент расширения. Константа$\frac{1}{170}$ реализуется с использованием блоков Константа (Constant) и Возвратно-поступательный (Featural). Блок выравнивания пиксельного потока выравнивает входной поток пикселей с конвейерным измененным потоком. Выровненный входной поток затем умножается на модифицированный поток пикселей.

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

Входные данные модели предоставляются в блоке LowLightImage (Изображение из файла). В этом примере используется входное изображение размером 720 на 576 пикселей с каналами RGB. Используются как входные пикселы, так и расширенные выходные пикселы uint8 тип данных. Необходимые переменные для примера инициализируются в обратном вызове InitFcn.

Подсистема LLEBehavioural использует блоки Simulink с плавающей запятой для прототипирования уравнений, упомянутых в разделе Алгоритм LLE. Подсистема LLESimplified реализует упрощенное уравнение в блоках с плавающей запятой без операции деления. Подсистема LLEHDL реализует упрощенное уравнение с использованием блоков с фиксированной точкой и потокового видеоинтерфейса. На рисунке показано входное изображение и расширенные выходные изображения, полученные из подсистемы LLESimplified и подсистемы LLEHDL.

Точность результата может быть вычислена с использованием процента пикселей ошибки. Для вычисления процента пикселей ошибки в выходном изображении разница между значением пикселя опорного выходного изображения и выходным изображением LLEHDL не должна быть больше единицы для каждого канала. Процент значений пикселей, которые отличаются более чем на 1, вычисляется для трех каналов. Подсистема simpError сравнивает результат LLEBehavioural подсистемы с результатом LLESimplified подсистемы. Подсистема hdlError сравнивает результат работы подсистемы LLEHDL с результатом работы подсистемы LLESimplified. Для каждого канала отображается число пикселей ошибки. В таблице показан процент пикселей ошибки, рассчитанный с помощью обоих сравнений.

Ссылки

[1] X. Dong, G. Wang, Y. Pang, W. Li и J. Wen, «Быстрый эффективный алгоритм улучшения видео с низким освещением» IEEE Международная конференция по мультимедиа и экспо, 2011.