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

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


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

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



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

5. Восстановление: Восстановление выполняется мудрое пикселем через три канала инвертированного и исправленного изображения
, как показано:

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

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

Результат итеративной операции улучшения на

где

Замена
в нелинейное уравнение исправления дает

Замена
в уравнение восстановления дает

Вычитание
от 1 и умножение на 255 дают

Со средней точкой интенсивности
, набором к 0,6 и фактор тумана
, набор к 0,9, упрощенное уравнение

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

Местоположение входного изображения задано в блоке LowLightImage. Подсистема LLEBehavioural вычисляет расширенное изображение с помощью необработанных уравнений, как описано в разделе LLE Algorithm. Подсистема LLESimplified вычисляет расширенное изображение с помощью упрощенных уравнений. simpError подсистема сравнивает результаты LLEBehavioural и подсистем 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. Константа
реализована с помощью блока Gain. Блок Pixel Stream Aligner выравнивает поток входного пикселя с конвейерным, измененным потоком. Выровненный входной поток затем умножается на измененный пиксельный поток.
Вход к модели обеспечивается в блоке LowLightImage (Image From File). Этот пример использует 720 576 пиксельное входное изображение с каналами RGB. И входные пиксели и расширенные выходные пиксели используют тип данных uint8.
Подсистема 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.