Нужен совет по медианному фильтру в разных программах
-
- Новоприбывший
- Сообщения: 3
- Зарегистрирован: 21 июн 2018, 17:30
- Репутация: 0
- Откуда: Подольск
Нужен совет по медианному фильтру в разных программах
Здравствуйте.
Я пока плохо разбираюсь в ГИС, поэтому обращаюсь за советом на форум .
Меня тут попросили (человек работает в картографии) написать своего рода велосипед - небольшую программку, которой на вход отдаётся *.tif файл (GeoTIFF с картой высот) а на выходе должна быть точно такая же *.tif картинка с сохранением всех метаданных, но обработанная медианным фильтром с достаточно большим окном (сотни пикселей). Файлы на входе будут большие (возможно десятки гигабайт), а всё, что тот человек смог найти - работает с такими объёмами крайне медленно (ибо медианный фильтр на большое окно, всё логично).
Я уже кое-что накарябал, но всё же решил поискать уже готовые варианты чтобы убедиться что мой велосипед будет не сильно велосипедным велосипедом .
Пока такую функциональность нашёл в PhotoMOD, SAGA-Gis + что-то такое можно сделать связкой Python+GDAL+numpy+scipy, последнее работает быстрее всего.
Собственно, прошу совета какие пакеты программ ещё стоит посмотреть, т.к. называться эта функциональность может совсем непохоже на медианный фильтр (в SAGA-Gis это Rank-filter настроенный на 50%, например) и без знания терминологии можно в документации\меню пакета просто ничего не найти. В тех же QGis и GRASS найти ничего не удалось, хотя тут на форуме где-то писали что в GRASS медианный фильтр всё же есть.
Я пока плохо разбираюсь в ГИС, поэтому обращаюсь за советом на форум .
Меня тут попросили (человек работает в картографии) написать своего рода велосипед - небольшую программку, которой на вход отдаётся *.tif файл (GeoTIFF с картой высот) а на выходе должна быть точно такая же *.tif картинка с сохранением всех метаданных, но обработанная медианным фильтром с достаточно большим окном (сотни пикселей). Файлы на входе будут большие (возможно десятки гигабайт), а всё, что тот человек смог найти - работает с такими объёмами крайне медленно (ибо медианный фильтр на большое окно, всё логично).
Я уже кое-что накарябал, но всё же решил поискать уже готовые варианты чтобы убедиться что мой велосипед будет не сильно велосипедным велосипедом .
Пока такую функциональность нашёл в PhotoMOD, SAGA-Gis + что-то такое можно сделать связкой Python+GDAL+numpy+scipy, последнее работает быстрее всего.
Собственно, прошу совета какие пакеты программ ещё стоит посмотреть, т.к. называться эта функциональность может совсем непохоже на медианный фильтр (в SAGA-Gis это Rank-filter настроенный на 50%, например) и без знания терминологии можно в документации\меню пакета просто ничего не найти. В тех же QGis и GRASS найти ничего не удалось, хотя тут на форуме где-то писали что в GRASS медианный фильтр всё же есть.
-
- Гуру
- Сообщения: 4056
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1054
- Ваше звание: программист
- Откуда: Казань
Re: Нужен совет по медианному фильтру в разных программах
Если значения целые, и их немного, то медиана (как и любые квантили) быстро считается через гистограмму, которая обновляется при движении окна. Делите раст на тайлы с перекрытием, и запускаете в разные потоки, потом сливаете. Быстрее не получится.
-
- Новоприбывший
- Сообщения: 3
- Зарегистрирован: 21 июн 2018, 17:30
- Репутация: 0
- Откуда: Подольск
Re: Нужен совет по медианному фильтру в разных программах
Да, у меня уже есть реализация алгоритма Хуанга, в т.ч. для значений с плавающей запятой (квантовать же можно), работает так что я даже засомневался надо ли делать многопоточность - там и на одном потоке узким местом становится уже hdd. Хотя, если поставить ещё больше размер окна... .
Мне помощь нужна скорее не с тем как реализовать сам медианный фильтр, а с тем чтобы найти уже реализованные аналоги. Хотя-бы сравнить с ними мой вариант. Всё что до сих пор удалось найти - судя по скрости работает тупо в лоб, без всяких гистограмм. За исключением вероятно scipy (в исходники лезть не хочется, но он явно быстр).
Мне помощь нужна скорее не с тем как реализовать сам медианный фильтр, а с тем чтобы найти уже реализованные аналоги. Хотя-бы сравнить с ними мой вариант. Всё что до сих пор удалось найти - судя по скрости работает тупо в лоб, без всяких гистограмм. За исключением вероятно scipy (в исходники лезть не хочется, но он явно быстр).
-
- Гуру
- Сообщения: 5173
- Зарегистрирован: 26 сен 2009, 16:26
- Репутация: 793
- Ваше звание: званий не имею
- Откуда: Москва
Re: Нужен совет по медианному фильтру в разных программах
r.neighbors + "method=median" - оно?
Если нет, то можно попробовать применить более тяжёлую растровую артиллерию типа r.mapcalc или r.mfilter
Вот тут упоминается про медианный фильтр в GRASS с использованием двух выше упомянутых модулей.
Редактор материалов, модератор форума
- Crackfox
- Активный участник
- Сообщения: 131
- Зарегистрирован: 02 мар 2016, 20:29
- Репутация: 17
- Ваше звание: разрядник
- Откуда: Москва
- Контактная информация:
Re: Нужен совет по медианному фильтру в разных программах
Попробуйте 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: Нужен совет по медианному фильтру в разных программах
R не потянет десятки гигабайт. Я, например, почти всю обработку растров пускаю через GRASS.
___________(¯`·.¸(¯`·.¸ Scientia potentia est _/ {SILVA}:::{FOSS}:::{GIS} \_ Знание сила ¸.·´¯)¸.·´¯)___________
-
- Гуру
- Сообщения: 4056
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1054
- Ваше звание: программист
- Откуда: Казань
Re: Нужен совет по медианному фильтру в разных программах
EBImage и правда не потянет, у него картинка должна быть в памяти. Работает через гистограмму, на маленькой картинке для сравнения можно использовать.
-
- Новоприбывший
- Сообщения: 3
- Зарегистрирован: 21 июн 2018, 17:30
- Репутация: 0
- Откуда: Подольск
Re: Нужен совет по медианному фильтру в разных программах
Спасибо за наводки!
GRASS классная штука, но GUI делали для врагов .
Пока из найденного лидер по скорости scipy, но там та же проблема что и в EBImage - многогиговую картинку целиком в память грузить так себе идея. И велосипед с гистограммой, написанный на c++ получился всё равно быстрее. Наверное всё же он имеет смысл %).
GRASS классная штука, но GUI делали для врагов .
Пока из найденного лидер по скорости scipy, но там та же проблема что и в EBImage - многогиговую картинку целиком в память грузить так себе идея. И велосипед с гистограммой, написанный на c++ получился всё равно быстрее. Наверное всё же он имеет смысл %).
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 28 гостей