点云技术相关产学研社区

 找回密码
 立即注册加入PCL中国点云技术相关产学研社区

扫一扫,访问微社区

查看: 5424|回复: 7

无序点云的网格重建问题

[复制链接]
发表于 2014-3-20 16:54:13 | 显示全部楼层 |阅读模式
重建后可视化效果如图所示,除坐标外全黑,用样例自己的的点云成功,用自己的就不行,和输入pcd文件中的数据有关吗?重建样例代码如下:
// Load input file into a PointCloud<T> with an appropriate type
  pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>);
  sensor_msgs::PointCloud2 cloud_blob;
  pcl::io::loadPCDFile ("facePoint2.pcd", cloud_blob);
  pcl::fromROSMsg (cloud_blob, *cloud);
  //* the data should be available in cloud

  // Normal estimation*
  pcl::NormalEstimation<pcl::PointXYZ, pcl::Normal> n;
  pcl::PointCloud<pcl::Normal>::Ptr normals (new pcl::PointCloud<pcl::Normal>);
  pcl::search::KdTree<pcl::PointXYZ>::Ptr tree (new pcl::search::KdTree<pcl::PointXYZ>);
  tree->setInputCloud (cloud);
  n.setInputCloud (cloud);
  n.setSearchMethod (tree);
  n.setKSearch (20);
  n.compute (*normals);
  //* normals should not contain the point normals + surface curvatures

  // Concatenate the XYZ and normal fields*
  pcl::PointCloud<pcl::PointNormal>::Ptr cloud_with_normals (new pcl::PointCloud<pcl::PointNormal>);
  pcl::concatenateFields (*cloud, *normals, *cloud_with_normals);
  //* cloud_with_normals = cloud + normals

  // Create search tree*
  pcl::search::KdTree<pcl::PointNormal>::Ptr tree2 (new pcl::search::KdTree<pcl::PointNormal>);
  tree2->setInputCloud (cloud_with_normals);

  // Initialize objects
  pcl::GreedyProjectionTriangulation<pcl::PointNormal> gp3;
  pcl::PolygonMesh triangles;

  // Set the maximum distance between connected points (maximum edge length)
  gp3.setSearchRadius (0.025);

  // Set typical values for the parameters
  gp3.setMu (2.5);
  gp3.setMaximumNearestNeighbors (100);
  gp3.setMaximumSurfaceAngle(M_PI/4); // 45 degrees
  gp3.setMinimumAngle(M_PI/18); // 10 degrees
  gp3.setMaximumAngle(2*M_PI/3); // 120 degrees
  gp3.setNormalConsistency(false);

  // Get result
  gp3.setInputCloud (cloud_with_normals);
  gp3.setSearchMethod (tree2);
  gp3.reconstruct (triangles);
// std::cout << triangles;
  // Additional vertex information
  std::vector<int> parts = gp3.getPartIDs();
  std::vector<int> states = gp3.getPointStates();
  boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer (new pcl::visualization::PCLVisualizer ("3D Viewer"));
  viewer->setBackgroundColor (0, 0, 0);
  viewer->addPolygonMesh(triangles,"my");

  viewer->addCoordinateSystem (1.0);
  viewer->initCameraParameters ();
   // 主循环
  while (!viewer->wasStopped ())
  {
    viewer->spinOnce (100);
    boost::this_thread::sleep (boost::posix_time::microseconds (100000));
  }
  // Finish

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册加入PCL中国点云技术相关产学研社区

x
回复

使用道具 举报

发表于 2014-3-20 19:20:28 | 显示全部楼层
没有报错只是不显示?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-20 20:01:11 | 显示全部楼层
苏菲娅 发表于 2014-3-20 19:20
没有报错只是不显示?

是的,没有报错只是不显示
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-20 20:30:16 | 显示全部楼层
已解决:点云数据不一致,我是kinect提取的数据,是以毫米为单位的,修改即可。
回复 支持 反对

使用道具 举报

发表于 2014-4-29 16:18:25 | 显示全部楼层
kinect提取的数据,能贴出来让大家看看吗?我比较关注Kinect采集的数据精度,想看一下,因为我还没有买这个设备。
回复 支持 反对

使用道具 举报

发表于 2014-5-1 23:17:20 | 显示全部楼层
回复 支持 反对

使用道具 举报

发表于 2014-5-7 22:44:04 | 显示全部楼层
请问楼主的代码是可以实现点云数据的三角化吗?那么能不能直接将三角化后的三维重建数据保存成STL文件呢?谢谢
回复 支持 反对

使用道具 举报

发表于 2014-6-11 10:16:57 | 显示全部楼层
楼主,我想问下你是怎么修改的啊,我的显示出现了问题:PCLVisualizer::addPolygonMesh:No polygons。楼主,你后面是如何显示成功的,求指导。
回复 支持 反对

使用道具 举报

本版积分规则

QQ|小黑屋|点云技术相关产学研社区 ( 陕ICP备13001629号 )

GMT+8, 2024-4-29 09:25 , Processed in 3.390657 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表