在点云库中为 ISSKeypoint3D 设置法线 (PCL)
Setting normals for ISSKeypoint3D in Point Cloud Library (PCL)
我正在尝试计算 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
,但这没有用。
如何设置法线?
最后我设法像这样设置法线:
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。
我正在尝试计算 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
,但这没有用。
如何设置法线?
最后我设法像这样设置法线:
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。