Как аппроксимировать векторный контур из растра высот? - PullRequest
11 голосов
/ 10 февраля 2009

У меня есть карта высот, хранящаяся как растр. Я хотел бы подогнать плавную «векторную» кривую к контурам постоянной высоты. В моем приложении данные на самом деле являются географическими точками, но проблему можно обобщить для любой функции двух переменных.

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

Этот вопрос похож, но я ищу бесплатную библиотеку, которую я могу использовать в своем приложении Java, или объяснение алгоритма, который я (нематематик) могу реализовать сам. Кроме того, в моем случае я уже нашел все «ребра», которые меня интересуют, - мне просто нужно их векторизовать.

Другой вопрос затрагивает мой, но постер так и не вернулся, чтобы объяснить, как он реализовал последний шаг, то есть часть, которую я пропускаю.

Ответы [ 3 ]

2 голосов
/ 11 февраля 2009

MATLAB делает это с контурным графиком: см. Функцию contour - он создает данные линии контура из сетки данных f (x, y). Я не очень разбираюсь в алгоритме, который они используют (у них есть страница , в которой он обсуждается ), но, возможно, стоит взглянуть на эквивалент октавы .

есть тезис о построении контура и страница CodeProject , основанная на тезисе.

2 голосов
/ 10 февраля 2009

Вы, вероятно, хотите подгонять к закрытым сплайнам Безье (кривым).

Существует страница с Java-апплетом , которая выполняет такую ​​установку. Взгляните на их (без комментариев, бле) PSegment.java

Если это не делает работу достаточно хорошо, Подгонка B-сплайновых кривых к точечным облакам с помощью Минимизация квадрата расстояния должна быть чрезмерной для задачи.

Для получения дополнительной информации, Google (Scholar) ищет такие вещи, как "b-spline fiting" и "Closed Bezier spline".

1 голос
/ 24 декабря 2012

Я использую GDAL . И, по моему мнению, вы, вероятно, не хотите создать сплайны Безье, что добавляет сложности. Короткие отрезки достаточно хороши.

Единственная проблема заключается в том, что вам придется создавать контуры во время подготовки данных, а не в приложении Java.

Вот карта с некоторыми контурами, созданными из данных высоты USGS с использованием GDAL:

enter image description here

...