2012-03-26 5 views
3

Я пытаюсь создать пользовательский интерфейс PointCloud с несколькими кинами для обработки. Я получаю переднюю и заднюю сторону пользователя с 2 кинекторами с противоположных сторон и генерирую обе PointClouds.PointCloud с несколькими Kinects

Проблема в том, что PointClouds X/Y/Z не синхронизированы, он просто отображает их на экране, и это, безусловно, выглядит грязным. Есть способ вычислить или сделать сравнение между ними, чтобы перевести второй PointCloud, чтобы «присоединиться» к первому? Я мог бы перевести позицию вручную, но если я переведу датчики, он снова погаснет.

+0

Вы используете событие «AllFramesReady»? Предполагается синхронизировать все камеры –

ответ

4

Предположив все Kinects являются стационарными, я думаю, вам придется идти в таком порядке:

  1. решить, на котором Kinect для использования в качестве глобальной ссылки,
  2. параметров приобретают для 3D-преобразований для каждого других Kinects - я бы попытаться использования PMatrix3D и applyMatrix(), хотя это может быть медленным,
  3. применять преобразования по каждому из облаков точек другой Kinects' и рисовать облака

Я еще не знаю, как получить параметры преобразования для Procrustes transformation, но при условии, что они не изменятся, вам, вероятно, придется настроить несколько опорных точек, возможно, отображая облака точек из каждой пары Kinects и регистрации точек, которые, как вы знаете, одинаковы в обоих облаках. Получив достаточное количество из них, постройте PMatrix3D и примените его внутри push/popMatrix. Это подход, используемый этим парнем: http://www.youtube.com/watch?v=ujUNj1RDL4I

Альтернативным подходом было бы использовать алгоритм Итеративной Ближайшей точки и построить 3D-преобразование с его выхода. Мне бы очень понравилась библиотека ICP или PCL для обработки, если кто-то знает хороший.

+0

Спасибо большое! Я попробую, я сейчас проголосую за ваш ответ. –

Смежные вопросы