Быстрый поиск определенных фигур в облаках точек - PullRequest
6 голосов
/ 02 марта 2011

У меня есть облако точек, и я хотел бы обнаружить появление определенных шаблонов точек в моем коде.

Допустим, у меня есть 1000 точек в трехмерном пространстве, и я хочу обнаружить все экземпляры 3 точек, которые образуют форму 'L', где каждый сегмент L имеет определенную длину. Облако точек может не иметь точных совпадений, но может быть очень близко (т. Е. В облаке точек длина сегмента 'L' может быть немного больше / короче идеального)

Моя первоначальная идея была примерно такой:

  1. записать расстояние между всеми точками в форме, которую мы пытаемся обнаружить
  2. создать пустую «потенциальную фигуру»
  3. для каждой точки в нашей потенциальной форме, изучите все точки, которые находятся на / около расстояний, найденных в части 1)
  4. Если мы находим точку, добавляем ее к нашей потенциальной форме и повторяем часть 3), пока у нас не появятся все точки. Затем проверьте углы между точками, чтобы убедиться, что форма действительно правильная. Если не правильно, мы переходим к следующему пункту и начинаем снова

Проблема в том, что у этого подхода ужасное время выполнения. В идеале я хотел бы иметь какую-то структуру данных, чтобы ускорить мои запросы для «Найти все точки, которые находятся между distanceMin и distanceMax от заданной точки. Может кто-нибудь указать мне на некоторые полезные структуры данных, которые могут помочь.

Я думал о том, чтобы поместить все точки в октри, чтобы ускорить время доступа.

Любой другой совет, как улучшить время работы? Эвристика для ускорения вещей?

Примечание: фигуры, которые я пытаюсь найти, являются переменными. Они не всегда будут «L». Я пробовал смотреть на грубые преобразования, но они, кажется, полезны только для обнаружения определенных заранее определенных форм, таких как линии / круги.

1 Ответ

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

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

содержит методы SAmple Consensus (SAC), такие как RANSAC, и модели, такие как плоскости и цилиндры.Они могут свободно комбинироваться для обнаружения конкретных моделей и их параметров в облаках точек.

Может быть, вы могли бы создать несколько фигур, комбинирующих эти примитивы, и искать их в облаке?.

...