首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CGAL:手动创建形状检测点集

CGAL:手动创建形状检测点集
EN

Stack Overflow用户
提问于 2019-06-07 13:55:52
回答 2查看 268关注 0票数 0

根据CGAL4.13.1中的“基本平面形状检测”实例,我尝试使用CGAL的形状检测算法。但是,而不是读取-从文件中的数据

代码语言:javascript
复制
CGAL::read_xyz_points(stream,
      std::back_inserter(points),
      CGAL::parameters::point_map(Point_map()).
      normal_map(Normal_map()))

我想将我的观点从一个现有的pcl::PointCloud加载到必要的CGAL类型。我只是不知道如何创建这个CGAL类型。根据例子(节选)

代码语言:javascript
复制
typedef std::pair<Kernel::Point_3, Kernel::Vector_3> Point_with_normal;
typedef std::vector<Point_with_normal> Pwn_vector;

Pwn_vector points;
typedef CGAL::Shape_detection_3::Efficient_RANSAC<Traits> Efficient_ransac;
EfficientRansac.set_input(points);

我只需要创建Pwn_vector。所以我的问题是

  1. 我可以在Pwn_vector中插入点吗?
  2. 在CGAL中获取法线的最佳方法是什么?是CGAL::jet_estimate_normals吗?
  3. 我需要Point_mapNormal_map的属性映射吗?我不知道他们是如何被移交给Efficient_ransac的。
  4. 还有什么必要的吗?

我从以下代码开始:

代码语言:javascript
复制
  // Points with normals.
  cgal::Pwn_vector points;

  // load points from pcl cloud
  for (auto point : cloud.points) {
    cgal::Point_with_normal pwn;
    pwn.first = cgal::ShapeKernel::Point_3(point.x, point.y, point.z);
    points.push_back(pwn);
  }

(PCL对这个问题并不感兴趣,因为它清楚如何访问单个坐标。)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-11 07:26:00

要逐点回答,我想说:

  1. 你需要提供点和法线,所以我会说不。
  2. 您可以根据需要使用喷气机主成分分析vcm正常估计。
  3. 如果使用与示例中相同的类型,则不需要它们。默认值就行了。
  4. 基本上,您只需要用您的点和您的正常估计的结果来填充Pwn_vector,其余的应该在示例中精确地工作。
票数 1
EN

Stack Overflow用户

发布于 2019-06-11 08:19:08

要完成mgimeno的答案(这是正确的),您不一定需要复制这些点。属性映射的兴趣在于,您只需要提供一个函数get(),该函数可以动态地将您范围内的value_type转换为CGAL::Point_3 (法线的CGAL::Vector_3)。

例如,对于PCL,我想您会这样做(我不是PCL的用户,所以这可能是不正确的,但这只是给您一个想法):

代码语言:javascript
复制
struct PCL_point_map
{
   typedef pcl::PointCloud::value_type key_type;
   typedef CGAL::Point_3<Kernel> value_type;
   typedef CGAL::Point_3<Kernel> reference;
   typedef boost::readable_property_map_tag category;

   friend reference get (const PCL_point_map&, const key_type& k)
   {
      return CGAL::Point_3<Kernel> (k.x, k.y, k.z);
   }
};

对于法线也有类似之处(需要计算法线才能进行形状检测,CGAL::jet_estimate_normals是一个很好的选择)。然后,如果您只是用自己的地图来模板这些特征,您可以直接调用PCL点云上的RANSAC算法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56495711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档