Преобразование между облаками точек

Я надеюсь найти некоторые подсказки, с чего начать с проблемой, с которой я имею дело. Я использую датчик Kinect для захвата трехмерных облаков точек. Я создал детектор 3D-объектов, который уже работает.

Вот моя задача:

Допустим, у меня есть облако точек 1. Я обнаружил объект в облаке A и знаю положение центра тяжести моего объекта (x1, y1, z1). Теперь я перемещаю датчик по пути и создаю новые облака (например, облако 2). В этом облаке 2 я вижу тот же объект, но, например. со стороны, где обнаружение объекта не работает нормально.

Я хотел бы преобразовать обнаруженный объект из облака 1 в облако 2, чтобы получить центроид также в облаке 2. Для меня это звучит так, как будто мне нужна матрица (перемещение, вращение) для преобразования точки из 1 в 2.

И идеи, как я мог бы решить мою проблему? Может ИКП? Есть ли лучшие решения?

СПАСИБО!


person user2576458    schedule 11.11.2013    source источник
comment
Чтобы уточнить: вы не знаете путь, по которому прошел датчик, или не имеете никаких оценок, я прав?   -  person D.J.Duff    schedule 11.11.2013
comment
Я не уверена. Я двигаю кинект в комнате вручную   -  person user2576458    schedule 12.11.2013
comment
Я так понимаю детект работает в кадре А но не В. Можно ли отслеживать объект пока датчик движется? Это может решить это. В противном случае попробуйте сопоставить особенности формы исходного найденного объекта с новым изображением (много ли у объекта признаков?) — хотя изменение точки обзора должно быть достаточно небольшим. Это было бы полезно, если бы у вас была оценка преобразования. ICP может сработать, если у вас есть хорошая оценка преобразования и точка зрения не изменилась слишком сильно. Дальше будет интереснее ;)   -  person D.J.Duff    schedule 14.11.2013


Ответы (2)


В общем, эта задача называется регистрацией. Он основан на хорошей оценке того, какие точки в облаке 1 соответствуют каким облакам в точке 2 (точнее, какая точка в облаке 1 соответствует той же точке в облаке 2 на обнаруженном объекте). В документации по библиотеке PCL есть хороший обзор.

Если у вас есть такое соответствие, вам повезло, и вы можете напрямую вычислить поворот и перевод, как показано здесь.

Если нет, вам нужно будет оценить эту корреспонденцию. ICP делает это для примерно выровненных облаков точек, но если ваши облака точек еще недостаточно хорошо выровнены, вы можете начать с оценки «ключевых точек» (таких как углы книги, разные цвета и т. д.) в ваших облаках точек, вычисляя вращение и перемещение, как указано выше, а затем выполнение ICP. Как упоминал DJDuff, на практике ICP лучше работает с облаками точек, которые уже приблизительно выровнены, потому что он оценивает соответствия, используя одну из двух метрик: минимальное расстояние между точками или минимальное расстояние между точками и плоскостями, согласно Википедии, последний работает лучше. на практике, но это включает в себя оценку нормалей, что может быть непросто. Если соответствия далеки, то и преобразования, скорее всего, тоже будут.

person philngo    schedule 05.12.2013

Я думаю, что вы спрашивали, в частности, о сенсоре Kinect и API, выпущенном Microsoft для него.

Если вы не планируете выполнять реконструкцию, вы можете просмотреть ссылку AlignPointClouds в пространстве имен Sensor Fusion. Это должно позаботиться об этом автоматически, методами, аналогичными ответу, данному @pnhgiol.

С другой стороны, если вы хотите выполнять реконструкцию, а также преобразование облака точек, класс Reconstruction — это то, что вам нужно. Обо всем этом можно узнать здесь.

person 9301293    schedule 16.01.2017