Я попытался использовать 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.
И для меня это работает довольно быстро :)
Надеюсь, это поможет.
Спасибо, Оси, за ваш ответ. Я уже пробовал это. Но проблема в том, что у меня есть количество строк в порядке количества точек в облаке. Если я запустил два цикла с таким огромным числом. Я должен ждать очень долго, пока не получу результат. Он работает, я проверил, но занимает больше получаса. :) – Isabela