Как объединить точки закрытия в 2d список python - PullRequest
0 голосов
/ 29 мая 2020

У меня проблемы с объединением точек закрытия для диаграммы Вороного, вот случай:

  1. Я загружаю карту из изображения
  2. Карта преобразуется в массив, содержащий только точки означают препятствия
  3. Диаграмма Вороного вычисляется из этого массива

Тогда проблема в том, что у меня есть вершины внутри «препятствий», как показано на изображении enter image description here

Моя идея состоит в том, чтобы преобразовать препятствия, содержащие много точек, в одну точку.

Список точек выглядит примерно так:

map = [[11, 29], [11, 30], [11, 31], [12, 28], [12, 29], [12, 30]]

Я хочу взять группу точек и объединить эти точки в одну.

Я нашел это Быстрое соединение близких точек в numpy -2d (векторизованное)

Я понятия не имею, как объединить эти точки с учетом препятствий не "точечных"

1 Ответ

0 голосов
/ 29 мая 2020

Я бы порекомендовал вам не использовать map в качестве имени переменной, так как есть функция с таким же именем. Ваша проблема в жанре - найти кластеры, которые похожи на проблему в вашей ссылке, но на основе данных k-Dtree может быть не лучшим. Я бы порекомендовал другой алгоритм кластеризации из scikit :

  • KMeans, если вы знаете количество препятствий
  • DBSCAN, если вы знаете максимальный размер препятствия

из sklearn.cluster import KMeans, DBSCAN import numpy as np

obstacle_list = [[0, 0], [0, 1], [1, 0], [1, 1], [3, 3], [4, 3],[3,4]]
obstacle_array = np.array(obstacle_list) # for easier handling

#if you know the number of obstacles
number_of_obstacles=2
cluster_values = KMeans(n_clusters=number_of_obstacles).fit_predict(obstacle_array)
print(cluster_values) # those are the cluster MeanShift found

#if you know the maximal size of an obstacle
max_size_of_obstacle = 3
db_values = DBSCAN(eps=max_size_of_obstacle).fit_predict(obstacle_array)
print(cluster_values)# those are the cluster DBSCAN found

Если вы хотите, чтобы он был представлен только 1 точкой, вероятно, где-то в центре) вы можете l oop вместо cluster_values вычислить его. Я бы взял средние значения x и y, но ваши данные кажутся целыми числами, поэтому вы можете взять что-нибудь еще.

...