我正在尝试在PCL中的点云上计算ISS3D关键点。我想设置 法线因为我不确定ISS关键点估计是否会翻转它们 在正确的方向。但是,当我尝试设置这样的法线时
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
,但这不起作用。
如何设置法线?
答案 0 :(得分:0)
最后我设法设置了这样的法线:
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。