Я хочу удалить все точки под признанной таблицей. Как мне это сделать? У меня есть следующий функциональный код для сегмента/удалить таблицу из облака точек:PCL удалить точки под сегментированный стол
std::cout << "(II) segmenting table plane ..." << std::endl;
pcl::PointCloud<pcl::PointXYZ>::Ptr segmented_scene(new pcl::PointCloud<pcl::PointXYZ>);
pcl::PointIndices::Ptr inliers(new pcl::PointIndices());
ModelCoefficients::Ptr coefficients(new pcl::ModelCoefficients);
SACSegmentation<PointXYZ> segmentation;
segmentation.setInputCloud(downsampledScene);
segmentation.setModelType(pcl::SACMODEL_PLANE);
segmentation.setMethodType(pcl::SAC_RANSAC);
segmentation.setDistanceThreshold(threshold);
segmentation.setOptimizeCoefficients(true);
segmentation.setMaxIterations(1000);
//PointIndices inlierIndices;
segmentation.segment(*inliers, *coefficients);
ExtractIndices<PointXYZ> extract;
extract.setInputCloud(downsampledScene);
extract.setIndices(inliers);
extract.setNegative(true);
extract.filter(*segmented_scene);
//copyPointCloud<pcl::PointXYZ>(*downsampledScene, inlierIndices, *segmented_scene);
copyPointCloud(*segmented_scene, *outputCloud);
Или как я могу установить начало системы координат на столе, чтобы использовать транзитный фильтр для фильтрации всех точек при Таблица?
Я проверил это с помощью следующего кода, но я думаю, что это не правильно:
Eigen::Affine3f transform_1 = Eigen::Affine3f::Identity();
cout << coefficients->values[0] << " " << coefficients->values[1] << " " << coefficients->values[2] << endl;
transform_1.translation() << coefficients->values[0], coefficients->values[1], coefficients->values[2];
transformPointCloud(*segmented_scene, *segmented_scene, transform_1);
Спасибо за ваш ответ. Я уже тестировал этот учебник, но я ошибся со следующей ошибкой: «[pcl :: ConvexHull :: выполнитьReconstrution2D] ОШИБКА: qhull не смог вычислить выпуклую оболочку для данного облака точек (53493)! [pcl :: ExtractPolygonalPrismData :: segment] Недостаточно точек (0) в корпусе! '. Мой HeightLimits ist установлен на: 'prism.setHeightLimits (0.0f, 500.0f);' потому что у меня есть PointClound в мм. (например: -2906.6528 -3386.3918 8212). Объект на столе имеет высоту ок. 10 см. – DripleX
Похоже, он думает, что в выпуклой оболочке нет точек (т. Е. Таблицы). Не знаю, почему. Во всяком случае, у вас есть решение. –
Это я или ссылка на учебник мертв? – Bono