PointCloud с несколькими Kinects

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

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

1 ответ

Решение

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

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

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

Альтернативный подход заключается в использовании алгоритма итеративной ближайшей точки и построении трехмерного преобразования из его выходных данных. Я бы очень хотел библиотеку ICP или PCL для обработки, если кто-нибудь знает хорошую.

Другие вопросы по тегам