Установка нормалей для ISSKeypoint3D в Библиотеке облаков точек (PCL)
Я пытаюсь вычислить точки ISS3D на облаке точек в PCL. Я хочу установить нормали, потому что я не уверен, что оценка ключевой точки МКС переворачивает их в правильном направлении. Тем не менее, когда я пытаюсь установить нормальные как это
typedef pcl::PointCloud<pcl::PointXYZRGB> > PointCloud;
PointCloud::Ptr detecISSKeypoints(PointCloud::Ptr cloud, pcl::PointCloud<pcl::PointNormal>::Ptr normals, float resolution) {
pcl::PointCloud<pcl::PointXYZRGB>::Ptr keypoints(new pcl::PointCloud<pcl::PointXYZRGB>);
pcl::ISSKeypoint3D<pcl::PointXYZRGB, pcl::PointXYZRGB> detector;
detector.setInputCloud(cloud);
detector.setNormals(normals);
pcl::search::KdTree<pcl::PointXYZRGB>::Ptr kdtree(new pcl::search::KdTree<pcl::PointXYZRGB>);
detector.setSearchMethod(kdtree);
detector.setSalientRadius(6 * resolution);
detector.setNonMaxRadius(6 * resolution);
detector.setMinNeighbors(6);
detector.setThreshold21(0.975);
detector.setThreshold32(0.975);
detector.setNumberOfThreads(4);
detector.compute(*keypoints);
return keypoints;
}
Я получаю сообщение об ошибке setNormals
ожидает const PointCloudNConstPtr&
, Я пытался преобразовать указатель нормалей в const pcl::PointCloud<pcl::PointNormal>::ConstPtr
Однако это не сработало.
Как я могу установить нормали?
1 ответ
Решение
Наконец мне удалось установить нормальные значения следующим образом:
pcl::PointCloud<pcl::Normal>::Ptr normalsCopy (new pcl::PointCloud<pcl::Normal>);
copyPointCloud(*normals, *normalsCopy);
boost::shared_ptr<const pcl::PointCloud<pcl::Normal> > constNormals (normalsCopy);
detector.setNormals(constNormals);
Проблема в ISSKeypoint3D
только принимает pcl::Normal
не pcl::PointNormal
и указатель должен быть постоянным pointlcoud.