PointCloud с несколькими Kinects
Я пытаюсь сделать пользователя отображения PointCloud с несколькими kinects на обработку. Я получаю пользователя спереди и сзади с 2 кинектами на противоположных сторонах и генерирую оба PointClouds.
Проблема в том, что PointClouds X/Y/Z не синхронизированы, они просто выводят их на экран, и это, безусловно, выглядит грязно. Есть способ рассчитать или сделать сравнение между ними, перевести второй PointCloud, чтобы "присоединиться" к первому? Я мог бы перевести положение вручную, но если я переместлю датчики, он снова отключится.
1 ответ
Предположим, что все Kinects являются стационарными, я думаю, вы должны будете пойти в следующем порядке:
- решить, какой Kinect использовать в качестве глобальной ссылки,
- получить параметры для 3D-преобразования для каждого из других Kinects - я бы попробовал использовать PMatrix3D и applyMatrix(), хотя это может быть медленным,
- применить преобразования к каждому из облаков точек других Kinects и нарисовать облака
Я (пока) не знаю, как получить параметры преобразования для преобразования Procrustes, но предполагая, что они не изменятся, вам, вероятно, придется настроить несколько контрольных точек, возможно, путем отображения облаков точек из каждой пары Kinects и регистрация точек, которые вы знаете, одинаковы в обоих облаках точек. Получив их достаточно, создайте PMatrix3D и примените его внутри push/popMatrix. Этот подход используется этим парнем: http://www.youtube.com/watch?v=ujUNj1RDL4I
Альтернативный подход заключается в использовании алгоритма итеративной ближайшей точки и построении трехмерного преобразования из его выходных данных. Я бы очень хотел библиотеку ICP или PCL для обработки, если кто-нибудь знает хорошую.