Я знаю, что могу использовать структуру данных, такую ​​как kd-tree, для поиска k ближайших точек к каждой точке на плоскости (используя евклидово расстояние). Но я уже построил триагуляцию Делоне в своей программе, поэтому я хотел бы найти k ближайших соседей более эффективно, воспользовавшись преимуществом триангуляции Делоне. Я использую Matlab, а класс delaunayTriangulation позволяет запрашивать только первого ближайшего соседа к заданной точке. Как я могу найти k ближайших соседей в MATLAB с помощью триангуляции Делоне? Или иначе, если мне придется реализовать алгоритм поиска k ближайших соседей из триангуляции Делоне, можете ли вы указать мне на такой алгоритм?

0
Matteo 2 Дек 2020 в 17:57

1 ответ

Лучший ответ

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

knnsearch() достаточно.


Исходный ответ:

Когда у меня возникла эта проблема, я нашел 2 эффективных решения.

  1. если вы хотите, чтобы K ближайших соседей находились в произвольной точке, вам нужно построить дерево. Я использовал R * -деревья, потому что они допускают объемные объекты, но если вы учитываете только центроид элементов, вы можете выжить с помощью более простого в кодировании дерева.

  2. Если вы хотите, чтобы K ближайших соседей к самому элементу, лучший способ, который я нашел, - это построение сетевого графа. Триангуляция Делоне не является структурой, и поиск в этом списке становится трудноразрешимым, как только вы его увеличите, поэтому вам нужно обеспечить некоторый порядок. Вам нужно построить граф, который упорядочит эти элементы и сохранит их соседей, чтобы вы могли просто запросить соседей на расстоянии от элемента, если вам это интересно.

Я не нашел функции MATLAB, которая решила бы эту проблему за меня, и закончил тем, что написал свой собственный материал. Это было в более широком контексте использования тетраэдров в качестве основы изображения для компьютерной томографии, поэтому в этом репозитории много лишнего, и кое-что, возможно, нужно будет коснуться кое-где. Используйте на свой риск.

2
Ander Biguri 2 Дек 2020 в 16:46