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

Очистка изображения от шума, некоторые методы

Время на прочтение 3 мин
Количество просмотров 42K
Если Вы видели картинку, которая получается в современных цифровых фотоаппаратах без обработки, то Вы знаете, что выглядит она просто ужасно. Она заполнена шумом. Даже когда Вы скачиваете картинку на компьютер и она уже прошла внутреннюю обработку в фотоаппарате, если ее увеличить и посмотреть на отдельные пиксели, можно увидеть, как мужественно цифровые алгоритмы борются с шумом и проигрывают в этой неравной войне.
Некоторые алгоритмы стирают мелкие детали напрочь, этим знамениты сотовые телефоны Nokia. В некоторых случаях детали остались, но они окружены цветными островками сложной формы, это можно увидеть в фотоаппаратах Sony. Ну и так далее — у каждого метода свои проблемы.

Какие же есть средства, чтобы убрать этот шум, и которые не нарушают чужих патентов? Надеюсь, этот небольшой обзор будет полезным.

1. Переход в координаты яркость-цвет.
Это преобразование можно осуществлять многими способами: HSV, L*a*b и т.п. По некоторым причинам, в которые мы не будем углубляться:
— человеческий глаз намного менее чувствителен к деталям цветовой информации, чем яркостной
— шум в цветовой компоненте, напротив, гораздо выше, чем в яркостной
Поэтому простая фильтрация цветовой компоненты + обратное восстановление, обычно, делают картинку сильно лучше.

2. Медианный фильтр.
Хорошим простым способом очистить картинку от шума является медианный фильтр Im_new(x,y)=median{dx=-1..1,dy=-1..1}Im(x+dx,y+dy).
У этого метода есть множество вариаций, приведу лишь некоторые:
2.1 Шаг 1: вычислить M1=median(C, Cnorth, Csouth); M2=median(C, Ceast, Cwest); M3=median(C, Cne, Csw); M4=median(C, Cnw, Csw); здесь Cnort, Cne,...Cnw — восемь соседних пикселей из окрестности 3x3, C — центральный пиксель
Шаг 2 — вычислить Ma=median(C, M1, M2); Mb=median(C, M3, M4);
Шаг 3 — вычислить Csmooth=median(C, Ma, Mb);
Шаг 4 — заменить C на Csmooth.
2.2 Шаг 1: отсортировать пиксели из окрестности 3x3 по возрастанию, P[1]...P[9].
Шаг 2: Если центральный пиксель равен P[1] — заменить его на P[2], если центральный пиксель равен P[9] — заменить его на P[8], в других случаях оставить без изменения.
Это направление использует компания Kodak, а также большинство сканеров и факс-аппаратов.

3. Фильтры, управляющие величиной коррекции
Этот метод сначала предлагает сгладить картинку как-нибудь грубо, например с помощью low-pass filter, bilateral filter или еще как-нибудь. А потом делается такая процедура
Im_new(x,y)=Im(x,y)+S(Im(x,y)-Im_smooth(x,y),threshold).
Функция-передатчик S может быть устроена по разному, например так:
S(x,threshold) = x, если -threshold<x<threshold; S(x,threshold)=threshold если x>threshold; S(x,threshold)=-threshold если x<-threshold. Если выбрать threshold примерно равным величине шума, то весь шум пропадет, а детали и мелкие объекты останутся четкими.

4. Bilateral filter
Очень интересный фильтр, изобретенный в 2003 году. За описаниями отсылаю к Интернету.
Вот здесь достаточно хорошая статья: scien.stanford.edu/class/psych221/projects/06/imagescaling/bilati.html
Интересной разновидностью bilateral filter является, также T-filter:
Шаг 1: Найти все пиксели в окрестности, значения которого отличаются от исходного пикселя не более, чем на заданный threshold.
Шаг 2: Усреднить эти найденные пиксели и сохранить значение.

5. Фильтры, использующие спектральное представление сигнала
Так работает, к примеру, Photoshop. Суть идеи в том, чтобы сделать в окрестности каждого пикселя преобразование Фурье, затем стереть высокие частоты и сделать обратное преобразование.
Вместо преобразования Фурье используются также и другие ортогональные базисы, иногда довольно замысловатые. По-сути, это целое семейство методов.

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

7. Локальная классификация фрагментов
Эти фильтры особенно хорошо работают со специальными изображениями, такими как текст, звездное небо и т.п.
Сначала составляется база данных типичных элементов такого изображения, к примеру, несколько сотен фрагментов NxN пикселей, которые уже очищены от шума.
Алгоритм работает так: окрестность каждого пикселя сравнивается с этими фрагментами и выбирается один, который наиболее похож. Затем значение исходного пикселя на грязной картинке заменяется на значение аналогичного пикселя, расположенного в этом же месте на чистом фрагменте.

8. Приведу в конце «простецкий» способ, который также можно использовать в ряде случаев.
Шаг 1: Уменьшить картинку (применяя какой-нибудь умный алгоритм Downscaling)
Шаг 2: Увеличить ее обратно (применяя какой-нибудь умный алгоритм Upscaling)
Дело в том, что алгоритмы Upscaling/ Downscaling бывают очень мощными (Lanczos filter, фрактальные методы и т.п.), так что результат получается вполне удовлетворительным. Этот же метод можно использовать в качестве простой, но довольно эффективной компрессии.
Теги:
Хабы:
+14
Комментарии 50
Комментарии Комментарии 50

Публикации

Информация

Сайт
www.gil-algorithms.com
Дата регистрации
Дата основания
2007
Численность
Неизвестно
Местоположение
Россия

Истории