Реализация FPGA улучшения недостаточной освещенности

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

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

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

Алгоритм LLE

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

Алгоритм LLE берет изображение RGB недостаточной освещенности с 3 каналами, как введено. Этот рисунок показывает блок-схему Алгоритма 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. Улучшение: изображение airlight от предыдущего этапа усовершенствовано итеративным сглаживанием. Это сглаживание усиливает детали изображения после улучшения. Этот этап состоит из пяти итераций фильтра с 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$, представляет среднюю линию изменения темных областей карты airlight от темного до ярких значений. Пример использует опытным путем выведенное значение$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}$ может быть реализована как постоянное умножение, а не деление. Поэтому реализация HDL этого уравнения не требует блока деления.

Реализация HDL

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

open_system('LLEExample');

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

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

open_system('LLEExample/LLEHDL');

Подсистема LLEHDL инвертирует вход uint8 пиксельный поток путем вычитания каждого пикселя от 255. Затем подсистема DarkChannel вычисляет темный минимум интенсивности канала через все три канала. Подсистема IterativeFilter сглаживает изображение airlight с помощью последовательных блоков Фильтра Изображений. Рост разрядности каждого этапа фильтра обеспечен, чтобы сохранить точность. Фактор Улучшения вычисляется в области EnhancementFactor. Константа$\frac{1}{170}$ реализована с помощью блока Gain. Блок Pixel Stream Aligner выравнивает поток входного пикселя с конвейерным, модифицированным потоком. Выровненный входной поток затем умножается на модифицированный пиксельный поток.

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

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

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

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

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

Ссылки

[1] С. Дун, Г. Ван, И. Пан, В. Ли и Дж. Вэнь, "Быстро эффективный алгоритм для улучшения низкой Международной конференции IEEE" видео подсветки по вопросам Мультимедиа и Экспо, 2011.

Для просмотра документации необходимо авторизоваться на сайте