Pull to refresh

Comments 93

UFO just landed and posted this here
Я уже не могу на нее смотреть во всех научных статьях и публикациях по обработке изображений :)
UFO just landed and posted this here
UFO just landed and posted this here
Необрезанное фото намного лучше выглядит :)
UFO just landed and posted this here
Восстановим справедливость — Лену тоже можно размазывать и потом Винеровским фильтром обратно собирать:
image
На самом деле в реальной жизни не всё так шоколадно. Тут важно знать закон, по которому происходит искажение, который в большинстве случаев неизвестен. Вот ещё любопытная статья, уже обсуждавшаяся на хабре:
Image Deblurring using Inertial Measurement Sensors
Вкратце — камеру снабдили сенсорами, чтобы при съёмке регистрировать шевелёнку и потом восстанавливать резкое изображение, зная закон перемещения камеры при съёмке.
В астрономии тоже похожий математический аппарат применяется для получения более резких изображений галактик с целью определения их размеров. Закон размытия в этом случае получают из изображений недалеко отстоящих звёзд в предположении что звёзды являются точечными источниками.
Кстати в камерах такие сенсоры уже есть, во всяком случае в тех, где используется стабилизация матрицы. Было бы интересно, а нельзя ли использовать данные с сенсоров чтобы потом программно восстанавливать картинку, даже если уже нельзя смещать матрицу…

Прошло 10 лет, теперь это в каждой камере смартфона)

Интересное слово — шевелёнка…
Замечательно, очень часто нужно подретушировать смазанную фотку
Смаз, кстати, проще устраняется — причин несколько:
1. Искажение PSF получается одинаковым для всех точек изображения, т.е. каждый пиксель превращается в одну и ту же (по форме) линию или траекторию. Для расфокусировки, в общем случае, это не так — часть объектов может быть в фокусе, часть вне фокуса, это зависит от расстояния. В математических терминах это назвается «трансляционно инвариантные искажения»
2. Влияние шумов меньше, т.к. пиксель распределяется по гораздо меньшей площади в результате искажения (сравните линию и круглое пятно одинаковых размеров). Поэтому накопление шума происходит в меньшей степени.

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

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

Статья ваша супер! Молодец!
> если смотреть в сторону радиофизики
Собственно, примерно оттуда и пришло — теория анализа систем управления.

Насчет PSF — она, разумеется, связана с объективом фотика (с него и снимают образцовую PSF, обычно), но основная проблема, что PSF разная для каждой точки изображения и напрямую зависит от расстояния от данной точки на объекте до объектива. Простейший пример — лицо в фокусе (причем глаза полностью резкие, нос и уши чуток размытые), задний план размыт, сбиваем фокус — лицо размылось, задний план размылся еще сильнее (либо, наоборот, слабее).
Это значительно усложняет задачу
Такими темпами хабр скоро в ВАКовский журнал превратится:)
Первая часть — это скорее обзор известной теории с иллюстрациями. Во второй сделаю максимальный акцент на практике
Уж лучше Хабру в эту сторону развиваться, чем в сторону новостей, пресс-релизов и копипаста.
Лучше так, чем в ализаровскую «желтуху» и трансляцию Engadget и HackerNews.
Так вот как в кино улучшают изображения!

когда суперхакеры со спутника получают размытое изображение, потом «Щащаща… ВУАЛЯ!»
Ну раз никто не добавляет эту картинку, то это сделаю я. Автору спасибо за замечательную статью! image
оборжался на работе! хорошо что рядом никого не было! Я тоже всегда удивлялся откуда америкоты берут такие «странные» технологии!
Для этого необходимо получить несколько изображений. По одному восстановить картинку без значительной потери разрешения просто невозможно.
За подсказку с гуглапи спасибо!
Насчет 48-битного формата — все просто, каждый пиксель в результате искажения размазывается по окрестности, т.е. исходная информация сохраняется в мельчайших перепадах яркости. Чем лучше мы сохраним эти перепады, тем точнее восстановление, когда мы будем собирать размазанный пиксель. Если в приведенных скриптах после искусственного искажения вставить сохранение на диск, а потом чтение этого же файла и выбрать формат PNG 24 бита (8 для каждого канала)

imwrite(Blurred, 'image_blurred_disk_(15).png', 'png', 'bitdepth', '8');
Blurred = im2double(imread('image_blurred_disk(15).png'));


, то восстановление будет как в самой первой картинке до хабраката, если сохранить в jpg, то качество результата будет еще хуже, если же выставить 48 бит ('bitdepth', '16'), то получится исходная картинка.

Т.е. на каждом этапе в цифровой камере и при последующей обработке происходит потеря информации:
Информация с сенсора -> Преобразование в RAW -> Интерполяция с байеровского массива -> Преобразование в PNG 48 бит -> Преобразование в PNG 24 бит -> Преобразование в JPEG -> Ресайз
А, понятно, спасибо.
При таком раскладе грех не встроить деблюр прямо в фотокамеры. (а в чуть более отдаленном будущем в видео, эх, устранение motion blur в рилтайме…).
И такие исследования уже ведутся:
Эффективный метод стабилизации изображений от Microsoft
Суть в том, что в то время, пока открыт затвор, записывается траектория движения/дрожания камеры с помощью трехосого гироскопа и акселерометра. Полученная траектория смаза есть ничто иное, как PSF — причем весьма точная, ну а дальше одним из алгоритмов деконволюции устраняется смаз.
Мне пришло в голову другое сравнение:
В старые добрые времена, когда снимали на пленку, картинки полученные с негативов всегда казались более резкими чем те что были получены со слайдов. Почему? Потому что у негатива есть зерно. То есть некая фактура изображения. Она делает картинку зрительно резче.

Глазу, как и любому автофокусу надо за что то зацепиться.
Всё же насчет «может быть однозначно восстановлена» вы очень сильно погорячились.
Людей, которые немного в теме, это утверждение сразу настраивает резко против статьи и заставляет искать попытки «впарить серебряную пулю». Хотя за вычетом этого утверждения, статья замечательная: в неё доступным и популярным языком изложена весьма сложная теория.

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

Если речь идёт о цифровых изображениях с современных камер, то (как и замечено в середине статьи) однозначно восстановить его уже не получится, даже если преобразования заданы аналитически. Банально не хватает разрядности.

Применяемые в первой части статьи «теоретически точные» алгоритмы катастрофически неустойчивы к ошибкам, в том числе шумам квантования из-за нехватки разрядности. Достаточно сказать, что на практике цифровое преобразование Фурье необратимо для 8-битных изображений, если для хранения результатов преобразования использовать float-ы одинарной точности (32 бита). Для однозначного восстановления таких изображений нужно использовать только double (64 бит). Но и double не хватит для изображений с 16 битами на канал (48-битных тифов или пнг).

Рассматриваемые далее в статье Винер и Тихонов — это заведомо приближенные методы, намного более устойчивые к шумам, но всё же формально не позволяющие говорить о какой-либо однозначности восстановления. Так что серебряной пули, увы, не существует.
> Всё же насчет «может быть однозначно восстановлена» вы очень сильно погорячились… Однозначность может быть, только если и изображение, и преобразования заданы абсолютно точно, то есть аналитически, то есть в виде формул.

Да, вы все верно написали — 100% восстановление будет только при известной PSF и достаточной точности представления, для остальных случаев будет то или иное приближение, поэтому я и упомянул про "может быть однозначно восстановлена с некоторыми оговорками"
Про потери информации на каждом этапе преобразования ответил чуть выше в вопросе про 48-битный формат.
Как результат — пуля далеко не серебряная, но в некоторых случаях выручить может. Но, конечно, для фоток, снятых с мобильника трясущимися руками в сумерках уже ничего не может :)
Автор, признайтесь, вы с дьяволом никаких контрактов не подписывали?
Магии тут нет — ловкость рук чистая математика и никакого мошенничества :)
Если серьезно, то моё почтение. Очень круто.
интересно а так можно добится большего разрешения на матрице с низкой плотностью точек или для не самой хорошей линзы? поидее те же алгоритмы должны прокатить…

смерть зеркалкам? :))
То, что вы описали, называется Super-resolution, когда из серии (или из видео) снимков неподвижной сцены с небольшими смещениями получается один снимок с улучшенным разрешением.
Но проблемы все те же — шумы и помехи, ошибки квантования, округление, ограниченный динамический диапазон матрицы и пр. Чудес не будет, но в случае качественного исходного материала можно неплохо улучшить разрешение
пойду читать про супер разрешение.
эх жду статью подробнее желательно с сорцами алгоритмов :)

эх любопытство и желание узнать где эта граница невозможного мне с д700 такие алгоритмы не часто требуются =)))
Книги зачетные.
Еще на эти темы можно результативно копать выпуски IEEE Transactions on Image Processing, пусть даже за мохнатые годы, когда они выходили на русском языке и рассылались по техническим библиотекам.
1) дефокус это всетаки не блюр, там соовсем другое искажение
2) смазывание от движения объектива это тоже не классический «моушенблюр»
3) для нормального восстановления таки надо строить модель искажения, то есть для какой части сцены какое искажение было внесено.
Отвечу по порядку:
1) Как раз самый настоязий блюр — их же много разных, gaussian blur, average blur,… Вопрос только в виде PSF и ее неоднородности по кадру. В качестве первого приближения можно считать что для объективов это идеальный круг — иногда может быть правильным многогранником (если диафрагма прикрыта) с замысловатой формой краев.
2) А что такое классический мушенблюр — вы имеете ввиду его реализацию в современных видеокартах? Так это лишь имитация. По моему, как раз классический motion blur при движении фотика — хотя вид кривой (ядра) может быть весьма непростым
3) По-хорошему, да — надо строить точную карту искажений, но это крайне затруднительно сделать, имея на руках только снимок. Да и все перечисленные в статье методы уже не будут работать напрямую, т.к. они расчитаны на трансляционно инвариантные искажения. Хотя и можно обрабатывать сегментами или еще какие ухищрения применять.
1) нет :) для демонстрации почему нет, снимите источник света в нефокусе :) и в фокусе, и потом попытайтесь достичь блюром из первой картинки вторую :)
2) если докапываться к словам, то да, моушнблюр классический это движение объекта съемки относительно камеры, но если брать «моушнблюр» как графический эффект из графического редактора, то он далек от оригинального блюра камерой (предметы для камеры на разном расстоянии, а для редактора эта информация недоступна)
3) точную сделать затруднительно, но приближенную, довольно качественно, сделать можно. Пример эвристики: уменьшаем картинку, ищем контрастные места, эти же места анлизируем какое пробразование нужно наложить чтобы получить такое на большой картинке, проанализировав несколько разных мест картинки — делаем выводы о взаимосвязи искажений между собой (например вся картинка это моушен блюр на котором один предмет дальше другого)

вообще гораздо интереснее восстановление из видео, когда из нескольких кадров в хреновом качестве можно сделать один в хорошем.
1) В разделе «Заключение» как раз есть похожий пример с размытием источника света (справа внизу от машины блик) — вполне восстанавливается, как видно
2) Разницы особо нету — что объект движется относительно камеры, что наоборот, результат одинаковый.

«предметы для камеры на разном расстоянии, а для редактора эта информация недоступна»
Для моушин блюр расстояние до камеры практически не влияет (за исключением паралакса, но он крайне мал). Опять же посмотрите на мой пример восстановления реального смаза — качество вполне хорошее, значит PSF близка к истинной.
3) Для моушен блюр примерно так и делают — на основе анализа картинки восстанавливают траекторию смаза. Посмотрите ссылки в разделе P.S. Там и программу скачать можно и поиграться с восстановлением реальных картинок.
1) вас не напрягает что «восстаовился» какойто круг вокруг блика? :)

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

3) ну так и я про тоже :) это вы же сказали что «нельзя» :) :)
очень даже влияет, так как ближние объекты сдвигаются на меньшее расстояние чем дальние, и блюр будет разных «масштабов».

Вы, наверное, путаете с дефокусом — там действительно степень размытия зависит от расстояния до объекта. А при повороте фотика все объекты на матрице сдвигаются на одинаковое количество пикселей (в идеале)
Нарисуйте классическую схему распространения света от объекта до пленки/матрицы аппарата. Нарисуйте два объекта один дальше, другой ближе. Сдвиньте немного фотоаппарат и перерисуйте схему распространения :)
Вот я тут сделал это за вас:

2ftp.ru/?action=getfile&id=xfnsmbrriqccc0e29a49a485751b5d6ca104d1badc

Как видно расстояние на матрице у дальнего объекта меньше чем у ближнего :)
Все так, только вы привели схему для параллельного сдвига фотика — оно есть, но практически ни на что не влияет в силу малости. Это надо на многие сантиметры фотик дернуть, чтобы появились видимые смазы.
А вот небольшие повороты вокруг оптической оси — это именно то, что является доминирующей причиной смазов в реальных условиях, здесь достаточно повернуть фотик на доли миллиметра, чтобы появился огромный смаз. Именно его устраняют оптические стабилизаторы:

Стабилизация изображения — это технология, применяемая в фото- и видеосъёмочной технике, механически компенсирующая собственные угловые движения камеры

И вот в этом случае расстояние до объекта роли не играет
Ну если говорить строго — повороты нельзя назвать доминирующей причиной смаза. Туристы часто снимают в темноте из окна автобуса, и там смаз обусловлен сдвигом, а с ним приходит и параллакс.
А ещё можно крутануть камеру вокруг оптической оси, и это тоже надо учитывать при построении ядра.
Так что несмотря на очевидность такого способа восстановления, вывод его в удобный продукт штука сложная, и не зря в фотошопе он не появлялся так долго и был один unsharp mask.
Увы оно не малое, и на больших выдержках системы стабилизации его компенсировать не в состоянии. И так большая часть размазываний в реальной жизни — от дрожания рук а не от того что фотораф вращает фотоаппарат тудасюда.

Кроме того, спешу вас разочаровать, в случае с поворотом фотика относительно некоторой оси (тут уж схему нарисуйте сами) картина абсолютно такая же — для объектов на разном расстоянии разное смещение на матрице :))
«Увы оно не малое, и на больших выдержках системы стабилизации его компенсировать не в состоянии.»

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

«в случае с поворотом фотика относительно некоторой оси… картина абсолютно такая же — для объектов на разном расстоянии разное смещение на матрице :)) „

Простой эксперимент — поводите глазами вправо влево, смещаются ли объекты друг относительно друга? Нет, потому что не меняется положение центра оптической оси. Также и в фотике.
По поводу оптичесокой стабилизации — привет КЭП :)

По поводу простого примера с глазами — видимые размеры предметов меняются так как меняется перспективное искажение :) другое дело что вы этого не замечаете — мозг компенсирует. Рекомендую таки нарисовать себе картинку :)
При повороте вокруг нодальной точки объектива смещение объектов переднего и заднего планов не происходит совсем. Если поворот не вокруг этой точки, то небольшое смещение есть, но оно ооочень мало для объектов, которые находятся хотя бы дальше нескольких метров. А вот угловое смещение (из-за которого и идет смаз) на порядки превышает смещение из-за паралакса
Ссылка
ну даже по ссылке вам уже нарисовано :) зацените смещение у ближнего и у дальнего объекта
www.1panorama.ru/kak-sdelat-panoramu/lesson-01/02-panorama-kak-sdelat-povorot.jpg
:))) синий как был примерно посредине кадра так и остался, а красный аж полкадра «пролетел» :) такчто ещё раз повторюсь, моушнблюр от движения камеры и от «спецэффекта в редакторе» это разные блюры. Чтож вы такой упорный то?
Скорее всего, имеют в виду моушен-блюр на движущемся объекте, не связанном с фотоаппаратом — например, проехавшей мимо машине. Кажется, здесь даже выделение части сцены не поможет.
Спасибо за статью. Коллега, вот Вы воспользовались несколькими библиотечными функциями Матлаба:
deconvreg, deconvblind, deconvlucy для иллюстрации регуляризации по Тихонову, слепой деконволюции и фильтра Люси-Ричардсона. Винеровский фильтр прост как пять копеек и изложен во многих учебниках, а вот эти три — не очень тривиальны и не так широко известны. Вот если бы Вы (или кто-либо ещё) как-нибудь популярно изложили их внутреннее устройство и сущность тоже (что запросто может являться темой нескольких статей), то это было бы просто здорово. Понятно, что хабр — не «IEEE Transactions on Image Processing», но тем не менее пользы было бы очень много.
UFO just landed and posted this here
Они довольно просто пишутся «на коленке». Почитайте Гонсалеса и Вудса, поймете, что это довольно просто.
Автору уважение!!!
И еще одна ссылочка на соседнюю проблему.

А какой у нас блюр на кратинке?
Aizenberg I., Bregin T., Butakoff C., Karnaukhov V., Merzlyakov N. and Milukova O., «Type of Blur and Blur Parameters Identification Using Neural Network and Its Application to Image Restoration». Lecture Notes in Computer Science, Vol. 2415, Springer, 2002, pp. 1231-1236.
Спасибо!
На самой первой картинке блюр в виде круга: PSF = fspecial('disk', 15);
;)
В статье рассматривается проблема определения блюра несколько шире.

Какой тип(радиал, гауссово размытие, смаз, дефокус ), и по возможности параметры этого смаза.
Что поможет в применении алгоритмов восстановления представленными вами.
Конкретно на первой картинке до хабраката — там тип «lens blur» в терминах фотошопа, а в качестве PSF — просто круг диаметром 15, это видно из скрипта «PSF = fspecial('disk', 15);».
В остальных примерах из скрипта также можно понять тип применяемого искажения.
;)
А на автомате?
на потоке определять тип блюра и устранять его?

да еще и параметры устранения подобрать?


Вот вам и новая задачка. ;)
Этим как раз blind deconvolution занимается :)
По этой теме много научных статей появилось в последнее время.
Я так понял, это просто передранный Гонсалес и Вудс? Только вместо Лены использовались свои фото?

Кстати, не заметил предупреждения о том, что деконволюция — неустойчивый оператор и пользоваться им надо с осторожностью (стоит только «нарваться» на нули передаточной функции, как получим «большую радость» в виде бешеных артефактов и фазовых искажений).
Вообще, основная цель статьи — популяризовать теорию деконволюции для неподготовленного читателя, для тех, кто мало знаком с теорий обработки изображений. Поэтому во многих местах были сделаны упрощения, объяснения «на пальцах», аналогии.
Все формулы, разумеется, взяты из Гонсалеса и Вудса, идеи скриптов из их же книжки. Все остальные объяснения, демонстрации, эксперименты написаны на основе моего понимания этой темы. Собственно, как и писал ранее — это больше обзор известной теории, нежели новое научное исследование. Но даже в таком виде, думаю, статья будет полезна читателям.

> Кстати, не заметил предупреждения о том, что деконволюция — неустойчивый оператор и пользоваться им надо с осторожностью
Да, вы правы — в следующей части упомяну и про это.
Автор, вы взяли изображение хорошего качества, испортили, восстановили.
Но портили вы его математическими алгоритмами, которые дают много информации для обратных операций. Почему бы вам не взять простую расфокусированную фотку и продемонстрировать восстановление на ней?
В разделе «Заключение» как раз примеры восстановления реальной расфокусированной и смазанной фоток
Прошу прощения, мне она показалась заблуренной вручную.
Взгляните сюда.
img-service.com/overview/image_restoration_deblurring.html

В конце страницы, фото улицы.
img-service.com/overview/pics/chap3/uzhg.html
100% natural фото, могу представить оригинал с EXIF.

И восстановление одним из представленных алгоритмов.
img-service.com/overview/pics/chap3/uzhg_rest.html
UFO just landed and posted this here
В некоторых случаях, как показывают примеры, можно :)
А можно пару примеров, где на исходной фото нельзя прочитать размытый текст, а на восстановленной — можно?
посмотрите на примеры в моем посте выше.
вывески на стене, в правой части кадра
Не, я исходник и сам прочитаю без восстановления, может не 100%, но читаемо.

А вот так, чтобы вообще не читалось? И чтобы с фотика, а не гауссом блюрено?
Круто, я максимум что могу прочитать — это I, had, a :)
Сейчас специально распечатал на бумаге текст и сфоткал фотиком с ручной настройкой фокуса так, чтобы текст не читался. Вот что получилось:



Далее берем скрипт:

% Load image
I = im2double(imread('IMG_6637.JPG'));
I = edgetaper(I, PSF);
figure(1); imshow(I); title('Исходное изображение');

PSF = fspecial('disk', 70);

estimated_nsr = 0.001;
Restored = deconvwnr(I, PSF, estimated_nsr);
imwrite(Restored, 'IMG_6637_Restored.JPG', 'jpg');
figure(3), imshow(Restored), title('Wiener');

И получаем:



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

Abbyy пора срочно внедрять такие фильтры себе в распознавалку.
Вот эту, будьте добры.
А, пожалуйста:

Сильно лучше не стало, т.к. исходное изображение пережато жипегом и буквы там высотой 4-5 пикселей. Лучше давайте нормальные исходники, а такой троллинг :)
Да все понятно, это Lorem Ipsum, спасибо!
Тут можно было бы резкие буквы для начала потереть, а то от них такой звон стоит… Симпатичный :)
Проблемы с методами деконволюции в основном в том, что наиболее качественные не являются полностью детерменистскими (нужно контролировать процесс человеком).
Основная проблема даже не в том что неизвестно ядро искажений. а в том что всегда присутствуют шумы, что уменьшает устойчивость.

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

Т.е. мало того, что картинка итак смазана свёрткой с ядром h, вы ему предлагаете накатить сверху ещё одну свёртку для "предварительно сгладить картинку"? Что-то я сильно сомневаюсь, что такой способ увеличить ОСШ в данном случае уместен.

сделайте конечное приложение для улучшения качества смазанных и расфокусированных фото в Windows — расхватают как горячие пирожки
Их уже достаточно — Focus Magic, Topaz InFocus и пр.
Работают, правда, весьма неудовлетворительно на реальных картинках (но на сайте картинки впечатляют)
Sign up to leave a comment.

Articles