登录

  • 登录
  • 忘记密码?点击找回

注册

  • 获取手机验证码 60
  • 注册

找回密码

  • 获取手机验证码60
  • 找回
毕业论文网 > 毕业论文 > 机械机电类 > 机械工程及自动化 > 正文

基于局部特征统计直方图的三维点云配准算法研究毕业论文

 2020-04-11 05:04  

摘 要

本文借助《信息科学》的一篇文章《a fast and robust local descriptor for 3D point》进行对点云库PCL(point cloud library)的研究和配准算法的研究。在现代人工智能日新月异的今天,对实际物体进行点云提取和分析有重要意义。三维点云数据已经逐渐地应用到许多领域中,如逆向工程、模式识别、工业检测、自主导航、文物保护、虚拟现实、游戏娱乐等[1]。在pcl中配准起到了很重要的作用,因为在点云的构建过程中,我们需要多视角的观察物体,所以点云的配准是不可或缺的步骤。而点云的配准需要特征的描述,而这特征并不是普通的三维特征,而是需要其他坐标的高维特征。

本文主要研究了pcl的c 的一些特征,pcl的特征提取,pcl的配准算法。

本文的研究方法:观察c 的抽象类如何使pcl实现多态性;研究pcl开源性对pcl的影响;创建一个LFSH类,使得它具有通用性;研究pcl的特征提取的目的和作用,并用c 实现上述文章的描述子LFSH(local feature statistics histogram);实现上述文章的配准算法,让它与不同的配准算法进行对比。

研究结果表明:pcl因为其强大的多态性和开源性,在以后关于点云的语言中,能占有一席之地。而本文所探讨的LFSH特征和改进的ICP算法,能够使配准更加高效和稳定。

关键词:pcl;c ;特征;配准

Abstract

The paper makes use of a paper,"a fast and robust local descriptor for 3D point" of "Information Science" to research the point cloud library. Today, with the rapid changes in modern artificial intelligence, it is of great significance to perform point cloud extraction and analysis of actual objects. Three-dimensional point cloud data has been gradually applied to many fields, such as reverse engineering, pattern recognition, industrial detection, autonomous navigation, cultural relics protection, virtual reality, game entertainment, etc. [1].

This paper mainly studies the application of c polymorphism in pcl, the open source of pcl, the description of pcl new class, pcl feature extraction, pcl registration algorithm.

The research method of this article: Observe how the abstract class of c makes pcl polymorphism; Study the influence of pcl open source on pcl; Create a LFSH class, make it universal; Study the purpose and function of pcl feature extraction, and use c Implement the above description of the article LFSH (local feature statistics histogram); implement the above article's registration algorithm and compare it with different registration algorithms. Registration in pcl plays a very important role because in the construction of point clouds, we need to observe objects at multiple viewing angles, so the registration of point clouds is an indispensable step. The registration of point clouds requires the description of features. This feature is not an ordinary three-dimensional feature but a high-dimensional feature that requires other coordinates.

Key Words:pcl;c ;feature;registration

目录

第1章 绪论 2

1.1 pcl的发展历史 2

1.2 pcl的特征 2

1.3 pcl配准 3

第2章 pcl库特点 4

2.1 pcl的c 设计 4

2.2 pcl的c 多态性 4

2.2.1 pcl的c 静态多态 5

2.2.2 pcl的c 动态多态 5

2.3 pcl的开源性 7

2.4 pcl编写一个新类 7

第3章 原型系统算法实现 9

3.1压缩算法 9

3.1.1压缩算法简介 9

3.1.2研究论文压缩算法 10

3.2 特征描述 11

3.2.1 特征描述现状 11

3.2.2 新颖的局部特征描述器 12

3.3 kd树算法 14

3.4 论文原型部分算法 17

3.5去除离群值算法 17

3.5.1 去除离群值算法简介 17

3.5.2 去除离群值算法原理 17

3.6 配准算法 19

3.6.1 配准算法的分类 19

3.6.2 精配准算法ICP的解释 20

3.6.3 精配准算法ICP的函数表达 20

3.6.4 精配准算法LM-ICP的函数表达 21

3.7算法总结 22

第4章 原型系统算法表现 23

4.1描述性 24

4.2稳定性 25

4.3时间效率 26

参考文献 28

致 谢 29

第1章 绪论

点云库(pcl)是一个开放的平台,它可以对点云和二维三维图像进行处理。它包含很多优秀的算法,例如过滤,连接等等。本文将探讨它的结构,并对它的特征算法和配准算法进行研究。

1.1 pcl的发展历史

pcl原先是由一个机器人公司Willow Garage开发。它最初的版本是1.0,在2011年5月时公布。它的最新版本是pcl 1.8.1,在2017年8月8日公布。 它借助了一些系统:Boost, Qhull, VTK和一些第三方库:FLANN, Eigen, CMinpack, OpenNI)

它是一个开源库,这样会有无穷无尽的人来贡献他们的力量,为修复库的漏洞,开发新的算法和编写新的教程。

1.2 pcl的特征

点云,最原始的定义是一个集合,其元素为n维向量。而在实际应用中,因为点云是从观察设备,比如摄像机,扫描仪等等对物品的外部实体进行分析所得到坐标。所以向量的维数一般为2或3.而点云还能有其他特征,例如强度,用RGB代表的颜色,法线,这会让每一个点的维数增加。

然而一切事物都是在变化的。如果我们要观察这种变化,就要抓取它的特征虽然点云的维数能达到很高,但正常的笛卡尔坐标因为很多原因不能满足点云特征的要求。这些要求如下:

  1. 在刚性变换后,特征的描述不变。具体的说是代表特征的向量或者图表的具体数字不变。
  2. 能应对各种密度。一般地说点云密度不会改变其描述性。(描述性应这样理解,比如一个兔子点云,扫描分辨率小或大,虽然特征的向量或图表有所改变,但它的描述性——它是一个兔子,它有两个长耳朵等等不会改变。
  3. 能随机误差下保证稳定性。

在本文第三章,我们将进一步研究pcl特征。

1.3 pcl配准

点云配准的定义是将不同参考系中收集到的点云数据,转化为同一参考系的

点云数据。这样做的原因是因为无论哪一种获取点云的方式都只能获得部分的点云数据,而且每次获得在不同的坐标系,这使计算机无法对物体有完整的理解。[2]

将点云从一个坐标系转化到另一个坐标系时,本文讨论的皆为刚性转换,即原点云之间距离不变的转换。原先坐标系的称为源点云,转换后的称为转换点云,与之匹配的称为目标点云。判断一个配准算法是否优秀,归根到底是最小化对应点,即转换点云和目标之间的距离总和大小。这将在第三章讨论。

第2章 pcl库特点

2.1 pcl的c 设计

Pcl是用c 编程的开源程序库,分析pcl的特点,很大程度上就是分析c

的特点。

C 是一个基于c语言的继承语言,它可以面向过程设计,也可以面向对象设计。面向过程,即将程序实现的功能分割成一个一个小步骤,然后每个小步骤进行函数设计。Pcl的程序设计就是面向过程设计,但它面向过程中的每一个步骤使用了对象设计,也就是面向对象的设计,如下面例程1

1 FeatureEstimationT fest;

2 fest.setRadiusSearch (0.025);

3 fest.setInputCloud (object);

4 fest.setInputNormals (object);

5 fest.computefeature (*object_features);

行1创建了一个特征估计类fest,通过调用其成员函数对其参数进行确定,输出结果。即行2设置搜索半径,行3输入点云数据(object),行4输入点云法线,行5输出计算结果。而总程序有很多这样的类组成。

2.2 pcl的c 多态性

所谓c 的多态性,就是相同类型对象或相同名称的函数接受不同的消息时,有不同的作用。C 的多态分为静态多态和动态多态。静态多态是编译时多态,即相同名称的函数接受不同的参数时,有不同的作用;还有函数模板,它可以统一地接收不同类型的变量。动态多态是运行时多态,具体实现使用virtual关键字。它是面向对象语言的重要特征。没有它计算机语言只能称为基于对象的语言

2.2.1 pcl的c 静态多态

以pcl的一个头文件feature.h为例,对pcl的静态多态进行分析。

Feature.h的一个例程2如下:

template lt;typename PointInT, typename PointOutTgt;

静态多态使用template关键字,使类或函数的参数类型可以随着自己的输入而改变。如例程2的PointInT, PointOutT,代表的是输入和输出点云。这样是因为输入点云,输出点云的类型一般不同。输入点云一般是3维点云向量,输出点云一般是几十维几百维向量。把它们用typename区分后,这样编写函数时,有极大的便利性,在例程2 Feature类的成员函数的声明,例程3如下:

setSearchSurface (const PointCloudInConstPtr amp;cloud)

compute (PointCloudOut amp;output);

在例程3中,配置函数的类型和输出函数的类型分离,这使开发者编写程序时能减少时间关注类型的分类上。

还一种静态多态是函数重载,即同名的函数可以存在不同的参数输入,实现同一功能。如下在Feature类里面的一些成员函数,如例程4

inline int

searchForNeighbors (size_t index, double parameter,std::vectorlt;intgt; amp;indices, std::vectorlt;floatgt; amp;distances)

inline int

searchForNeighbors (const PointCloudIn amp;cloud, size_t index, double parameter,std::vectorlt;intgt; amp;indices, std::vectorlt;floatgt; amp;distances) const

在例程4中,两个同名的函数中,一个不需要输入点云(const PointCloudIn amp;cloud),一个需要输入点云。这个多态性,使我们更方便的使用searchForNeighbors这个函数。因为在Feature类里面,会包含源点云,所以我们会使用searchForNeighbors执行搜索邻近点的功能时,不可以输入点云,让该函数默认为源点云,也可以根据需要,比如让源点云的子点云执行搜索邻近点的功能。这样同一个功能就能用同一个函数实现,即使有不同的参数。

2.2.2 pcl的c 动态多态

C 有一种函数为纯虚函数写法如下:

virtual lt;typenamegt;

f(x) = 0;

当一个类至少有一个纯虚函数时为抽象类。抽象类不能创建对象,它的作用是产生派生类。

以上是毕业论文大纲或资料介绍,该课题完整毕业论文、开题报告、任务书、程序设计、图纸设计等资料请添加微信获取,微信号:bysjorg。

相关图片展示:

您需要先支付 80元 才能查看全部内容!立即支付

企业微信

Copyright © 2010-2022 毕业论文网 站点地图