点云技术相关产学研社区

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

扫一扫,访问微社区

查看: 6453|回复: 8

MarchingCubesGreedy算法重建问题

[复制链接]
发表于 2013-3-2 19:02:50 | 显示全部楼层 |阅读模式
  1. int
  2. main (int argc, char** argv)   
  3. {   
  4.    // Load input file into a PointCloud<T> with an appropriate type
  5.   pcl::PointCloud<pcl::PointXYZ>::Ptr mls_points (new pcl::PointCloud<pcl::PointXYZ>);//定义点云对象指针
  6.   sensor_msgs::PointCloud2 cloud_blob;
  7.   pcl::io::loadPCDFile ("table_scene_lms400_downsampled.pcd", cloud_blob);//加载PCD文件
  8.   pcl::fromROSMsg (cloud_blob, * mls_points);//数据最终存储在mls_points中
  9.   //* the data should be available in cloud

  10.     // Normal estimation*
  11.         pcl::search::KdTree<pcl::PointXYZ>::Ptr tree (new pcl::search::KdTree<pcl::PointXYZ>);//定义kd-tree指针
  12.     tree->setInputCloud(mls_points);//用mls_points构建tree对象

  13.     pcl::NormalEstimation<pcl::PointXYZ, pcl::Normal> n;//法线估计对象
  14.     n.setInputCloud(mls_points);//为法线估计对象设置输入点云
  15.     n.setSearchMethod(tree);//设置搜索方式
  16.     n.setKSearch(20);//设置k搜索的k值为20

  17.     pcl::PointCloud<pcl::Normal>::Ptr normals(new pcl::PointCloud<pcl::Normal>);//存储估计的法线
  18.     n.compute(*normals);//估计法线存储结果到normals中
  19.     //以上预先估计出数据中每个点的法线
  20.     //* normals should not contain the point normals + surface curvatures

  21.     // Concatenate the XYZ and normal fields*
  22.         pcl::PointCloud<pcl::PointNormal>::Ptr cloud_with_normals (new pcl::PointCloud<pcl::PointNormal>);
  23.     concatenateFields(* mls_points, * normals, * cloud_with_normals);//存储有向点云
  24.     //* cloud_with_normals = cloud + normals

  25.     // Create search tree*
  26.         pcl::search::KdTree<pcl::PointNormal>::Ptr tree2 (new pcl::search::KdTree<pcl::PointNormal>);//定义搜索树对象
  27.     tree2->setInputCloud(cloud_with_normals);//利用点云构建搜索树

  28.     // Init objects
  29.     pcl::PolygonMesh mesh;//网格模型存储位置??????????
  30.     pcl::MarchingCubesGreedy<pcl::PointNormal> mc;//定义MC类对象 mc

  31.     // Set parameters
  32.         double leafSize = 0.01;//体素大小
  33.         float isoLevel = 0.5;//等值面提取时所使用的水平值
  34.     mc.setInputCloud(cloud_with_normals);//设置输入点云为有向点云
  35.     mc.setSearchMethod(tree2);//设置搜索方式
  36.     mc.setLeafSize(leafSize);//设置体素大小0.01
  37.     mc.setIsoLevel(isoLevel);//设置等值面提取时所使用的水平值0.5

  38.     // Reconstruct
  39.     mc.reconstruct (mesh);//执行重建
  40.         std::cout << "MCGreedy reconstruct done"<<std::endl;
  41. }
复制代码
请问这个代码最后的图像输出该怎么写?呵呵
回复

使用道具 举报

发表于 2013-3-2 19:15:04 | 显示全部楼层
pcl::visualization:CLVisualizer类应该可以对类型pcl:olygonMesh 的数据进行可视化,
bool  addPolygonMesh (const pcl:olygonMesh &polymesh, const std::string &id="polygon", int viewport=0)
祝好运!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-3-2 19:57:07 | 显示全部楼层
谢谢~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-3-2 20:22:39 | 显示全部楼层
谢谢~
回复 支持 反对

使用道具 举报

发表于 2013-3-4 09:00:56 | 显示全部楼层
楼上“mypcl”评论的应该是这样的,
pcl::visualization:: PCLVisualizer类应该可以对类型pcl::polygonMesh 的数据进行可视化,
bool  addPolygonMesh (const pcl::polygonMesh &polymesh, const std::string &id="polygon", int viewport=0)
上面的笑脸符号,主要是论坛后台根据符号自动解译出来的,现在好了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-3-5 20:29:03 | 显示全部楼层
继续请教关于MC算法中体素大小及等值面值的大小

MC算法中,体素的大小跟等值面值的大小对重建有什么影响?应该怎么取值?
谢谢大家
回复 支持 反对

使用道具 举报

发表于 2013-3-5 20:34:04 | 显示全部楼层
xiaoyinload 发表于 2013-3-5 20:29
继续请教关于MC算法中体素大小及等值面值的大小

MC算法中,体素的大小跟等值面值的大小对重建有什么影响? ...

没研究mc算法,但就字面意思,体素大了重建的快,并且粗糙吧,反之亦然
等值面是个什么概念就不清楚了,你研究下,给大家普及下吧
祝好运!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-3-12 09:50:37 | 显示全部楼层
mypcl 发表于 2013-3-2 19:15
pcl::visualization:CLVisualizer类应该可以对类型pcllygonMesh 的数据进行可视化,
bool  addPolygo ...

你好,我想对这个重构的三维物体进行渲染,应该如何进行啊?
回复 支持 反对

使用道具 举报

发表于 2013-3-13 08:18:06 | 显示全部楼层
xiaoyinload 发表于 2013-3-12 09:50
你好,我想对这个重构的三维物体进行渲染,应该如何进行啊?

恩,我不知道你的渲染是什么概念,就是在图形窗口3D的现实吗?

如果是那就用我说的那个类PCLVisualizer可以进行渲染显示了。主要是你重建后获取的数据格式是polygonmesh,刚好它也支持。

祝好运,多多分享!!不同的话题,新开贴!!
回复 支持 反对

使用道具 举报

本版积分规则

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

GMT+8, 2024-6-9 15:01 , Processed in 1.962217 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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