Перейти к содержимому
Compvision.ru
Smorodov

Фильтр Non-local means (Локализованное усреднение)

Recommended Posts

Non-local means (Локализованное усреднение) — использует локализуемое сходство для усреднения изображения. То есть, если окрестности двух точек похожи то и точки похожи. Вот он и ищет для каждой точки похожие на нее точки по всему изображению, и затем усредняет результат. Это вкратце. Алгоритм работает ОЧЕНЬ долго (у меня считал около часа изображение 512х512).

На картинках результат одной итерации (по поводу второй картинки не уверен (может быть там три итерации), давно делал), дольше ждать неохота.

post-1-0-47236300-1325862760_thumb.png

post-1-0-60525200-1325863021_thumb.png

NLMeans.cpp

Можно почитать еще здесь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

что то около часа это долго.

есть еще bilateral filter.

и вроде его можно как и медианный считать как то побыстрому(относительно чем в лоб) и на gpu есть.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Будет и на GPU, это просто короткая простая программа для препарирования.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

оказывается что bilateral filter есть даже в opencv

и вот Non-local means на opencv еще. (работоспособность не проверял)

http://opencv.jp/opencv2-x-samples/non-local-means-filter

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Обещанный GPU - шный вариант, время одной итерации около 2 сек (на NVIDIA GT 430).

И еще, если сделать задать радиус блока больше 4, то вылетает с ошибкой (у меня установлено 4, у NVidia в примере 3).

Решено при помощи изменения интервала времени, в течение роторого видеокарта может не отвечать на запросы:

Tdr.rar, костыль конечно, но как по другому пока не выяснил.

post-1-0-34728000-1326291387_thumb.png

Работает с трехканальными изображениями тоже.

post-1-0-63786800-1326391460_thumb.png

БОльшую часть стащил из примера CUDA imageDenoising. Солюшн для 2010 студии в аттаче.

CudaExp1.rar

Модификация алгоритма: http://www.math-info.univ-paris5.fr/~moisan/tvmeans/

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

еще есть Adaptive Median Filter, Symmetric Nearest Neighbors (SNN) and Kuwahara-Nagao-Filter ну это так немного в другую степь.

тут еще какая то экзотика http://graphics.stanford.edu/papers/gkdtrees/

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Быстрый (10-15 секунд) CPU-шный вариант NL-Means с использованием FLANN.

post-1-0-09274900-1364061363_thumb.png

ImagePatchesFlann.cpp

более "правильный" вариант (в смысле функции ядра):

ImagePatchesFlann.cpp

post-1-0-46465000-1364072263_thumb.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Если взять среднее из 5 и 7 то должна получиться хорошая картинка.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

У фильтра есть параметры (размер патча, количество патчей и параметр ядра Гаусса), вот, например, другой набор параметров (взял меньше патчей для усреднения):

post-1-0-75730300-1364066000_thumb.png

А здесь более широкое ядро:

post-1-0-67306800-1364066478_thumb.png

В opencv кстати, есть встроенный (но он мне не нравится :) ):

http://docs.opencv.org/modules/photo/doc/denoising.html

Еще реализация:

http://opencv.jp/opencv2-x-samples/non-local-means-filter

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×