3D开源点库(PointCloud Library)介绍

          Point Clouds Library (PCL) 是由Radu Bogdan等人开发的一个开源项目,其最初的动机是专注于点云感知的应用,并集成大量高级的用语3D感知的方法,适用于3 Building Blcoks,这个库实现的算法包括:Filtering, feature estimation, surface reconstruction, registration, model fitting and segmentation. PCL库还支持ROS(Robot operating system).

         PCL库是一个采用模版化的现代c++语言实现,并在底层充分利用了SSE优化指令,算法中采用了大量的开源库,包括Eigen(一个用于线性代数的开源模版化库)、OPenMP(可以参考网站:http://openmp.org)、Intel公司开发的用于多核并行运算的TBB库(Threading Building Blocks)、以及FLANN(Fast K-Nearest for Approximate Nearest Neighbors),除此以外,在三维展示方面,PCL库引入了VTK(Visualization Toolkit)。

        PCL设计的时候考虑到了开发的简单和方便性,将这些函数库分别分成更小的块进行编译,主要包括如下模块:

       (1)libpcl_filters:实现数据滤波,如向下降采样、异常数据处理、indices extraction,投影等。

       (2)libpcl_feature: 该库包含大量的3D特征,如surface normals, curvatures, boundary point estimation, moment invariants, principal curvatures, PFH 和FPFH descriptors, RIFT, RSD, VFH, SIFHT等。

      (3)libpcl_io:主要用于输入输出。

      (4)libpcl_segmentation:实现cluster extraction, model fitting, polygonal prism extraction.

         另外,还包括Libpcl_surface, libpcl_registration, libpcl_keypoints, libpcl_range_image等模块,更多信息请参考官网:http://www.pointclouds.org/

         为了使用PCL,首先需要下载库,通过官网下载对应的版本,选择ALL-IN-ONE的安装包,该包包含了PCL中所使用的全部第三方编译包。下载完成后直接安装,路径可以根据自己的需要进行安装。安装完成后:将对应的库文件添加到环境变量中(如果要用到第三方的库,则要将第三方的库文件也添加到环境变量中):

      接着,在开发环境IDE中添加对应的路径,本文是在VS2008中,“工具—选项–项目与解决方案”:

        1) 可执行文件bin的配置

 

         2) 包含文件include的配置

        3)库文件lib的配置

            特别提示,上面的配置只是举例,开发人员在配置的时候,一定要将所有的对应文件都进行配置,即包括PCL库和所有的第三方的库的对应文件的配置。

           下面是一个简单的使用PCL库的例子(在项目属性的附加依赖性里添加使用的lib文件,如果不知道是哪个lib文件,则将所有的lib文件都添加进行),包括:

debug: 
pcl_apps_debug.lib
pcl_common_debug.lib
pcl_features_debug.lib
pcl_filters_debug.lib
pcl_io_debug.lib
pcl_io_ply_debug.lib
pcl_kdtree_debug.lib
pcl_keypoints_debug.lib
pcl_octree_debug.lib
pcl_range_image_border_extractor_debug.lib
pcl_registration_debug.lib
pcl_sample_consensus_debug.lib
pcl_search_debug.lib
pcl_segmentation_debug.lib
pcl_surface_debug.lib
pcl_tracking_debug.lib
pcl_visualization_debug.lib

Release: 
pcl_apps_release.lib
pcl_common_release.lib
pcl_features_release.lib
pcl_filters_release.lib
pcl_io_release.lib
pcl_io_ply_release.lib
pcl_kdtree_release.lib
pcl_keypoints_release.lib
pcl_octree_release.lib
pcl_range_image_border_extractor_release.lib
pcl_registration_release.lib
pcl_sample_consensus_release.lib
pcl_search_release.lib
pcl_segmentation_release.lib
pcl_surface_release.lib
pcl_tracking_release.lib
pcl_visualization_release.lib

          程序代码如下:

#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>

using namespace std;

int main( int argc, char* argv[])
{
	pcl::PointCloud<pcl::PointXYZ> cloud;
	cloud.width = 5;
	cloud.height = 1;
	cloud.is_dense = false;
	cloud.points.resize(cloud.height*cloud.width);

	for ( size_t i=0; i<cloud.points.size(); ++i )
	{
		cloud.points[i].x = 1024* rand()/(RAND_MAX+1.0f);
		cloud.points[i].y = 1024* rand()/(RAND_MAX+1.0f);
		cloud.points[i].z = 1024* rand()/(RAND_MAX+1.0f);
	}
	pcl::io::savePCDFileASCII("test_pcd.pcd",cloud);
	std::cerr<<"Saved"<< cloud.points.size()<<" data points to test_pcd.pcd."<<std::endl;
	for ( size_t i=0; i<cloud.points.size(); ++i )
	{
		std::cerr<<"  cloud.points[i].x "<<cloud.points[i].x<<endl<<"  cloud.points[i].yx "<<cloud.points[i].y<<endl<<"  cloud.points[i].z "<<cloud.points[i].z<<endl;
	}
	char c= (char)getchar();
	
	return 1;

}

          执行结果如下图:


 

 

 

 

 

        

转载自:https://blog.csdn.net/kezunhai/article/details/9815079

You may also like...