Как стать автором
Обновить

Комментарии 45

Ну, трудно сказать. Идея интересная, я такую раньше не слышал. А чему у Вас N равно? Сдается мне, что оно большое какое-то. Я бы ставил N или 3 или 5, не больше.

Давайте разделим задачу на две части:
а) убрать соль с минимальными последствиями для картинки. Есть спец. алгоритмы для этого, но пусть будет просто median3x3 — но не больше! Иначе уже начнет изменять сама картинка, даже если там нет частички соли.

б) сделать sharpening (при том, что соли уже нет). Существуют нелинейные методы sharpening, на самом деле они, конечно, лучше линейных. Наверное стоит сравить предложенный фильтр со стандартными sharpening на обычной картинке (без соли), и тогда уже решать.

Потому что устранение соли здесь, имхо, не принципиальный вопрос. Он, как бы, идет довеском. Но задача устранения «соли» очень частная и простая, на ней нет смысла фокусироваться. Интересно обсудить, я думаю, именно такой способ делать sharpening.
Ну, все очень и очень зависит от качества изображения и от шумов. Видел я оверсемплированные системы, в которых N=30..50 очень даже оправданно.
Данные картинки сделаны при N=3, при k=5 мы и получаем медианный фильтр. Тип шума тут особо роли не играет, можно любой поставить эффект будет такой же. При малых k убирается смаз, при больших убирается шум. Согласен. нужно бы посравнивать.
Интересно…
А если сравнить этот метод с bilateral filter? Тоже, вроде бы, «смаз» немного убираться должен (где-то в той же пропорции, что и в описанном методе).

Насчет применения его на картинке с «солью» я не уверен, все-таки уж больно специфический вариант шума. Хотя тоже сработает как-то, конечно.
А вот на просто зашумленной картинке можно попробовать сравнить.
Я видел такой способ, что из рабочего окна сначала выкидывают самое большое и самое маленькое значение, а потом уже начинают работать с остатком (делать какой-нибудь denoising).

Это тоже, идеологически, вариант предложенной техники.
Да, верно, так и есть. Расскажите поподробнее где такую идеологию еще видели? Насчет сравнения с bilateral filter, думаю сделаю, отпишусь в дополнении к статье.
У меня такая проблема, что большинство хороших алгоритмов, которые я видел — это конфиденциальная информация((
Понимаю, звучит как «халявная отмазка», но к сожалению это правда.
Мда это действительно проблема, не только у вас :)
Вижу характерные артефакты восстановления. Я их видел в некоторых «восстановленных» (любителями) VHS-лентах и хочу сказать, что оно отвратительно. Возможно, для задач распознавания изображения это и неплохо, но для восстановления изображения для человеческого глаза шумы лучше, чем общая потеря гладкости контура. Этот фильтр сжирает очень много тонких градиентов, которые несут в себе для глаза много информации. С точки зрения компьютера уровень градиентов сравним с уровнем шума, однако, глаз человека таки шум отфильтровывает (в основном по хронологическим данным — предыдущим и последующим кадрам), так что после применения фильтра исчезает больше подробностей, чем шума.
На прктике этот алгоритм был примене при идентификации искажающих систем, вот ссылка. Хотя я не замечаю потерю тонких градиентов.
Статья, кстати, очень интересная. И идет намного дальше. Собственно говоря, ее заявленная цель — определения смазывающего фильтра (а вовсе не восстановление изображения!)
И уже после того, как смазывающий фильтр определен, оказывается возможным его инвертировать и восстановить, в какой-то степени, исходный сигнал.

Таким образом это попытка сделать алгоритм blind deconvolution в начале 90х, что имхо очень достойно.
Да, приятно, что вы прочитали эту статью. В этом журнале вообще много всего интересно можно найти, особенно за 90-е года.
У нас здесь, кажется, не понимание по существу. Насколько я понял, предложенный в статье фильтр НЕ используется для очистки картинки от шума! Он используется для определения PSF, с которым был размазана исходная картинка. С тем, чтобы потом сделать обратное преобразование с inv(PSF) и убрать смазывание.

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

Или я не правильно понял?
С пониманием все норм. :) Я не предлагаю использовать этот фильтр для очистки изображения. Я говорю что он обобщает медианный фильтр и потенциально может для этого служить. Даже в статье написано «Разумеется, точно восстановить входной сигнал с помощью экстремального фильтра в реальных ситуациях невозможно». Для определения PSF нужно входное изображение, которое неизвестно. И вместо входного будем подсовывать обработанное этим фильтров, в надежде что дальнейшие регуляризирущие методы позволят вытащить параметры смаза.
Поддержу автора. Вы видимо сравниваете самую первую картинку с последней. Сравнивать же надо вторую, смазанную и зашумленную, с последней. Потери тонких градиентов лично я не вижу. Шум ушел — это плюс. Но, к сожалению, компенсации смаза тоже не видно…
Компенсация смаза — есть, ее сложно заметить, однако, если взять две картинки и «поморгать» туда-сюда ими, то будет видно, что на восстановленной картинке границы плавные градиенты на границах монетки отступили.
Вообще-то, такие фильтры по устранению шума необходимы для роботов в системах computer vision.
И то, что хорошо для человека, отвратительно для робота.
На исходном изображении градиент фона просматривается, хоть и не идеальный. А вот на результирующем уже смазанные пастели какие-то.

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

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

Есть куда более неприятные дефекты, которые действительно надо исправлять — это дрожание кадра, мерцание, плохая контрастность.

А мусор, особенно аналоговый (то есть белый шум) совсем не мешает. Точнее, среди всех дефектов, он наименее нарушающий восприятие.
медианный фильтр плох тем, что мылит, после него надо проходить каким-нибудь син-косом.
Медианный фильтр наиболее эффективен, если шум на изображении имеет импульсный характер и представляет собой ограниченный набор пиковых значений на фоне нулей. В результате применения медианного фильтра наклонные участки и резкие перепады значений яркости на изображениях не изменяются. Это очень полезное свойство именно для изображений, на которых контуры несут основную информацию. Так что, во многих случаях, правильно подобранная апертура фильтра и его маска, не потребует последующего дополнительного прохода каким-либо фильтром.
проблема в том что «правильно подобраная» может быть сделана только на глаз человеком отдельно для каждого конкретного изображения. Поэтому обычно довольно широкая маска и потом улучшайзинг.
Не совсем так! На практике работают с изображениями полученными с одного устройства — например камера ну или спутник, и параметры искажений которые они вносят на изображение предварительно вычисляются и оцениваются.
Ширина смаза — количество отсчетов в КИХ характеристики можно оценить достаточно просто — использовать метод Слепиана, вроде так называется, там с кепстром мудрости премудрости различные.
Нужно пользоваться принципом — вся информация об устройстве должна быть учтена в реализации алгоритмов компенсации искажений. Тогда затраты на «улучшайзинг» не понадобятся.
увы, это в вышей узкоспециализированной области. В моей практике всё как раз наоборот. Картинки бывают от идеальных, до ужасных, а обработать надо одинаково хорошо.
В 2007 году на турнире по программированию давал такую задачку:
zcontest.ru/2007.02/zdip.php

Лучшие решения на картинках можно посмотреть здесь:
zcontest.ru/2007.02/zdip_bestsol.php

Так отработало решение победителя на тестовых данных (реальные данные закрыты):
zcontest.ru/2007.02/zdip_bestsol_01.php

Потом в английской версии задачи народ нашел ещё более качественные решения:
www.spoj.pl/ranks/DIP/

Можете сравнить свой подход с решениями других людей, отправив свое решение здесь:
www.spoj.pl/problems/DIP/
Спасибо, посмотрел. Смутило одно — критерий качества — как я понял классическое СКО? Беда лишь в том, что критерий качества по СКО имеет мало общего с критерием визуального восприятия.
Да. А есть какие-то автоматические и более приближенные к реальности способы сравнить картинки?
Есть, очень много критериев качества было придумано. Поскольку ваши задачки на фильтрацию шума были, то можно взять критерий «линейное разрешение», но для этого нужно картинки генерировать специальные для обработки — если интересно могу подробнее.
Если есть ссылка, то было бы интересно почитать.
Порыскал сейчас, ссылки нет, и это очень странно. Про линейное разрешение на на лекциях еще рассказывали и как его высчитать по картинке — так как на книжку ссылаться бесполезно, все равно ее нет в свободном доступе, то поищу методичку какую-нибудь, на след неделе дам вам ссылку.
Интересно, а плагин для AviSynth есть?
Уверен, что этот фильтр не реализован в виде плагина. Да и вообще, возможно это первое упоминание о нем после статьи 1990 года.
Попробовал почистить вашу «соль» стандартным медианным фильтром GIMPа (режим «адаптивный+рекурсивный», радиус 1, уровень чёрного 0, уровень белого 255). Сравнил. Гимповский лучше — он тоже полностью вычистил весь шум, но тронул всё остальное (градиенты etc) гораздо, гораздо слабее.

Также пробовал режим «радиус 3», без адаптивности и рекурсивности, границы те же. Всё равно лучше приведённого в статье.
А можете показать результат?
GIMP, фильтр «удаление пятен» с параметрами адаптивный, рекурсивный, радиус 1, чёрный 0, белый 255

(тоже разновидность медианного фильтра. Если убрать адаптивный и рекурсивный, сделать чёрный -1 и белый 256, то совпадает с фотошоповской «медианой»)

Разница для GIMP:


Разница вашего k5 из статьи:

На третьей картинки я вижу, что контура монеток так же поправились — если вы поле ошибок контрастируете то это будет еще заметнее. — Обратите внимание на фантомные окружности еле заметные на черном фоне — это и есть результат того, что контура поправились.
Я тоже сразу вспомнил про despeckle filter.
Только у меня при адаптивном, рекурсивном, 1, 0, 255 оставляет соль. С 1, 0, 254 — нормально.
Дело в том что этот фильтр при k=5 и есть медианный фильтр, так что видимо в GIMP иная реализация медианного фильтра. Покажите картинки?
НЛО прилетело и опубликовало эту надпись здесь
такой шум проще и быстрее заливкой устранять
«Проще и быстрее» и заливкой — это как?
шум очень легко детектируется, т.к. он контрастнее остальной картинки. заливаются детекируемые области цветом границ. медиана это конечно хорошо, но если если артефакты будут больше размером, радиус маски будет расти, соответсвенно и время обработки. а в случае с заливкой, время обработки будем зависит от размера изображения.
Очень странный алгоритм, первый раз слышу и плохо понимаю. Если есть желание — расскажите о нем поподробнее, с примерами.
двигаясь по очереди по каждому пикселю, проверяем подходит ли он под шум, если да, то проверяем окрестность на шум(и помечаем как области в которых мы уже были, чтоб не проверять ещё раз), при этом заливая участок цветом который был перед участком(так же можно модифицировать заливку, чтоб она двигалась по границе, тем самым брать пограничные цвета), тогда большой участок «шума» будет не так сильно выделяться.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории