如何使用PCL将XYZRGB点云转换为彩色mesh模型
最近完成了一个使用RGBD传感器,构建物体模型的小demo。其中有点难的最后一步是如何将获得的物体点云变成彩色mesh模型。效果图如下(从点云变成彩色mesh):
其实整体的步骤可以总结如下:
[1]计算点云法向,并将法向量指向内部
[2]将点云法向信息叠加在原点云上,生成pcl::PointXYZRGBNormal格式的点云
[3]使用泊松重建(poisson reconstruction)建立无颜色mesh。
[4]使用kdtree将原点云的信息映射在无颜色mesh上,并生成彩色mesh。
下面具体介绍一下各步骤:
[1]计算点云法向
使用pcl::NormalEstimationOMP
设定法向估算对象。这里使用的算法实质上是主成分分析(PCA)。先设定每个点周围选取的临近点数和搜索半径,并用临近点建立一个协方差矩阵C。
这里K指的是离点P的最近的K个点,是最近邻的中心。后面的式子就是特征值和特征向量了。而C的最小特征值对应的特征向量就是该点的法向量。
但是泊松重建需要的是指向物体内部的法向量,所以我们还要将向量反转过来。
[2]将点云法向信息叠加在原点云上,生成pcl::PointXYZRGBNormal格式的点云
这一步比较简单,使用的是pcl::concatenateFields
,可以将两种不同格式的点云组合起来。
[3]使用泊松重建(poisson reconstruction)建立无颜色mesh。
泊松重建的原理比较复杂,我也没有完全弄清楚。先留下这个坑,以后清楚了再填。大致的算法如下:
1、为点云设定八叉树搜索索引,使得每个采样点都落在深度为D的叶节点。
2、设定函数空间。
3、创建向量场。这一步我理解就是用到了之前算出的法向量。
4、求解泊松方程。
5、提取等值面,从而得到重建表面。
pcl中对应的是pcl::Poisson
可以设定泊松处理对象。但是泊松重建后生成的mesh是没有RGB信息的。目前,PCL官方也说泊松重建不带有颜色信息,需要我们自己添加。
[4]使用kdtree将原点云的信息映射在无颜色mesh上,并生成彩色mesh。
这一步在网上基本找不到信息,所以我研究了一下。最终