2013-02-10 7 views
1

Я использую библиотеку Point Cloud. Я знаю, что есть функция для поиска строк с использованием метода RANSAC, но я хочу сделать противоположное этому. У меня есть облако точек, у меня есть уравнение линии, теперь я хотел бы найти все точки на или рядом (в пределах заданного порога) линии.Найти точки на линии в облаке точек

Есть ли какая-либо функция/s, которую я могу использовать для достижения своей цели?

Я бы очень признателен за любую помощь.

ответ

1

Я попытался использовать PCL несколько раз для обработки Kinect, но для меня это не сработало. Поэтому я попытался создать свои собственные алгоритмы для того, чтобы делать то, что хочу, и для приложения они работают намного быстрее, чем у PCL :)

Проект, над которым я работаю, находится на GitHub, и вы можете найти код, который может Помощь в поиске bool ConvexHull::addPoint(double newX, double newY, double newZ) найдено here.

Это использует уравнение трехмерной плоскости, сгенерированное с использованием RANSAC, и затем сравнивает каждую точку с ним, вычисляя расстояние между точкой и плоскостью, точно так же, как сказал Осей.

Вот сочный кусочек кода, который я думаю, что может помочь вам:

// Find the distance from point to plane. 
// http://mathworld.wolfram.com/Point-PlaneDistance.html 
dist = newX * plane.a; 
dist += newY * plane.b; 
dist += newZ * plane.c; 
dist += plane.d; 
dist /= sqrt(pow(plane.a, 2) + pow(plane.b, 2) + pow(plane.c, 2)); 

dist = (dist >= 0) ? dist : -dist; // Absolute distance. 

if (dist > tolerance) { 
    return false; // Return false as point is outside of tolerance. 
} 

С помощью этой функции я прохожу в каждой точке от 640 * 480 Kinect изображения, которое имеет значение глубины больше 0.

И для меня это работает довольно быстро :)

Надеюсь, это поможет.

0

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

+0

Спасибо, Оси, за ваш ответ. Я уже пробовал это. Но проблема в том, что у меня есть количество строк в порядке количества точек в облаке. Если я запустил два цикла с таким огромным числом. Я должен ждать очень долго, пока не получу результат. Он работает, я проверил, но занимает больше получаса. :) – Isabela