Заполните пустое место с помощью PCL

Я пытаюсь создать ограничивающую рамку вокруг «незаземленных» объектов с помощью PCL и измерить ее размеры.

Мой конвейер выглядит так:

Получение точек облака XYZ → Проходить → Сетка вокселей → Удаление статистического контура → Евклидова кластеризация → Оценка момента инерции → Некоторая тривиальная математика для получения длины, ширины и высоты.

Но у меня проблема:

введите описание изображения здесь

Как видите, между землей и объектом есть «пустое» пространство, потому что не было информации о «внутренних» точках. Вот почему я не могу создать правильный AABB вокруг своего объекта.

Итак, у меня вопрос: как я могу «реконструировать» эту поверхность, чтобы создать правильный AABB вокруг моего объекта? Как будто он стоит на земле и не летит? Я новичок в PCL, может быть, я упускаю что-то тривиальное?


person Community    schedule 22.03.2018    source источник


Ответы (1)


Предполагая, что ваши объекты всегда стоят на плоской поверхности земли, я бы рекомендовал подойти к проблеме следующим образом. Сначала найдите коэффициенты заземления. Во-вторых, проецируйте точки объекта на эту плоскость, чтобы получить «отпечаток» вашего объекта. Наконец, расширьте ограничительную рамку, включив в нее проецируемые точки.

Необходимые вам алгоритмы доступны в PCL. Для подгонки плоскости см. это руководство. Для точечной проекции используйте следующий фрагмент:

pcl::ProjectInliers<pcl::PointXYZ> proj;
proj.setModelType (pcl::SACMODEL_PLANE);
proj.setInputCloud (cloud_object);
proj.setModelCoefficients (plane_coefficients);
proj.filter (*cloud_projected);
person taketwo    schedule 23.03.2018