记录一下学习PCL过程的代码与参考论文,欢迎提出Issue加入更新。
c++
,PCL1.9.0
安装包我放在了共享文件夹点云库PCL1.9.0
在系统路径Path中加入下载的PCL库文件,类似opencv的方法配置,不需要编译。
C:\Program Files\PCL 1.9.0\3rdParty\Boost\lib
C:\Program Files\PCL 1.9.0\3rdParty\FLANN\bin
C:\Program Files\PCL 1.9.0\3rdParty\Qhull\bin
C:\Program Files\PCL 1.9.0\3rdParty\VTK\bin
C:\Program Files\PCL 1.9.0\bin
C:\Program Files\OpenNI2\Lib
C:\Program Files\OpenNI2\Redist
C:\Program Files\OpenNI2\Tools
环境变量配置完之后,运行demo程序会报系统确实.dll的警告,注销后再开软件就可以正常使用。
-
自定义点云
PointCloudBaseOperate::generatePointCloudShow();
-
最近邻搜索
PointCloudBaseOperate::kNeastSearch(); PointCloudBaseOperate::kdTreeFlann();
定义第0个点位目标点,在目标点附近搜寻30个点。
-
可视化
pcl支持直接在viewer窗体上操作,包含ROI选取。
-
滤波、降采样、表面法向量
-
特征点
-
ISS
全称是Intrinsic shape signatures(内部形状特征),参考了论文Intrinsic shape signatures: A shape descriptor for 3D object recognition 中属于特征点定义的一部分,这也是这几天我在看的一篇,后续会发出来总结。
-
Harris
是基于2D的一个拓展,我针对Harris3D做的专门一个分析:Harris角点分析从2D到3D(接口背后的故事系列)
-
SIFT
同样是基于2D的拓展,参考的是这一篇PaperDistinctive image features from scale-invariant keypoints,使用的是图像固有特征的尺度不变性。(未读)
-
-
描述子
描述子定义了如何描述一个点云特征,如直方图,点对特征......常用于配准、识别、分割 。
网络上一篇比较详细的讲解在这里==>OpenNI_tutorial_4:3D_object_recognition(descriptors)
一些主流的点云描述子都有在文中介绍,但有一个PPF的方法没介绍。
PCL提供了PFH、FPFH、SHOT的接口。
PFH的参考文献:Aligning Point Cloud Views using Persistent Feature Histograms
-
深度图
深度图是从图像采集器到实体物体的距离作为像素值。使用2D图像处理后用于段差、平面度的检测。
-
匹配计算Transformation
运用上述介绍的基本操作实现两只外形相同,位置不同兔子的关键点匹配。
-
软件开发(Todo)
目的:分别扫描手机壳的四个边缘,根据特征点匹配组合成一整个。
2、面膜有高度的缺陷
深度图像:
http://www.pclcn.org/study/shownews.php?lang=cn&id=205
1、C2079 “pcl::KdTreeFLANN...param_k_”使用未定义的 struct“flann::SearchParams”
项目需要用到OpenCV和PCL,在分别单独添加现有属性时并不会报错,两个属性添加到统一项目时出现报上述错误。
查找了各种解决方案:比如:包含目录、库目录,代码包含include"···.hpp"等等解决方案,均没有得到解决。
后来发现属性加载要有顺序:这里使用kdtree时,调用的是PCL的库,把pcl属性(.props文件)移除,再重新添加,使其在OpenCV属性文件之前就解决了问题。如果两者直接添加到“附加依赖项”,也应该注意先后顺序。
这里遇到这样的问题,归根结底是PCL库和OpenCV库冲突的问题,两者都包含flann库,至于解决方案,应该有很多博客,以后遇到再搞。