Установка нормалей для 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.

Другие вопросы по тегам