PCL点云处理实践(三):点云的曲面重建、GUI显示

曲面重建

曲面重建可以为点云构建光滑的表面。这里介绍快速三角化方法和Poisson方法。

快速三角化

贪婪投影三角化算法的步骤是先将有向点云投影到某一局部二维坐标平面内,再在坐标平面内进行平面内的三角化,再根据平面内三位点的拓扑连接关系获得一个三角网格曲面模型。

Poisson算法

Poisson算法可以进行闭包点云的曲面重建。关于Poisson算法的具体实现,可以参见这里

GUI显示

Qt是跨平台C++图形用户界面应用程序开发框架。PCL包含了对Qt4、Qt5的支持。因此如果我们有构建图形化程序的需求的话,不妨使用Qt。

编译PCL的Qt组件

PCL的Qt组件是QVTKWidget。不同版本的Qt对应的组件是不同的,因此应仔细查看PCL的编译选项。

使用方法

PCL在Qt Designer中提供了一个QVTKWidget组件,我们可以使用它来将点云显示窗口嵌入我们的Qt GUI程序中。
在Designer中添加QVTKWidget(这里为qvtkWidget)后,通过以下代码来显示点云。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer;
pcl::PointCloud<PointT>::Ptr cloud;

//此处读入点云数据...

//关联viewer与qvtkWidget
viewer.reset (new pcl::visualization::PCLVisualizer ("viewer", false));
ui->qvtkWidget->SetRenderWindow (viewer->getRenderWindow ());
viewer->setupInteractor (ui->qvtkWidget->GetInteractor (), ui->qvtkWidget->GetRenderWindow ());

//将cloud添加到viewer
viewer->addPointCloud (cloud, "cloud");
viewer->resetCamera ();
ui->qvtkWidget->update ();

下面是PCL官方提供的一个示例:
PCL Qt程序
点击这里查看这个示例的代码。

点云测量

周长测量

使用Graham算法可以测量周长。参考:https://github.com/kartikkukreja/blog-codes/blob/master/src/Graham%20Scan%20Convex%20Hull.cpp