一、点云(高程渲染。CC计算的法向量,Z分量渲染)
二、PCL计算法向量
下面是PCL计算法向量的代码(点类型自己设置的)
计算出的法向量有正有负
void pclNormalEstimation(pcl::PointCloud<pcl::Normal>::Ptr normalPC,
pcl::PointCloud<rPointType>::Ptr inPC, const double &kdRadius)
{
normalPC->resize(inPC->points.size());
normalPC->width = 1;
normalPC->height = inPC->points.size();
normalPC->is_dense = false;
//法向估计
pcl::NormalEstimation<rPointType, pcl::Normal> ne;
ne.setInputCloud(inPC);
//KDtree 搜索方法
pcl::search::KdTree<rPointType>::Ptr kdPC(new pcl::search::KdTree<rPointType>());
ne.setSearchMethod(kdPC);
//设置邻域
ne.setRadiusSearch(kdRadius);
//计算
ne.compute(*normalPC);
}
上面的代码是木有问题的
三、问题
于是把Z方向的分量绝对值作为属性值进行渲染,结果却不对(如下图)。
原因之一是:点坐标太大或太小。pcl::Normal是float类型。
四、解决方法
检查点云的相对坐标
不要盲目相信点云头文件的 Offset