通常の統合・ダイアグラムの推定値を使用します
図は、この方法は、曇点を命じのみ適用可能であることに注意し、法線点群を使用して積分計算を命じました。
#include <pcl/io/io.h>
#include <pcl/io/pcd_io.h>
#include <pcl/features/integral_image_normal.h>
#include <pcl/visualization/cloud_viewer.h>
int
main ()
{
//加载点云
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>);
pcl::io::loadPCDFile ("..\\..\\source\\table_scene_mug_stereo_textured.pcd", *cloud);
//估计法线
pcl::PointCloud<pcl::Normal>::Ptr normals (new pcl::PointCloud<pcl::Normal>);
pcl::IntegralImageNormalEstimation<pcl::PointXYZ, pcl::Normal> ne;
/*
三种法线估计方法
COVARIANCE_MATRIX 模式从具体某个点的局部邻域的协方差矩阵创建9个积分,来计算这个点的法线
AVERAGE_3D_GRADIENT 模式创建6个积分图来计算水平方向和垂直方向的平滑后的三维梯度并使用两个 梯度间的向量积计算法线
AVERAGE_DEPTH——CHANGE 模式只创建了一个单一的积分图,从而平局深度变化计算法线
*/
ne.setNormalEstimationMethod (ne.AVERAGE_3D_GRADIENT); //设置估算方法
ne.setMaxDepthChangeFactor(0.02f);//最大深度变化系数
ne.setNormalSmoothingSize(10.0f); //优化法线方向时考虑邻域大小
ne.setInputCloud(cloud); //输入点云,必须为有序点云
ne.compute(*normals); //执行法线估计,存储结果到normals
//法线可视化
pcl::visualization::PCLVisualizer viewer("PCL Viewer");
viewer.setBackgroundColor (0.0, 0.0, 0.5);
viewer.addPointCloudNormals<pcl::PointXYZ,pcl::Normal>(cloud, normals);
while (!viewer.wasStopped ())
{
viewer.spinOnce ();
}
return 0;
}
.\normal_estimation_using_integral_images.exe
視点に向かって基本的に同じ法線方向は、図の演算結果に示されるように、デスクトップ・ビューに向かってシーンを表示する、デスクトップ上のデスクトップでのカップの法線に対して平行に表示され、デスクトップ上の通常の設定点とテーブルに垂直ですポイントクラウド自体を取得する際の観点、通常の順序を推定するこの方法の使用は、唯一点群に適用される、障害の曇点は、他の方法を使用することができます。
その中でも、