点云技术相关产学研社区

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

扫一扫,访问微社区

查看: 14613|回复: 18

有关泊松重建的参数问题

[复制链接]
发表于 2014-7-2 13:42:44 | 显示全部楼层 |阅读模式
如图,该怎么调整泊松重构的参数,使它达到和贪婪三角化效果类似的结果,谢谢!下面是代码:
Poisson<PointNormal> poisson;
poisson.setConfidence (false);
poisson.setManifold (true);
poisson.setOutputPolygons(true);
poisson.setDepth(12);
poisson.setSolverDivide (7);
poisson.setSamplesPerNode (5);
poisson.setInputCloud(cloud_smoothed_normals);

本帖子中包含更多资源

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

x
回复

使用道具 举报

发表于 2014-7-3 21:47:32 | 显示全部楼层
你好,你那个小兔子的数据能发我一个吗
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-4 11:03:07 | 显示全部楼层
辉辉●加油 发表于 2014-7-3 21:47
你好,你那个小兔子的数据能发我一个吗

邮箱呢?
回复 支持 反对

使用道具 举报

发表于 2014-7-26 22:27:29 | 显示全部楼层
本帖最后由 FeelweeL 于 2014-7-27 15:40 编辑

泊松曲面重构得到的就是三角网格,得不到曲面模型吧,感觉是不是应该分细一点,效果可能好一点。。。另外,你有没考虑过曲面重构的精度问题:)
回复 支持 反对

使用道具 举报

发表于 2014-8-4 17:27:14 | 显示全部楼层
把samplespernode的值设置小些 应该就会OK
回复 支持 反对

使用道具 举报

发表于 2014-10-4 21:58:53 | 显示全部楼层
你好,请问你能给我发份完整的代码吗?我刚学PCL。。。
回复 支持 反对

使用道具 举报

发表于 2014-12-24 21:06:23 | 显示全部楼层
你好!能给我发一份完整的代码吗?谢谢!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-8 17:28:28 | 显示全部楼层
zt19920302 发表于 2014-12-24 21:06
你好!能给我发一份完整的代码吗?谢谢!



        if (cFileDialog.DoModal() == IDOK)
        {
                /////////////////////////////////////////////////////////////////////////////
                //文档名称
                std::string filename;
                filename = cFileDialog.GetPathName();

                //reset data
                this->binary_blob.reset();
                binary_blob = sensor_msgs::PointCloud2::Ptr (new sensor_msgs::PointCloud2);

                // read new data
                //*.ply文件
                pcl::PLYReader ply_reader;
                ply_reader.read (filename, *binary_blob);

////////////////   三角化   ////////////////////////////////////////////////////////////////////////
                pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>);       //定义点云对象指针
                sensor_msgs::PointCloud2 cloud_blob;
                pcl::fromROSMsg (*binary_blob, *cloud);                                               //*数据最终存储在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>);//定义KD树指针
                tree->setInputCloud (cloud);                                                          //用cloud构建tree对象
                n.setInputCloud (cloud);                                                              //为法线估计对象设置输入点云
                n.setSearchMethod (tree);                                                             //设置搜索方法
                n.setKSearch (20);                                                                    //设置K搜索的K值为20
                n.compute (*normals);                                                                 //估计法线存储结果到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_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);//设置连接点之间的最大距离(即为三角形最大边长)为0.025
               
                // Set typical values for the parameters,设置各参数特征值
                gp3.setMu (2.5);                                    //设置样本点搜索其邻近点的最远距离为2.5,为了适应点云密度的变化
                gp3.setMaximumNearestNeighbors (100);               //设置样本点可搜索的邻域个数为100
                gp3.setMaximumSurfaceAngle(M_PI/4); // 45 degrees   //设置某点法线方向偏离样本点法线方向的最大角度为45°
                gp3.setMinimumAngle(M_PI/18); // 10 degrees         //设置三角化后得到三角形内角最小角度为10°
                gp3.setMaximumAngle(2*M_PI/3); // 120 degrees       //设置三角化后得到三角形内角最大角度为120°
                gp3.setNormalConsistency(false);                    //设置该参数保证法线朝向一致

                // Get result
                gp3.setInputCloud (cloud_with_normals);//设置输入点云为有向点云cloud_with_normals
                gp3.setSearchMethod (tree2);           //设置搜索方式为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));
                }
////////////////////////////////////////////////////////////////////////////////////////////////////
//                // read new data
//                //*.pcd文件
//                pcl::PCDReader pcd_reader;
//                pcd_reader.read (filename, *binary_blob);
                /*if (pcd_reader.read ((char*)_bstr_t(filename.c_str()), *binary_blob) != 0) //* load the file
                {
                        MessageBox (_T("Couldn't read PCData file!"));
                        return;
                }*/
        }
        if (binary_blob == NULL)
        {
//                MessageBox("Please load PCD file firstly!");
                MessageBox("Please load PLY file firstly!");
                return;
        }
        else
        {
                //其他句柄
                if (pcl::getFieldIndex(*binary_blob, "rgb") > 0)
                {
                        color_Handler = pcl::mfc_visualization::PointCloudColorHandlerRGBField<sensor_msgs::PointCloud2>::Ptr
                                (new pcl::mfc_visualization::PointCloudColorHandlerRGBField<sensor_msgs::PointCloud2> (binary_blob));
                        this->viewer->addPointCloud(binary_blob, color_Handler, sensor_origin, sensor_orientation);
                }
                else
                {
                        xyz_Handler = pcl::mfc_visualization::PointCloudGeometryHandlerXYZ<sensor_msgs::PointCloud2>::Ptr
                                (new pcl::mfc_visualization::PointCloudGeometryHandlerXYZ<sensor_msgs::PointCloud2> (binary_blob));
                        this->viewer->addPointCloud(binary_blob, xyz_Handler, sensor_origin, sensor_orientation);
                }
                //this->viewer->setCameraPose(0.018, 0.018, -4.87, 0.018, 0.018, 0, 0, -1, 0, 0);
                this->viewer->resetCamera();
        }
}
回复 支持 反对

使用道具 举报

发表于 2015-5-12 13:51:14 | 显示全部楼层
lanchho 发表于 2015-3-8 17:28
if (cFileDialog.DoModal() == IDOK)
        {
                /////////////////////////// ...

这个是泊松重建的代码吗?我用三角化处理出现大量空洞,想改泊松试一下
回复 支持 反对

使用道具 举报

发表于 2015-5-20 12:00:46 | 显示全部楼层
亲,求完整代码,邮箱2269590035@qq.com
回复 支持 反对

使用道具 举报

本版积分规则

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

GMT+8, 2024-5-6 05:17 , Processed in 1.317353 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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