Как сделать топографическую карту из разреженных выборочных данных?

Мне нужно сделать топографическую карту местности, для которой у меня есть только довольно редкие выборки данных (x, y, высота). Очевидно, что я не могу сделать полностью точную карту, но хотелось бы, чтобы она была в каком-то смысле «гладкой». Мне нужно количественно оценить «гладкость» (вероятно, обратное среднее значение квадрата кривизны поверхности), и я хочу минимизировать целевую функцию, которая представляет собой сумму двух величин:

  • Шероховатость поверхности
  • Среднеквадратичное расстояние между высотой поверхности в точке выборки и фактической измеренной высотой в этой точке.

Поскольку на самом деле мне нужна топографическая карта, я действительно ищу способ построения контурных линий постоянной высоты, и может быть какой-то умный геометрический способ сделать это, даже не говоря о поверхностях. Конечно, я хочу, чтобы контурные линии тоже были плавными.

Приветствуются любые предложения. Я надеюсь, что это известная числовая проблема. Я вполне комфортно владею C и имею практические знания FORTRAN. О Matlab и R я довольно невежественен.


Относительно того, где расположены наши образцы: мы планируем примерно равное расстояние, но мы возьмем больше образцов там, где топография более интересна. Так, например, мы сэмплируем горные районы более плотно, чем равнину. Но у нас определенно есть выбор в отношении выборки, и мы могли бы взять даже пробы, если это упростит ситуацию. Единственные проблемы

  • Мы не знаем, сколько местности нам нужно нанести на карту, чтобы найти искомые объекты.

  • Взятие образца стоит умеренно дорого, порядка 10 минут. Таким образом, выборка сетки 100x100 может занять много времени.


person Norman Ramsey    schedule 26.08.2009    source источник
comment
Ваши образцы равномерно распределены или случайны?   -  person Mark Ransom    schedule 26.08.2009
comment
Марк: мы можем разместить их где угодно. Я добавил примечание выше.   -  person Norman Ramsey    schedule 26.08.2009


Ответы (4)


Кригинг-интерполяция может оказаться полезным для гладкой интерполяции разреженных выборок.

person Jim Lewis    schedule 26.08.2009

R имеет много различных соответствующих инструментов. В частности, обратите внимание на пространственное представление. Подобный вопрос задавался в R-Help ранее, поэтому вы можете посмотреть на это.

Посмотрите на функции contour. Вот некоторые данные:

x <- seq(-3,3)
y <- seq(-3,3)

z <- outer(x,y, function(x,y,...) x^2 + y^2 )

Первоначальный сюжет несколько груб:

contour(x,y,z, lty=1)

Билл Данлэп предложил усовершенствование: «Часто бывает лучше подогнать гладкую поверхность к данным, оценить эту поверхность на более мелкой сетке и передать результат в контур. Это гарантирует, что контурные линии не пересекаются друг с другом и, как правило, ложные петли, которые вы можете получить от сглаживания самих контурных линий. Тонкие пластинчатые сплайны (Tps из библиотеки («поля»)) и лесс (среди прочего) могут соответствовать поверхности».

library("fields")
contour(predict.surface(Tps(as.matrix(expand.grid(x=x,y=y)),as.vector(z))))

Это приводит к очень гладкому графику, потому что он сначала использует Tps() для подгонки данных, а затем вызывает contour. В итоге это выглядит так (вы также можете использовать fill.contour, если хотите, чтобы он был затенен):

Для сюжета можно использовать либо lattice (как в приведенном выше примере), либо пакет ggplot2. В этом случае используйте функцию geom_contour(). Пример можно найти здесь (ht Thierry):

ds <- matrix(rnorm(100), nrow = 10) 
library(reshape) 
molten <- melt(data = ds) 
library(ggplot2) 
ggplot(molten, aes(x = X1, y = X2, z = value)) + geom_contour()
person Shane    schedule 30.09.2009

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

person Martin Beckett    schedule 26.08.2009
comment
Больше не сломан, но я думаю, что это не совсем ответ на поставленный вопрос. Похоже, что этот внешний ресурс должен иметь функцию, и на основе этой функции он будет рисовать контурную карту. - person IRTFM; 01.04.2017

возможно, вы можете использовать:

с

в R

person pageman    schedule 26.08.2009
comment
Боюсь, слишком разбросан, чтобы быть полезным. GEOMap может быть полезен, но документация настолько сложна, что я не могу сказать. Генеративная топографическая карта en.wikipedia.org/wiki/Generative_topographic_map выглядит более перспективной. - person Norman Ramsey; 26.08.2009
comment
на самом деле это и есть gtm — генеративное топографическое картографирование — cran.r-project. org/web/packages/gtm/gtm.pdf - person pageman; 26.08.2009