Blind Deconvolution — Автоматическое Восстановление Размытых Изображений

Размытые изображения — один из самых неприятных дефектов фотографии, наряду с расфокусированными изображениями.

Ранее я писал об алгоритмах деконволюции для восстановления размытых и расфокусированных изображений.

Эти относительно простые подходы позволяют восстановить исходное изображение, если известна точная траектория размытия (или форма пятна размытия).

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



Blind Deconvolution — автоматическое восстановление размытых изображений

В последние несколько лет интенсивно развивается новое направление в теории восстановления изображений – слепая обратная свертка (Blind Deconvolution).

По этой теме появилось довольно много работ и начинается активное коммерческое использование результатов.

Многие из вас помнят конференцию Adobe MAX 2011, где только что показали работу одного из алгоритмов слепой деконволюции: Исправление размытых фотографий в новой версии Фотошопа В этой статье я хочу подробнее рассказать, как работает эта удивительная технология, а также показать практическую реализацию SmartDeblur, который теперь тоже имеет в своем распоряжении этот алгоритм.

Внимание, под катом много фотографий! ГлавнаяЭтот пост является продолжением моей серии постов «Восстановление расфокусированных и размытых изображений»: Часть 1. Теория - Восстановление расфокусированных и размытых изображений Часть 2. Практика - Восстановление расфокусированных и размытых изображений Часть 3. Улучшение качества - Восстановление расфокусированных и размытых изображений Рекомендуется прочитать хотя бы первую теоретическую часть, чтобы лучше понять, что такое свертка, деконволюция, преобразование Фурье и другие термины.

Хоть я и обещал, что третья часть будет последней, я не удержался и рассказал о последних тенденциях в области восстановления изображений.

Я рассмотрю «Слепую деволюцию» на примере работы американского профессора Роба Фергюса «Устранение дрожания камеры с одной фотографии».

Оригинал статьи можно найти на его странице: http://cs.nyu.edu/~fergus/pmwiki/pmwiki.php Это не самая новая работа, в последнее время было много других публикаций, показывающих лучшие результаты - но в ней используется очень сложная математика ((для неподготовленного читателя) в несколько этапов, а основной принцип остается тем же.

Кроме того, Фергюс работа представляет собой своего рода «классику», он одним из первых предложил принципиально новый подход, позволивший автоматически определять смазочное ядро даже для очень сложных случаев.

Модель искажения Итак, приступим.

Давайте возьмем фотоаппарат и сделаем размытое фото — благо это не потребует особых усилий :)

Blind Deconvolution — автоматическое восстановление размытых изображений

Введем следующие обозначения: Б - наблюдается размытое изображение К — ядро размытия (размытие траектории), ядро л — исходное неразмытое изображение (скрыто) Н — аддитивный шум Тогда процесс размытия/искажения можно описать следующим выражением Б = К*L+Н Где символ «*» — это операция свертки, не путать с обычным умножением! Что такое свертка, вы можете прочитать в первая часть Визуально это можно представить следующим образом (для простоты опуская шумовую составляющую):

Blind Deconvolution — автоматическое восстановление размытых изображений

Так что же самое сложное? Представим себе простую аналогию – число 11 состоит из двух сомножителей.

Кто они такие? Варианты решения безграничны: 11 = 1 х 11 11 = 2 х 5,5 11 = 3 х 3,667 и т. д. Или, переходя к визуальному представлению:

Blind Deconvolution — автоматическое восстановление размытых изображений

Целевая функция.

Для получения конкретного решения нам необходимо ввести ограничения, как-то описать модель того, к чему мы стремимся.

Те.

нужно больше информации.

Один из вариантов — указать целевую функцию — это функция, значение которой тем выше (в простом случае), чем ближе результат к желаемому.

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

Это распределение имеет максимум в районе нуля и, в отличие от распределения Гаусса, имеет существенно более высокие вероятности больших значений (это нефть).

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

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

Blind Deconvolution — автоматическое восстановление размытых изображений

И для размытого изображения:

Blind Deconvolution — автоматическое восстановление размытых изображений

Таким образом, мы получили инструмент, позволяющий измерить «качество» получаемого результата с точки зрения четкости и сходства с реальным изображением.

Теперь мы можем сформулировать основные моменты для построения полноценной модели: 1. Ограничения, налагаемые моделью искажений Б = К*L+Н 2. Целевая функция результата реконструкции – насколько гистограмма градиентов похожа на теоретическое распределение с медленно уменьшающимися границами.

Обозначим это как р(Л п ) 3. Целевая функция ядра искажения — положительные значения и низкая доля белых пикселей (поскольку путь размытия обычно изображается тонкой линией).

Обозначим это как р(К) Объединим все это в общую целевую функцию следующим образом:

Blind Deconvolution — автоматическое восстановление размытых изображений

Где q(L п ) , д(К) распределения, полученные с помощью подхода Вариационный байесовский метод Далее эта целевая функция минимизируется методом координатного спуска с некоторыми дополнениями, которые я не буду описывать из-за их сложности и обилия формул — все это можно прочитать в работе Фергюса.

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

скорее всего в процессе поиска решения мы попадём в один из локальных минимумов.

Пирамидальный подход Решением этой проблемы является итеративный подход к построению ядра искажения.

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

От самого маленького размера до оригинального размера.

Далее мы инициализируем алгоритм, используя ядро 3*3 с одним из простых шаблонов — вертикальной линией, горизонтальной линией или пятном Гаусса.

В качестве универсального варианта можно выбрать последний – пятно Гаусса.

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

После этого мы изменяем размер полученного уточненного ядра, скажем, до 5*5 пикселей и повторяем процесс со следующим размером изображения.

Таким образом, на каждом шаге мы немного совершенствуем ядро и в результате получаем очень точную траекторию смазки.

Продемонстрируем итерационное построение ядра на примере.

Исходное изображение:

Blind Deconvolution — автоматическое восстановление размытых изображений

Процесс доработки ядра:

Blind Deconvolution — автоматическое восстановление размытых изображений

Первая и третья строки показывают оценку ядра на каждом уровне пирамиды изображений.

Вторая и четвёртая строки — оценка неискажённого изображения.

Результат:

Blind Deconvolution — автоматическое восстановление размытых изображений

Блок-схема алгоритма Осталось собрать все воедино и описать весь алгоритм:

Blind Deconvolution — автоматическое восстановление размытых изображений

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

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

Практическая реализация Наверное, самое интересное — это поиграться с алгоритмом слепой деконволюции вживую на реальных изображениях! Мы реализовали подобную опцию и добавили ее как новую функцию в SmartDeblur 2.0 — все по-прежнему бесплатно :) Адрес проекта: smartdeblur.net (Исходники и двоичные файлы из Предыдущая версия можно найти на GitHub: github.com/Y-Vladimir/SmartDeblur ) Пример работы:

Blind Deconvolution — автоматическое восстановление размытых изображений

Другой пример:



Blind Deconvolution — автоматическое восстановление размытых изображений



Blind Deconvolution — автоматическое восстановление размытых изображений



Blind Deconvolution — автоматическое восстановление размытых изображений

И наконец, результат работы на изображении с конференции Adobe MAX 2011:


Blind Deconvolution — автоматическое восстановление размытых изображений



Blind Deconvolution — автоматическое восстановление размытых изображений



Blind Deconvolution — автоматическое восстановление размытых изображений

Как видите, результат практически идеальный — почти как у Adobe в их демо-версии.

Технические подробности На данный момент максимальный размер обрабатываемого изображения установлен 1200*1200. Это связано с тем, что алгоритмы потребляют много памяти.

Даже в изображении 1000 пикселей — это больше, чем гигабайт. Поэтому было введено ограничение по размеру.

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

Blind Deconvolution — автоматическое восстановление размытых изображений

Для работы с программой вам нужно всего лишь загрузить изображение, нажать «Анализ размытия» и согласиться на выделение всего изображения – анализ может занять несколько минут. Если результат вас не удовлетворит, можно выделить другую область (выделить мышкой на изображении, перемещая вправо-вниз, немного не очевидно, но на этом пока :)).

Правая кнопка снимает выделение.

Флажок «Агрессивное обнаружение» изменяет настройки, чтобы выделить только самые важные элементы ядра.

Пока хорошие результаты достигнуты не на всех изображениях - поэтому мы будем очень рады вашим отзывам, они помогут нам улучшить наши алгоритмы!

--

Владимир Южиков (Владимир Южиков) Теги: #SmartDeblur #слепая деконволюция #восстановление изображения #деконволюция #преобразование Фурье #Алгоритмы #Обработка изображений

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.