Pull to refresh

Comments 86

Отличная статья, отличная программа, не задумывались над продажей буржуйским друзьям?
SmartDeblur изначально задумывался как Open-Source проект.
А так у буржуев уже сейчас есть платный Topaz InFocus.
Кстати, в нем, по непонятной причине, максимальный радиус обработки ограничен 6-ю пикселами, что делает невозможным восстановления средних и сильных искажений.
И самое забавное, что за самый главный комментарий вас не «отплюсовали».
Спасибо о задумках публикации вашего труда как Open-Source проект, это очень важно.
UFO landed and left these words here
Да, можно — причем с большой вероятностью успеха. Правда нужны будут дополнительные приседания в виде вырезания нужного фрагмента и предобработки краев, не без этого :)
А также можно восстанавливать «скрытые» поля на скриншотах (такое частенько попадается в публикациях хабра), которые были смазаны или размыты
> А также можно восстанавливать «скрытые» поля на скриншотах (такое частенько попадается в публикациях хабра), которые были смазаны или размыты

Бля…
Не все так просто на самом деле. Результат очень зависит от того, в каком формате сохранен скриншот (png, jpeg), какой програмой делался смаз. В некоторых случаях восстановить легко используя просто SmartDeblur, в других случаях требуется ручной подбор ядра искажения.
Ну я, например, перед выкладыванием «смазываю» до почти однотонности, там не разберёшь :) опять же, некоторые закрывают такие данные банальными черными прямоугольниками. Так что не всё так ужасно…
Покажите пример смазывания «до почти однотонности», посмотрим :)
/me будет использовать только замазывание черным :(
Старый-добрый pixelate, он же — «квадраты» тоже не теряет актуальности, как и разного рода smear-кисти.
Упс! Поспешил с выводами. Не заметил что это продолжение серии статей автора.
Тоже напомнило, причем в стиле анекдота про американскую космическую ручку за миллион долларов и русский карандаш ;)
Кстати, судя по алгоритму (да и ссылка в статье на них есть), над Adobe'овским плагином работают те же люди, что и над «Robust Motion Deblurring».

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


Лучше всего их каким-то образом комбинировать, для чего потребуются субъективные или эмпирические коэффициенты.
Это уже есть и называется Blind Deconvolution (слепая деконволюция)
Там точный вид ядра искажения неизвестен, и используется итеративный алгоритм в стиле:
1. Взяли первоначальное приближение обработали, померили качество.
2. Далее немного поменяли параметры ядра искажения
3. Повторяем пункт 1-2 пока не достигнем необходимого уровня качества
Понятие «качество» вычисляется на основе статистических характеристик (т.е. делается предположение, что исходное изображение описывается некоторыми статистическими параметрами, распределениями, ...) и это значение максимизируется
>>восстановить номера машин на кадрах с камер видеонаблюдения, когда весь номер занимает площадь несколько пикселей.
>>Я этим не занимаюсь! SmartDeblur этого тоже делать не умеет.

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

Было


Стало


Обработано в регистаксе 600 кадров из 4000. Кроп, масштаб 50%. Точка сверху — Ганимед.

Фото не моё, просто советую тем, кому может быть нужно.

Да, Registax и его аналоги как раз являются реализацией алгоритма Super Resolution в чистом виде.
Основная проблема в том, что к задачам восстановления номером он напрямую тоже не подходит, т.к в астрономии мы имеем много снимков неподвижного объекта, а с камер наблюдения мы получаем несколько кадров одной и той же машины, но под разными ракурсами (разные геометрические искажения), а зачастую еще и с разных камер (с разными характеристиками).
Можно попробовать привести все номера к одному размеру и одной форме и скормить Registax'у — может что и получится.
Ну, мало-ли, может быть преступники приехали на машине и, допустим, минуту машина стояла, пока к банкомату петли приваривали. Тогда можно попробовать.
Так тоже не получится. Нужны небольшие смещения на каждом кадре, а не просто несколько статичных кадров со стационарной камеры.
жаль.
А Юпитер «штормит» будь-здоров-как в атмосфере. Видимо, это и является ключевым моментом.

Ещё более жаль, что я в этой математике вообще ничего не понимаю, просто полный ноль.
Да, основное — это чтобы были небольшие смещения объекта. При съемке с рук, или как в астрономии когда из-за турбулентности изображение прыгает.
Логичным образом напрашивается прошивка моторизованных камер, чтобы камера всегда немного шевелилась, буквально на один градус круги описывала. Тогда можно будет применять такие алгоритмы до тех пор, пока техника не позволит без подобных ухищрений разглядывать сетчатку глаза человека в ста метрах от камеры.
И даже с таким подходом мало что улучшится. Это будет работать только днем для неподвижных обьектов. Если обьекты движутся, ничего не получится. А вечером и ночью такие флуктуации будут вызывать смаз. В итоге будет обратный результат.
Что же делать!? :)
Грелку ставить перед камерой, чтобы воздух шевелился?
Что делать? Ставить нормальную камеру высокого разрешения ))
Спасибо.
Только вот в GUI не нужно жёстко задавать цвета. Ибо может получиться такое: (Так программа выглядит у меня)
Но в любом случае я не делал резиновый layout и не использовал системные цвета — т.к. имитировался риббон.
Поэтому при изменении размера шрифта или цветовой гаммы что-то может поплыть
Выпилив из *.ui файлов все <property name="styleSheet"> получилось такое:

Терпимо, но как-то совсем неопрятно без стилей смотрится
В России алгоритмы не патентуются, можно лишь получить «Свидетельство о регистрации программы для ЭВМ» — от него пользы мало
Да и что там патентовать — старый добрый Винеровский фильтр и другие классические алгоритмы? )
«Свидетельство о государственной регистрации программы для ЭВМ» имеет смысл делать студентам и аспирантам, при защите дипломных и диссертаций хорошо помогает.
Автор же делает Open-Source, это хобби и изначально некоммерческое. Зачем сразу патентовать, даже если есть что?

Зато вам теперь, если понадобится что-то подобное реализовать, достаточно взять код
Фигасе мне минусов понаставили.
Любой труд должен оплачиваться.
Open source двигают в основном не бедные люди. Подобно тому, как в 19 веке физикой занимались исключительно богатые меценаты.

Я уверен, что у автора есть стабильный доход и он это делает для души. Когда ЗП или доход удовлетворяют, основная мотивация переходит в то, чем ты занимаешься, а не сколько тебе за это платят.
В россии встречал только людей работающих на энтузиазме.
И буржуев которые выдают разработки за своё и в дальнейшем получавшим за это огромные деньги.
Это все на ту же тему, что и автомобильные номера с камер видеонаблюдения.
Здесь имеем изображение низкого разрешения с кучей jpeg-артефактов.
Попробуйте, как советовалось выше, использовать registax.
Мне недавно потребовалось тоже восстановить размытое изображение — пользовался функцией ImageDeconvolve из Mathematica.
Среди примеров не хватает обычного смаза надписи. Условно говоря, задираем диафрагму, делаем выдержку в 1с и снимаем с рук любую вывеску.

ЗЫ А ещё есть такая мерзость, как долгая шевелёнка. Это когда не просто смаз в одном направлении, а трясущиеся по нескольким направлениям за время съёмки руки.
Со смазом ситуация такая — чем ближе траектория смаза к прямой линии, тем лучше будут результаты.
Это все касается стандартного функционала SmartDeblur, если же использовать кастомную PSF, то можно восстанавливать любой смаз — главное чтобы он был однородным по всему изображению, т.е. именно смаз от дрожания камеры, а не от того, кто то быстро движется.
Refocus уже давно не поддерживается. Да и весьма неудобен в работе.
Поразительно.
Никогда бы не подумал, что из подобного исходного материала можно восстановить в таком качестве.
Вы всё ещё смеётесь над старыми фильмами, в которых картинку с уличной камеры увеличивали в 50 раз и видели каплю крови на лацкане пиджака убийцы?
Вот бы еще кто-нибудь написал на основе этого плагин к GIMP…
На то он и Open Source, что может и найдётся спец…
Вообщем-то да, исходники открыты, код весьма простой и компактный, язык C++. Так что желающие могут весьма быстро портировать под плагины. Я сам заниматься этим не планировал — пока есть куда тратить время :)
Изначально задумка была по-быстрому набросать прототип работающей деконволюции и выложить все это в опен соурс, раз уж хорошо разобрался с темой обработки изображений. Получилось немного больше чем хотел.
Классно, будем знать, что теперь некоторые кадры вовсе не так безнадежны, как кажется, и их можно «вытянуть».

P.S. Просматривая комменты, ожидал увидеть здесь пару-тройку портянок с комиксами-пародиями на CSI. Странно, не нашел. Поголовье боянистов сокращается? ))
Автору огромное спасибо, и отдельно — за Open source!

Это ведь так когда-нибудь появятся программы, и видео восстанавливающие после тряски.
Всегда догадывался, что математика — царица наук. :)
И вдвойне приятно, что проект делается в России.
gpl это хорошо, но почему бы не сделать еще коммерческую лицензию?
Цель была в том, чтобы исходники были доступны всем для изучения, но при этом не создавались бы закрытые коммерческие продукты на базе смартдеблюра. Под GPL все производные продукты также должны быть опенсоурсными.
никто не мешает продолжать делать open source для некоммерческого использования, обучения, и прочее. Просто оговорить что для коммерческого использования лицензия lgpl и стоит столько-то. Для многих проектов есть возможность gpl бесппатно, либо другие лицензии платно. Если честно, я не понимаю зачем себя ограничивать :)
Ну тут никто не мешает обратиться по почте и договориться о лицензии.
Я думал вы имели ввиду почему сразу не LGPL.
Автор! У Вас талант! Спасибо за софт. Есть реализация деконволюции в виде плагинов для ImageJ, но SmartDeblur получился значительно удобнее.
все те, кто занимается оптическим распознаванием и сталкивается с необходимостью извлекать текст с переблюренных изображений, могут стать намного счастливее благодаря вам. =)
спасибо!
Наздоровье )
Буду очень признателен за удачные (да и неудачные) примеры таких заблюренных изображений и результатов обработки
Only those users with full accounts are able to leave comments. Log in, please.