1

У меня есть интересная алгоритмическая задача в проекте, над которым я работаю. У меня есть отсортированный список координат точек, указывающих на здания по обе стороны улицы, что, достаточно зуммировании, выглядит следующим образом:Как упростить сплайн?

enter image description here

Я хотел бы воспользоваться этой зигзаг и сгладить ее линеаризовать подстилающая улица.

Я могу придумать несколько решений:

  1. Вычислить Центроиды с помощью прокатки средних шесть или около точек, и использовать их.
  2. Spline regression.

Есть ли лучший или лучший способ подойти к этой проблеме? (Я использую Python 3.5)

+1

Вы просто пытаетесь сгладить их, чтобы «выглядеть лучше», или есть план для анализа результатов. Часто лучший выбор сглаживания для анализа зависит от модели, которую вы анализируете. –

+0

То, что сказал @CortAmmon. Какова ваша цель? Как вы уже отметили, существует несколько вариантов. Я парень DSP. Я просто интерполирую их; но это вряд ли будет бесполезно для вас, если ваша модель движения не имеет отношения к синусоидам. –

+0

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

ответ

0

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

Таким образом, я использовал двухэтапный процесс:

  1. я вычислил центроиды полилинии с помощью скользящего среднего значения координат пяти прилегающих точек. Это не помогло сгладить функцию, но в большинстве случаев удалось переназначить их до середины улицы.
  2. Я применил алгоритм Visvalingam к новой полилинии, с указанными n=20 точками (с использованием this замечательной реализации).

Результат был не совсем совершенным, но это было достаточно хорошо:

enter image description here

Спасибо за помощь всем!

6

Основываясь на вашем описании и ваших комментариях, вы ищете алгоритмы упрощения линии .

enter image description here

Ramer-Doublas алгоритм (предложенный в комментарии) наиболее вероятно, наиболее хорошо известный алгоритм в этой семье, но есть еще много.

Например, Visvalingam’s algorithm работает, удаляя точку с наименьшим изменением, которое рассчитывается наименьшим квадратом треугольника. Это делает его очень простым для кодирования и интуитивно понятным. Если трудно прочитать исследовательскую статью, вы можете легко прочитать статью this.

Другие алгоритмы этого семейства:

Читайте о них, понять, что они пытаются преуменьшать и выбрать наиболее подходящий для Вас ,