Шумоподавление изображения — классическая проблема, которую исследователи пытались решить на протяжении десятилетий. Раньше исследователи использовали фильтры для уменьшения шума на изображениях. Раньше они достаточно хорошо работали на изображениях с разумным уровнем шума. Однако применение этих фильтров приведет к размытию изображения. Если изображение слишком зашумлено, составное изображение будет очень размытым, и большая часть ключевых деталей изображения будет потеряна.
Эта проблема лучше решается с помощью архитектуры глубокого обучения. В настоящее время глубокое обучение намного превосходит традиционные фильтры шумоподавления. В этом посте я буду использовать пример для пошагового объяснения нескольких подходов, от формулирования проблемы до внедрения современных моделей глубокого обучения и, наконец, просмотра результатов.
Аннотация
- Что такое шум на изображении?
- постановка задачи
- постановка задачи машинного обучения
- Источники данных
- Исследовательский анализ данных
- Обзор традиционных фильтров для шумоподавления изображения
- Модели глубокого обучения для шумоподавления изображений
- сравнение результатов
- Объем будущей работы и усовершенствований
- использованная литература
Что такое шум на изображении?
Шум изображения — это случайное изменение яркости или цветовой информации в захваченном изображении. Это ухудшение сигнала изображения, вызванное внешними источниками. С математической точки зрения шум на изображении можно выразить как
A(x,y)= B(x,y)+ H(x,y)
в
A(x, y) = функция изображения шума B(x, y) = функция исходного изображения H(x, y) = функция шума
постановка задачи
Традиционные алгоритмы шумоподавления изображения всегда предполагают, что шум имеет равномерное распределение по Гауссу. Однако в действительности шум на реальных изображениях может быть гораздо более сложным. Этот вид шума на реальных изображениях называется реальным шумом или слепым шумом. Традиционные фильтры не могут хорошо работать с изображениями с таким шумом.
Таким образом, формулировка проблемы становится следующей: как убрать шум с изображения, содержащего слепой шум?
Наша цель — убрать шум с цветного изображения с помощью слепого шума без ограничений по задержке, потому что я хочу, чтобы изображение было как можно ближе к истине, даже если это занимает разумное количество времени.
Слепое шумоподавление означает, что в процессе шумоподавления основа для шумоподавления изучается из самих зашумленных сэмплов. Другими словами, независимо от того, какую архитектуру глубокого обучения мы строим, мы должны изучать распределение шума на изображении и устранять его. Как всегда, все зависит от типа данных, которые мы предоставляем модели глубокого обучения.
постановка задачи машинного обучения
Во-первых, давайте рассмотрим формат изображения RGB. 3 цветовых канала для одного изображения
Любое изображение RGB имеет три цветовых канала для каждого пикселя — красный, зеленый и синий.
Теперь каждый цвет представлен 8-битным числом в диапазоне от 0 до 255. Любое изображение может быть представлено трехмерной матрицей.
для шумного изображения.
Как мы видели в предыдущих главах, шум — это случайное изменение пикселей. Другими словами, некоторые значения пикселей для 3-х каналов в изображении испорчены. Чтобы восстановить исходную форму изображения, нам нужно исправить эти поврежденные значения пикселей.
Мы можем думать об этом как о проблеме регрессии обучения с учителем, где мы предсказываем истинное значение [число в диапазоне 0–255] поврежденных пикселей.
Потеря, которую я буду использовать, - это MSE (среднеквадратичная ошибка). Чем ниже оценка, тем лучше.
Для оценки производительности я бы использовал две метрики: чем выше оценка, тем лучше.
- PSNR (отношение пикового сигнала к шуму) Отношение пикового сигнала к шуму
- SSIM (Индекс структурного сходства) Структурное сходство
Источники данных
Поскольку это задача обучения с учителем, нам нужна пара зашумленного изображения (x) и истинного изображения (y).
Я собрал эти данные с трех точек зрения.
SIDD - содержит 160 пар изображений [шум-правда].
РЕНУАР - содержит 80 пар изображений [зашумленной правды].
NIND - содержит 62 пары изображений [шум-правда].
Исследовательский анализ данных
Анализ метаданных
Мы видим, что большинство фотографий были сделаны на iPhone 7, за которым следуют Samsung S6 и Google Pixel. На LG G4 было меньше всего фотографий.
Всего в наборе данных использовалось 14 уникальных настроек уровня ISO. Большинство фотографий были сняты при низких настройках ISO. Наиболее распространенные настройки ISO — 100 и 800, затем 1600, 400 и 3200. Чем выше экспозиция, тем ярче изображение, и наоборот.
Большинство фотографий были сделаны с выдержкой 100, затем 400 и 800 выдержек. Чем короче выдержка, тем темнее изображение и наоборот.
Большинство фотографий были нажаты в режиме нормальной яркости, а затем в режиме низкой яркости. Samsung S6 сделал всего 2 фотографии при высокой яркости.
Мы видим, что каждый телефон имеет свое разрешение изображения. Каждый телефон делает снимки с одинаковым разрешением.
Видно, что большинство средних значений пикселей находятся в диапазоне от нижних до средних значений (изображения от темных до средней яркости). Лишь немногие имеют очень высокое значение (яркие изображения). Вы также можете видеть, что некоторые средние значения на зашумленном изображении отличаются от реального изображения. Эту разницу легче увидеть при более высоких значениях пикселей.
Можно заметить, что зашумленное изображение имеет плавное распределение интенсивности пикселей по сравнению с исходным изображением. Причина этого в том, что всякий раз, когда на изображении присутствует шум, камера не может получить информацию о цвете этих пикселей (по разным причинам), поэтому эти пиксели заполняются «без цвета» (в основном программным обеспечением камеры с некоторыми случайными значениями). , Из-за этих случайных значений (шума) значения пикселей сглаживаются.
Обзор традиционных фильтров шумоподавления изображения
Традиционно исследователи придумали фильтры для шумоподавления изображений. Большинство фильтров зависят от типа шума на изображении. Существует несколько типов шума, таких как гауссов шум, шум Пуассона, спекл-шум, шум соли и перца (импульсный) и т. д. Для каждого типа шума существуют специальные фильтры. Таким образом, первым шагом при удалении шума с изображения с помощью традиционных фильтров является определение типа шума, присутствующего в изображении. После определения мы можем приступить к применению конкретного фильтра. Чтобы определить тип шума, существуют некоторые математические формулы, которые могут помочь нам определить тип шума. В противном случае эксперты в предметной области могут принять решение, просто взглянув на изображения. Существуют также фильтры, которые могут обрабатывать любой тип шума.
Существует большое количество фильтров, которые можно использовать для шумоподавления изображения. У каждого есть свои преимущества и недостатки. Здесь я расскажу об алгоритме Non-Local Mean (NLM), который считается хорошим средством для шумоподавления изображений.
Формула NLM,
Алгоритм вычисляет оценку пикселя как средневзвешенное значение всех пикселей изображения, но семейство весов зависит от сходства между пикселями i и j. Другими словами, он просматривает один фрагмент изображения, затем идентифицирует другие подобные фрагменты по всему изображению и вычисляет их средневзвешенное значение. Чтобы понять это, рассмотрите следующее изображение,
Аналогичные цветные блоки отмечены прямоугольниками одного цвета. Итак, теперь в качестве оценки целевого пикселя используется средневзвешенное значение пикселей похожих патчей. Алгоритм принимает в качестве входных данных размер участка и расстояние между участками.
Рассмотрим следующее изображение в градациях серого, очищенное от шума с помощью NLM-фильтра.
Вы можете видеть, что NLM неплохо справляется с шумоподавлением изображений. Если вы внимательно посмотрите, то заметите, что изображение с шумоподавлением слегка размыто. Это связано с тем, что среднее значение, примененное к любым данным, сглаживает значения.
Однако, когда уровень шума слишком высок, NLM не может дать хороших результатов. Рассмотрим следующее изображение, которое было удалено с помощью NLM-фильтра.
Хорошо видно, что изображение с шумоподавлением слишком размыто, и большая часть ключевых деталей теряется. Например, посмотрите на оранжевые фары синего грузовика.
Модели глубокого обучения для шумоподавления изображений
С появлением методов глубокого обучения теперь стало возможным удалять слепой шум из изображений так, чтобы результаты были очень близки к реальным изображениям с минимальной потерей деталей.
Были реализованы три архитектуры глубокого обучения,
REDNet, MWCNN, PRIDNet
REDNet -Residual Encoder-Decoder Networks
Это архитектура автоэнкодера с пропущенным соединением на основе CNN. Архитектура выглядит следующим образом:
Здесь я использовал 5-уровневый сверточный кодировщик и 5-уровневый деконволюционный декодер. Это очень простая архитектура, которую я использую в качестве эталона.
input_0 = Input(shape=(256,256,3), name="input_layer")
conv_layer_1 = Conv2D(filters=256, kernel_size=2, padding='same', name="conv_1")(input_0)
conv_layer_2 = Conv2D(filters=256, kernel_size=2, padding='same', name="conv_2")(conv_layer_1)
conv_layer_3 = Conv2D(filters=256, kernel_size=3, padding='same', name="conv_3")(conv_layer_2)
conv_layer_4 = Conv2D(filters=256, kernel_size=3, padding='same', name="conv_4")(conv_layer_3)
conv_layer_5 = Conv2D(filters=128, kernel_size=3, padding='same', name="conv_5")(conv_layer_4)
deconv_layer_5 = Conv2DTranspose(filters=256, kernel_size=2, padding='same', name="deconv_5")(conv_layer_5)
deconv_layer_5 = Add(name="add_1")([conv_layer_4, deconv_layer_5])
deconv_layer_4 = Conv2DTranspose(filters=256, kernel_size=2, padding='same', name="deconv_4")(deconv_layer_5)
deconv_layer_3 = Conv2DTranspose(filters=256, kernel_size=3, padding='same', name="deconv_3")(deconv_layer_4)
deconv_layer_3 = Add(name="add_2")([conv_layer_2, deconv_layer_3])
deconv_layer_2 = Conv2DTranspose(filters=128, kernel_size=3, padding='same', name="deconv_2")(deconv_layer_3)
deconv_layer_1 = Conv2DTranspose(filters=3, kernel_size=3, padding='same', name="deconv_1")(deconv_layer_2)
out = Add(name="add_3")([input_0, deconv_layer_1])
model = Model(inputs=[input_0], outputs=[out])
Как видите, эта архитектура хорошо работает при шумоподавлении изображений. Вы определенно можете увидеть уменьшение шума, и изображение пытается адаптироваться к исходному цвету изображения для поврежденных пикселей. Эта архитектура достигает оценки PSNR 30,5713 и оценки SSIM 0,7932.
MWCNN — многоуровневый вейвлет CNN
Это архитектура глубокого обучения на основе вейвлетов. Его архитектура имеет поразительное сходство с архитектурой U-Net. Единственное отличие MWCNN состоит в том, что, в отличие от понижающей и повышающей дискретизации в U-Net, здесь мы используем DWT (дискретное вейвлет-преобразование) и IWT (обратное вейвлет-преобразование). Как работают DWT и IWT, выходит за рамки этой статьи. Тем не менее, я прикрепил некоторые ресурсы в разделе [Ссылки], из которых вы можете извлечь уроки.
Здесь я расширил эту архитектуру до 4 уровней. Таким образом, моя глубина сети становится равной 32. Этот код немного длинный, я использую пользовательский слой в Keras. Вы можете проверить полный код MWCNN в репозитории Github.
Мы видим, что по сравнению с REDNet архитектура лучше работает с более четкими изображениями. Эта архитектура достигает оценки PSNR 32,5221 и оценки SSIM 0,8397.
PRIDNet — пирамидальная сеть шумоподавления реального изображения
Это современная архитектура глубокого обучения для слепого шумоподавления. Эта архитектура не так проста, как то, что мы видели в предыдущих двух сетях. PRIDNet состоит из нескольких модулей, разделенных на три основные части.
Сначала это может показаться немного подавляющим. Но позвольте мне разбить его на детали, это легко понять.
Модуль внимания канала
Модуль внимания канала отвечает за механизм внимания. Механизм внимания здесь реализуется путем сосредоточения внимания на каждом канале входа U. Думайте об этом «внимании» как о весе. Следовательно, каждый канал будет иметь вес. Веса внимания будут представлять собой вектор размера C[количество каналов]. Этот вектор будет умножен на вход U. Поскольку мы «учимся» вниманию, нам нужно, чтобы этот вектор можно было тренировать. Итак, что реализует PRIDNet, так это сначала глобальное среднее объединение входных данных, а затем передача их из двух полностью связанных слоев, результатом должен быть вектор с количеством каналов. Это веса внимания µ.
Модуль извлечения многомасштабных функций/модуль пирамиды
Это ядро всей архитектуры. Здесь мы будем использовать средний пул для данного размера ядра. Это понизит разрешение изображения. Затем мы применим к нему архитектуру U-Net. Я выбрал 5 уровней глубокого U-Net. Наконец, мы увеличим выборку с тем же размером, что и средний пул. Таким образом, это восстанавливает изображение до того же размера, что и вход (вход в этот модуль).
Мы сделаем это 5 раз с разными размерами ядра, а затем соединим результаты в конце.
модуль выбора ядра
Этот модуль вдохновлен исследовательской статьей, посвященной селективным сетям ядра. Исследовательская работа прекрасно иллюстрирует идею этой сети следующим образом:
В стандартной сверточной нейронной сети (CNN) рецептивные поля искусственных нейронов в каждом слое имеют одинаковый размер. В нейробиологическом сообществе хорошо известно, что размер рецептивного поля нейронов в зрительной коре модулируется стимулами и редко учитывается при построении CNN.
Строительный блок, называемый модулем Selective Kernel (SK), разработан, в котором несколько ветвей ядра разных размеров объединяются с использованием внимания softmax, управляемого информацией в этих ветвях. Различное внимание к этим ветвям приводит к разным размерам эффективных рецептивных полей нейронов в слое слияния.
Этот модуль очень похож на модуль Channel Attention. Согласно статье PRIDNet, синтетические векторы α, β, γ размера C обозначают мягкое внимание к U’, U’ и U’’ соответственно.
Полная схема архитектуры PRIDNet показана ниже.
Результат выглядит следующим образом:
Как видно, эта архитектура обеспечивает наилучшие результаты по сравнению с ранее рассмотренными архитектурами. На крупном изображении глаза выше обратите внимание на уровень детализации глазного яблока на изображении без шума!
Черные книги в зашумленных изображениях [Обрезанные библиотечные книги]. Они почти неотличимы от окружающей коричневой мебели. Все кажется черным. Тем не менее, наша модель способна уменьшить шум от книг таким образом, чтобы они, по крайней мере, отличались от окружающей мебели. То же самое касается второго изображения [обрезанная библиотечная мебель]. На зашумленном изображении видно, что мебель очень темная, а верх кажется почти черным. Однако наша модель способна распознавать коричневый цвет и устранять его шумы. Это потрясающе!
Эта архитектура достигает оценки PSNR 33,3105 и оценки SSIM 0,8534.
Сравнительные результаты
Мы ясно видим, что PRIDNet является наиболее производительной архитектурой с наименьшим временем для шумоподавления одного изображения.
Теперь давайте сравним результаты NLM-фильтра и PRIDNet.
ключевые области для сравнения
- Площадь крыши желтого грузовика
- оранжевые сиденья грузовика
- Оранжевые фары в синем грузовике
- Крыша синего грузовика (наблюдайте за тенями)
- две полоски посередине пола
Есть намного больше
Объем будущей работы и усовершенствований
Шумоподавление изображений — это активная область исследований, и время от времени разрабатывается много удивительных архитектур для шумоподавления изображений. В последнее время исследователи используют GAN для шумоподавления изображений, и этот подход показал удивительные результаты. Хорошая архитектура GAN определенно еще больше улучшит эффект шумоподавления.
Кодовый адрес этой статьи: github/chintan1995/Image-Denoising-using-Deep-Learning.