У меня есть ЦМР, который я хотел бы сгладить или обобщить, чтобы убрать топографические крайности (отрубить пики и заполнить долины). В идеале мне также хотелось бы иметь контроль над радиусом или уровнем «размытости». В конце мне понадобится набор растров от слегка размытых до действительно размытых. (Теоретически, размытым будет постоянный растр среднего арифметического всех значений).
Могу ли я использовать какие-либо инструменты или методы (основанные на Esri, GDAL, GRASS)? Нужно ли мне дома испечь мою собственную процедуру размытия по Гауссу ? Могу ли я использовать фильтр нижних частот (например, фильтр ArcGIS ), и если да, нужно ли запускать его несколько раз, чтобы получить эффект большого радиуса?
raster
tools
generalization
smoothing
Майк Т
источник
источник
Ответы:
Размытие по Гауссу - это только средневзвешенное фокусное значение. Вы можете воссоздать его с высокой точностью с помощью последовательности коротких расстояний по окружности (невзвешенных): это приложение центральной предельной теоремы .
У вас есть много вариантов. «Фильтр» слишком ограничен - он только для 3х3 окрестностей - так что не беспокойтесь об этом. Наилучший вариант для больших ЦМР - перенести вычисления за пределы ArcGIS в среду, в которой используются быстрые преобразования Фурье: они выполняют те же фокусные вычисления, но (для сравнения) они делают это невероятно быстро. (У GRASS есть модуль FFT . Он предназначен для обработки изображений, но вы можете использовать его для своей ЦМР, если сможете с разумной точностью изменить его масштаб до диапазона 0..255.) За исключением этого, как минимум два решения : стоит учесть:
Создайте набор весов окрестностей для аппроксимации размытия по Гауссу для значительного соседства. Используйте последовательные проходы этого размытия, чтобы создать свою последовательность более плавных ЦМР.
(Веса вычисляются как exp (-d ^ 2 / (2r)), где d - расстояние (в ячейках, если хотите), а r - эффективный радиус (также в ячейках). Они должны быть вычислены в пределах круга, продолжающегося по крайней мере до 3r . После этого разделите каждый вес на сумму их всех так, чтобы в конце они составили 1)
Кроме того, забудьте о взвешивании; просто запустите круговое фокусное среднее значение несколько раз. Я сделал именно это для изучения того, как производные сетки (такие как уклон и аспект) изменяются с разрешением матрицы высот.
Оба метода будут работать хорошо, и после первых нескольких проходов будет мало выбора между этими двумя, но есть и убывающая отдача: эффективный радиус из n последовательных средних значений фокуса (все используют одинаковый размер окрестности) только (приблизительно) квадратный корень из n раз радиуса среднего очага. Таким образом, для огромного количества размытия вы захотите начать сначала с окрестности большого радиуса. Если вы используете невзвешенное среднее значение, выполните 5-6 проходов по ЦМР. Если вы используете веса, приблизительно равные гауссову, вам потребуется только один проход, но вы должны создать матрицу весов.
Этот подход действительно имеет среднее арифметическое DEM в качестве предельного значения.
источник
Я изучаю подход SciPy signal.convolve (основанный на этой кулинарной книге ), и у меня действительно хороший успех со следующим фрагментом:
Я использую это в другой функции, которая читает / записывает файлы GeoTIFF float32 через GDAL (нет необходимости изменять масштаб до 0-255 байт для обработки изображений), и я использую попытку размера пикселя (например, 2, 5, 20), и это имеет действительно хороший вывод (визуализируется в ArcGIS с 1: 1 пикселем и постоянным минимальным / максимальным диапазоном):
Примечание: этот ответ был обновлен для использования гораздо более быстрой функции обработки signal.fftconvolve на основе FFT .
источник
Это может быть комментарием к отличному ответу MikeT , если он не был слишком длинным и слишком сложным. Я много играл с ним и создал плагин QGIS под названием FFT Convolution Filters (пока что «на экспериментальной» стадии), основанный на его функции. Помимо сглаживания, плагин также может делать резкие края, вычитая сглаженный растр из исходного.
Я немного улучшил функцию Майка в процессе:
Проверки достоверности довольно очевидны, но важно то, что они приводятся на плавание и обратно. До этого функция делала целочисленные массивы черными (только нули) из-за деления на сумму значений (
g / g.sum()
).источник
В QGIS я легко добился хороших результатов, используя фильтрацию изображений Orfeo Toolbox . Это разумно быстро и пакетный режим работает нормально. Доступны гауссовы, средние или анизотропные диффузии.
Обратите внимание, что
Radius
относится к числу ячеек, а не расстояние.Вот пример использования Smoothing (гауссовский) :
сырье:
Отфильтрованный:
источник
Хорошее решение для размытия по Гауссу и классной анимации. Что касается упомянутого выше инструмента «Фильтр Esri», то это просто инструмент «Фокальная статистика» Esri, жестко запрограммированный до размера 3x3. Инструмент Focal Statistics дает вам гораздо больше возможностей по форме вашего движущегося фильтра, размеру и статистике, которую вы хотите запустить. http://desktop.arcgis.com/en/arcmap/latest/tools/spatial-analyst-toolbox/focal-statistics.htm
Вы также можете создать «нерегулярный» фильтр, в котором вы передадите свой собственный текстовый файл с весами для использования в каждой ячейке. Текстовый файл имеет столько строк, сколько вы хотите в области фильтра, с разделенными пробелами значениями для столбцов. Я думаю, вы всегда должны использовать нечетное количество строк и столбцов, поэтому ваша целевая ячейка находится посередине.
Я создал таблицу Excel для игры с разными весами, которую просто копирую / вставляю в этот файл. Это должно привести к тем же результатам, что и выше, если вы корректируете формулы.
источник