Нужен совет по медианному фильтру в разных программах

Не знаете, где задать вопрос? Задавайте здесь.
Ответить
Sagrer
Новоприбывший
Сообщения: 3
Зарегистрирован: 21 июн 2018, 17:30
Репутация: 0
Откуда: Подольск

Нужен совет по медианному фильтру в разных программах

Сообщение Sagrer » 21 июн 2018, 23:34

Здравствуйте.
Я пока плохо разбираюсь в ГИС, поэтому обращаюсь за советом на форум :).

Меня тут попросили (человек работает в картографии) написать своего рода велосипед - небольшую программку, которой на вход отдаётся *.tif файл (GeoTIFF с картой высот) а на выходе должна быть точно такая же *.tif картинка с сохранением всех метаданных, но обработанная медианным фильтром с достаточно большим окном (сотни пикселей). Файлы на входе будут большие (возможно десятки гигабайт), а всё, что тот человек смог найти - работает с такими объёмами крайне медленно (ибо медианный фильтр на большое окно, всё логично).

Я уже кое-что накарябал, но всё же решил поискать уже готовые варианты чтобы убедиться что мой велосипед будет не сильно велосипедным велосипедом :mrgreen:.
Пока такую функциональность нашёл в PhotoMOD, SAGA-Gis + что-то такое можно сделать связкой Python+GDAL+numpy+scipy, последнее работает быстрее всего.

Собственно, прошу совета какие пакеты программ ещё стоит посмотреть, т.к. называться эта функциональность может совсем непохоже на медианный фильтр (в SAGA-Gis это Rank-filter настроенный на 50%, например) и без знания терминологии можно в документации\меню пакета просто ничего не найти. В тех же QGis и GRASS найти ничего не удалось, хотя тут на форуме где-то писали что в GRASS медианный фильтр всё же есть.

gamm
Гуру
Сообщения: 4056
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1054
Ваше звание: программист
Откуда: Казань

Re: Нужен совет по медианному фильтру в разных программах

Сообщение gamm » 22 июн 2018, 06:26

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

Sagrer
Новоприбывший
Сообщения: 3
Зарегистрирован: 21 июн 2018, 17:30
Репутация: 0
Откуда: Подольск

Re: Нужен совет по медианному фильтру в разных программах

Сообщение Sagrer » 22 июн 2018, 10:54

Да, у меня уже есть реализация алгоритма Хуанга, в т.ч. для значений с плавающей запятой (квантовать же можно), работает так что я даже засомневался надо ли делать многопоточность - там и на одном потоке узким местом становится уже hdd. Хотя, если поставить ещё больше размер окна... :).

Мне помощь нужна скорее не с тем как реализовать сам медианный фильтр, а с тем чтобы найти уже реализованные аналоги. Хотя-бы сравнить с ними мой вариант. Всё что до сих пор удалось найти - судя по скрости работает тупо в лоб, без всяких гистограмм. За исключением вероятно scipy (в исходники лезть не хочется, но он явно быстр).

Александр Мурый
Гуру
Сообщения: 5173
Зарегистрирован: 26 сен 2009, 16:26
Репутация: 793
Ваше звание: званий не имею
Откуда: Москва

Re: Нужен совет по медианному фильтру в разных программах

Сообщение Александр Мурый » 22 июн 2018, 11:56

Sagrer писал(а):
21 июн 2018, 23:34
В тех же QGis и GRASS найти ничего не удалось, хотя тут на форуме где-то писали что в GRASS медианный фильтр всё же есть.
r.neighbors + "method=median" - оно?
Если нет, то можно попробовать применить более тяжёлую растровую артиллерию типа r.mapcalc или r.mfilter
Вот тут упоминается про медианный фильтр в GRASS с использованием двух выше упомянутых модулей.
Редактор материалов, модератор форума

Аватара пользователя
Crackfox
Активный участник
Сообщения: 131
Зарегистрирован: 02 мар 2016, 20:29
Репутация: 17
Ваше звание: разрядник
Откуда: Москва
Контактная информация:

Re: Нужен совет по медианному фильтру в разных программах

Сообщение Crackfox » 22 июн 2018, 12:46

Попробуйте R, EBImage package
For example, a median filter:

# Load EBImage up
require(EBImage)
# Read in your image
im = readImage('/path/to/your/image')
# Apply a median filter with window size of 7
im.med = medianFilter(im, size=7)
# Display image
display(im.med)

Аватара пользователя
rhot
Гуру
Сообщения: 1727
Зарегистрирован: 25 янв 2011, 17:50
Репутация: 194
Ваше звание: доктор
Откуда: Архангельск

Re: Нужен совет по медианному фильтру в разных программах

Сообщение rhot » 22 июн 2018, 13:27

Crackfox писал(а):
22 июн 2018, 12:46
Попробуйте R
R не потянет десятки гигабайт. Я, например, почти всю обработку растров пускаю через GRASS.
___________(¯`·.¸(¯`·.¸ Scientia potentia est _/ {SILVA}:::{FOSS}:::{GIS} \_ Знание сила ¸.·´¯)¸.·´¯)___________

gamm
Гуру
Сообщения: 4056
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1054
Ваше звание: программист
Откуда: Казань

Re: Нужен совет по медианному фильтру в разных программах

Сообщение gamm » 22 июн 2018, 16:38

EBImage и правда не потянет, у него картинка должна быть в памяти. Работает через гистограмму, на маленькой картинке для сравнения можно использовать.

Sagrer
Новоприбывший
Сообщения: 3
Зарегистрирован: 21 июн 2018, 17:30
Репутация: 0
Откуда: Подольск

Re: Нужен совет по медианному фильтру в разных программах

Сообщение Sagrer » 24 июн 2018, 20:24

Спасибо за наводки!

GRASS классная штука, но GUI делали для врагов :(.

Пока из найденного лидер по скорости scipy, но там та же проблема что и в EBImage - многогиговую картинку целиком в память грузить так себе идея. И велосипед с гистограммой, написанный на c++ получился всё равно быстрее. Наверное всё же он имеет смысл %).

Ответить

Вернуться в «Я новичок!»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 18 гостей