为开源点云库PCL贡献代码(一)

点云(Point Cloud)

接触三维重建或者立体视觉相关问题的时候,点云是第一个需要掌握的概念。
简单来讲,点云就是多唯空间中的点的集合,一般而言,指的是三维空间中的点集。在PCL中,点云被表示成一种数据结构。我们用X-Y-Z三维来表示一个采样曲面的几何坐标。如下,当我们对其表面着色后,点云变为4唯的。

Left

获取点云的方式有很多:比如一些硬件传感器(如立体相机,3D扫描仪,TOF相机),或者通过程序计算,比如SFM算法
很高兴的是PCL原生支持OpenNI从而能够很好的直接处理深度相机( PrimeSensor 3D cameras, Microsoft KinectAsus XTionPRO)的数据。另外说明一下,Kinect和华硕的这款本质上都是采用PrimeSense的结构光技术的深度相机。OpenNI现在也由Primesense维护,而Primesense已被苹果收购。有时间对这些硬件和产业,包括眼镜和深度相机也做一下归纳吧。

PCL(Point Cloud Library)简介

点云库Point Cloud Library (or PCL) 是一个大型的用于处理2D/3D图像和点云的开源项目。它实现了立体视觉领域众多的前沿算法,包括滤波,特征提取,表面重建,相机标定,模型拟合,分割,可视化等许多功能,如图。

PCL: A graph of code libraries

PCL项目遵循 3-clause BSD license 协议,能同时用于学术和商业用途。它也是跨平台的,目前支持五大平台(Linux,MacOS, Windows, 和 Android/iOS. )
目前,与立体视觉结合最紧密的研究方向当属机器人了,PCL与机器人操作系统ROS集成良好,并已经有很好的实际应用。SLAM移动机器人导航,尤其是VisualSLAM领域的蓬勃发展,VR/AR的不断发酵,三维重建等的发展会更加促进立体视觉的发展,PCL的重要性不言而喻。

PCL代码风格良好,全部由C++编写,其中的矩阵操作使用了线性代数函数库Eigen。此外,PCL也支持并行化,如OpenMP和Intel Threading Building Blocks。在PCL的所有模块中,数据的传递都是通过Boost的智能指针Share Pointer,如此可以减少系统中数据的多余复制。

再来说下PCL的各个模块,它们可以独立编译,独立运行。它的一般工作模式如下:

  • 新建一个处理类(Project)(比如,filter,feature estimation,segmentation等)
  • 使用setInputCloud将点云(Point Cloud)数据输入到处理模块中
  • 设定一些必要的参数
  • 调用compute或者其他的函数如(filter,segment等)得到输出

主要模块包括:

  • libpcl_filter: 功能包括將采样(downsampling),例外点去除,索引提取,投影等
  • libpcl_features: 实现了许多3D特征,比如表面法向量和曲率,边缘点估计,不变矩(moment invariants),主曲率,PFH和FPFH(Fast point feature histogram)描述子,旋转图像(spin image),积分图像(integral image),NARF描述符,RIFT,RSD,VFH,基于强度数据的SIFT算法等。
    后面我觉得也会有一些采用深度学习方法训练特征的算法加入到PCL中。
  • libpcl_io: I/O操作的函数,如读写点云数据PCD(point cloud data)的函数
  • libpcl_segmentation: 实现了聚类提取,或者为某些参数模型通过采样一致的方法提供模型拟合等
  • libpcl_surface: 实现了表面重建的一些算法,如meshing,圖包算法(convex hull)和移动最小二乘(moving least squares)等
  • libpcl_registration: ICP匹配算法等
  • libpcl_keypoints: 预处理的一些算法,对关键点预处理方便后续提取特征描述符
  • libpcl_range_image:深度图(range image)的建立函数等

为了保证操作的正确性,上述每个库中的方法和类都提供了单元和回归测试,如果添加的新功能或者某个修改没有通过测试,该作者会收到通知。

PCL的设计哲学

Perception Processing Graphs
这个道理的潜在认为对点云处理的各个模块可以认为是独立编译的一部分,通过调整参数可以分别应对某一类问题。
由于点云数据通常比较大,为了避免不必要的拷贝和关键程序的序列化,PCL创建了nodelets,一种可以动态加载的插件模式。

可视化

PCL基于VTK实现了自己的可视化库,从而方便用户快速查看自己的模型,不管这种模型是通过参数公式设定还是从点云而来。
可视化库也提供了渲染(rendering)以及处理PCD的方法等。使用可视化库的一般流程如下:

using namespace pcl visualization;
  PCLVisualizer p (“Test”);
PointCloudColorHandlerRandom handler (cloud);
p.addPointCloud (cloud, handler, ”cloud random”);
p.spin ();
p.removePointCloud (”cloud random”);
PointCloudGeometryHandlerSurfaceNormal handler2 (cloud);
p.addPointCloud (cloud, handler2, ”cloud random”);
p.spin ();

贡献代码的好处

使用开源库的用户会遇到两个问题:

  • 有新的需求,而开源库还没有更新
  • 功能有Bug,但是没有fix
    这个时候如果你完成了上述工作,那么别人也许会从中受益。换个角度,如果每个人碰到这种情况都采取这种处理方式呢?
    总而言之,开源项目,就是大家合作一起做一件事,我为人人,人人为我。
    再引用Linus法则“given enough eyeballs, all bugs are shallow”,贡献你的代码给大家阅读,你的代码会面临挑战,会促使你不断提高自己的代码质量。还有,程序员的荣誉和成就感,这些也是参与其中才能体会到的。
    当然,每个人的情况不一样,就不一一列举啦。

Next 将会介绍如何着手贡献一个具体的功能源码以及介绍PCL的源码风格

参考文献

3D is here: Point Cloud Library (PCL)
pointclouds.org

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容