使用积分图进行法线估计

来源:互联网 发布:慧莫森软件科技 编辑:程序博客网 时间:2024/06/05 18:07

使用积分图(integral image)进行法线估计,这种方法仅适用于有序点云图,无序点云图需用其他方法。

#include<iostream>#include<pcl/io/pcd_io.h>#include<pcl/visualization/cloud_viewer.h>#include<pcl/features/integral_image_normal.h>int main(){//该方法只适用于有序点云pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);pcl::io::loadPCDFile("table_scene_mug_stereo_textured.pcd", *cloud);pcl::visualization::CloudViewer viewer_cloud("pcl viewer");viewer_cloud.showCloud(cloud);system("pause");// estimate normalspcl::PointCloud<pcl::Normal>::Ptr normals(new pcl::PointCloud<pcl::Normal>);pcl::IntegralImageNormalEstimation<pcl::PointXYZ, pcl::Normal> ne;ne.setNormalEstimationMethod(ne.AVERAGE_3D_GRADIENT);//设置估计方法//法线估计方法//COVARIANCE_MATRIX模式从具体某个点的局部邻域的协方差矩阵创建9个积分图,来计算这个点的法线//AVERAGE_3D_GRADIENT模式创建了6个积分图来计算水平和垂直方向的平滑后的三维梯度,并使用两个梯度间的向量积计算法线//AVERAGE_DEPTH_CHANGE模式只创建了一个单一的积分图,并从平均深度变化计算法线ne.setMaxDepthChangeFactor(0.02f);//最大深度变化系数ne.setNormalSmoothingSize(10.0f);//优化法线方向时考虑邻域大小ne.setInputCloud(cloud);//输入点云,必须为有序点云ne.compute(*normals);//执行法线估计存储结果到normalspcl::visualization::PCLVisualizer viewer("pcl viewer");viewer.setBackgroundColor(0.0, 0.0, 0.5);viewer.addPointCloudNormals<pcl::PointXYZ, pcl::Normal>(cloud, normals);//system("pause");while (!viewer.wasStopped()){viewer.spinOnce();}return 0;}

程序请具体见:http://download.csdn.net/detail/zpp13hao1/9823839(里面包含pcd文件、cmake文件等)

0 0
原创粉丝点击