CN110097581B - 基于点云配准icp算法构建k-d树的方法 - Google Patents
基于点云配准icp算法构建k-d树的方法 Download PDFInfo
- Publication number
- CN110097581B CN110097581B CN201910350982.XA CN201910350982A CN110097581B CN 110097581 B CN110097581 B CN 110097581B CN 201910350982 A CN201910350982 A CN 201910350982A CN 110097581 B CN110097581 B CN 110097581B
- Authority
- CN
- China
- Prior art keywords
- subspace
- point cloud
- node
- tree
- subspaces
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T7/00—Image analysis
- G06T7/10—Segmentation; Edge detection
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T7/00—Image analysis
- G06T7/30—Determination of transform parameters for the alignment of images, i.e. image registration
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2207/00—Indexing scheme for image analysis or image enhancement
- G06T2207/10—Image acquisition modality
- G06T2207/10028—Range image; Depth image; 3D point clouds
Landscapes
- Engineering & Computer Science (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Image Analysis (AREA)
Abstract
本发明提供的基于点云配准ICP算法构建K‑D树的方法,该方法将点云空间划分为多个子空间,定义存在数据点的子空间为有效子空间,针对有效子空间建立K‑D树,以此来降低点云K‑D树的复杂度,加快硬件构建K‑D树的速度,同时减轻硬件的存储负担。该方法用直接存储方式来存储点云数据,根据子空间坐标直接获取该子空间内所有数据的地址,以此利用硬件并行处理的优势加快最近邻查询,该方法为加速迭代最近点算法的硬件系统提供了解决方案。
Description
技术领域
本发明涉及集成电路设计领域,具体为一种基于点云配准ICP算法构建K-D树的方法。
背景技术
点云是三维空间中一系列点的集合,利用特定设备扫描某物体表面可得到表示该物体表面特征的点云数据。点云中任意一点通常以三维直角坐标系的坐标来表示。基于对点云数据的识别、过滤、配准等操作以完成还原物体三维模型的过程称为三维重建。点云配准是影响三维重建性能的关键步骤。
点云配准是实现将两片点云拼接到同一坐标系的技术,分为粗配准和精配准两步。点云精配准是点云配准中最耗时的环节,也是导致点云配准无法满足实时性场景速度需求的主要因素。由Besl和Mckay于1992年提出的ICP(Iterative Closest Point)算法,是目前实现点云精配准使用最广泛的算法。在ICP算法中,定义一片点云为目标点云T,另一片点云为模型点云M,算法实现将模型点云转换到目标点云所在的坐标系。
ICP算法中查找最近点对的过程是整个ICP算法的速度瓶颈。目前最主流的ICP算法是将目标点云T用K-D树的形式组织,利用K-D树的空间分割特性来加速查找。该方法在软件上已被证明性能极佳,但软件实现受串行处理限制仍无法满足实时场景的速度要求。采用硬件加速ICP算法成为必然,但在硬件上构建K-D树还存在两个问题:
1.现有技术中构建的K-D树,是将目标点云中所有点作为K-D树的节点。其中每输出一个节点都要进行一次排序,且所有节点串行输出。对于数量庞大的点云来说,该过程耗时非常长,且无法利用硬件并行优势来加速;
2.现有技术中采用链表形式来存储K-D树节点,每个节点除了存储该节点的数据以外,还要存储该节点的父子节点的地址,这种间接存储的方式不仅加重了硬件存储的负担,还大大限制了硬件读取数据的速度。
发明内容
针对现有技术中存在的问题,本发明提供一种基于点云配准ICP算法构建K-D树的硬件设计方法,该方法降低了点云K-D树的复杂度,减少了构建K-D树的数据量,提高了硬件构建K-D树的速度,同时减轻了硬件的存储负担,为硬件实现加速迭代最近点算法提供了解决方案。
本发明是通过以下技术方案来实现:
基于点云配准ICP算法构建K-D树的方法,包括以下步骤:
步骤1、根据点云数据的存储位宽,将点云空间划分为多个子空间并定义子空间坐标;
步骤2、为每个子空间分配地址连续的存储空间,以及1bit的有效标志位;
步骤3、读取点云数据,确定每个数据所属的子空间坐标,将该数据存储在该子空间对应的存储空间,同时将该子空间的有效标志位置为1,该子空间为有效子空间;
步骤4、根据有效子空间建立K-D树,K-D树上的叶子节点均为有效子空间的坐标,非叶子节点均为分割面方向划分有效子空间的分割值;
步骤5、存储K-D树信息,每个非叶子节点存储该节点的分割值,并对分割值增加两个比特标志位,分别表示该节点的左右子节点是否为叶节点;每个叶子节点存储该节点值,即子空间的坐标值。
优选的,步骤1中划分多个子空间的方法如下:
获取点云数据在x、y、z三个维度上的存储位宽Nx、Ny、Nz,并根据存储位宽确定每个维度的编码位数nx、ny、nz,根据编码位数nx、ny、nz的二进制码对点云空间的x、y、z维度编码,使x、y、z三个维度分别分成组,将整个点云空间划分为个子空间,每个子空间的坐标为{Sx,Sy,Sz};
其中,满足条件,nx<Nx,ny<Ny,nz<Nz;
Sx为子空间在x维度的坐标,Sy为子空间在y维度的坐标,Sz为子空间在z维度的坐标。
优选的,将存储位宽Nx、Ny和Nz按相同比例缩小后取整得到每个维度的编码位数nx、ny和nz。
优选的,步骤2中分配地址连续的存储空间的方法如下:
S*2k~(S+1)*2k-1
其中,S为子空间的编码,k=Nx+Ny+Nz-nx-ny-nz。
优选的,步骤4中K-D树的建立方法包括以下步骤:
S1、定义所有有效子空间的坐标为一个数据域,从第一层开始,将数据域的子空间坐标在split方向排序,找到中位值,该中位值即为根节点,小于中位值的子空间归为根节点的左数据域,大于等于中位值的子空间归为右数据域;
S2、左数据域和右数据域分别在下一层的split方向排序取中位值,产生当前节点的左子节点和右子节点,重复该步骤,逐层产生分割节点;
S3、当数据域的子空间数目为1时,将该子空间的坐标作为叶子节点输出,当所有子空间的坐标输出后,K-D树建立完成。
优选的,步骤5中存储K-D树信息的方法如下:
令根节点的存储地址为1,任意一节点的左子节点的存储地址为其父节点的地址左移一位,右子节点的存储地址为其父节点的地址左移一位后加1,得到所有节点的存储地址;
每个非叶子节点用nx+ny+nz+2bit存储,其中最高位和次高位比特分别表示该节点的左右子节点是否为叶子节点,其余比特表示该节点的分割值;
每个叶子节点用nx+ny+nz比特来存储,节点值表示有效子空间的坐标。
与现有技术相比,本发明具有以下有益的技术效果:
本发明提供的基于点云配准ICP算法构建K-D树的方法,首先对点云空间进行了分割,并为分割出的子空间分配了地址连续的存储空间。在读入目标点云数据时,确定每个数据点所属的子空间,并将该点存入所属子空间对应的存储空间,通过子空间地址可直接计算出该子空间所以点的存储地址,以此实现了点云数据的直接存储,使得硬件能够并行地读取多个点,解决了现有技术中使用链表存储只能串行读取的问题,有效地提高了硬件读取点云的效率。
同时,定义存在数据点的子空间为有效子空间,构建一棵关联有效子空间的K-D树。本发明通过将对点建树改为对有效子空间建树,将构建K-D树的数据总量从目标点云所有点的数量降低为有效子空间的数量,使得K-D树的节点数量有了数量级上的降低,从而减少了K-D树建树过程中循环的次数,降低了排序时间,显著地提高了K-D树建树的效率。同时,由于K-D树节点数量的降低,本发明也减轻了硬件存储的负担。
利用本发明的K-D树查找近邻时,一次查找可将最近点所在范围锁定为一个或多个子空间,通过子空间的坐标,确定点云数据的存储地址范围,即可利用硬件并行处理的优势,加速查找。
附图说明
图1为本发明方法的流程图;
图2为本发明的子空间坐标定义说明图;
图3为本发明的有效空间标记示意图;
图4为本发明的构建和存储K-D树的示意图;
图5为本发明仿真时采用的点云数据。
具体实施方式
下面结合附图对本发明做进一步的详细说明,所述是对本发明的解释而不是限定。
参阅图1,基于点云配准ICP算法构建K-D树的方法,包括以下步骤:
步骤1、获取点云数据在x、y、z三个维度上的存储位宽Nx、Ny、Nz,根据存储位宽确定每个维度的编码位数nx、ny、nz。
只需满足条件:nx<Nx,ny<Ny,nz<Nz,且nx、ny、nz均为整数。
例如可以将Nx、Ny、Nz按相同比例缩小后取整得到nx、ny、nz。
采用子空间的坐标将空间分割,但每个子空间的坐标值无需在硬件上存储,在硬件上存储nx、ny、nz的值;
若某子空间的状态为0,则代表该子空间无效,不存在点云数据;若为1,代表该子空间有效,即存在点云数据;
S*2k~(S+1)*2k-1
其中,k=Nx+Ny+Nz-nx-ny-nz。在硬件实现上,将S左移k次即可得到该子空间的起始地址;
步骤5、依次读入目标点云数据,确定每一个点对应的子空间坐标Sd,也就是该点落在的子空间,Sd的值可以在读入点云数据时通过拼接运算得到,Sd表达式如下:
Sd={dx,dy,dz},
其中,dx、dy、dz分别是该点x、y、z坐标值的高nx、ny、nz位;将该点存储于Sd对应的存储空间,同时将表T中Sd对应的状态为置为1,表示Sd空间有效,图3为有效空间标记示意图。
步骤6、遍历表T,统计出有效子空间的总数目total,并为每个有效子空间分配存储空间,依次将有效子空间的坐标存入。
步骤7、采用自顶而下的方式对有效子空间构建K-D树,具体在硬件上实现的方法为:
首先,规定点云空间的划分规则;
定义split=0、split=1、split=2分别表示在垂直于x、y、z方向的平面分割,同时定义K-D树的层数和split之间的对应关系;
然后,执行排序找中值操作,用一个堆栈来记录未被排序的子空间编码所在的地址边界,堆栈内的初始数据为{1,total},从树的第一层开始,从堆栈中pop出一组地址边界,对该地址范围内的子空间坐标在split方向上排序,取中位值输出为该层节点,小于该节点值的子空间编码在下一层的split上重新排序找中值,大于等于节点值的子空间编码的存储地址边界被push到堆栈中。逐层产生节点,直到分支建树结束,即输出叶节点。当一条分支完成后,从堆栈中pop出一组数组边界,开始下一条分支的节点输出。重复分支生成的操作,直到所有叶节点输出,建树完成。
步骤8、依次接收K-D树的节点,完成K-D树的存储。
令根节点的存储地址为1,任意一节点的存储地址为a,该节点的左子节点的存储地址为a<<1,右子节点的存储地址为a<<1+1。根据步骤七中节点生成的方式,可计算出每个节点的存储地址。
图4是对图3中点云有效空间构建和存储K-D树的示意图。K-D树上的每个非叶子节点用nx+ny+nz+2比特来存储,最高比特和次高比特用来标志该节点的左子节点和右子节点是否为叶子节点,该值为1时,表示是叶子节点,为0时表示非叶子节点;叶子节点存储的内容为有效子空间的坐标值。
与现有技术相比,本发明的优点如下:
本发明的方法构建的K-D树,建立的是有效子空间之间的联系,该树上的叶子节点均表示有效子空间的坐标,非叶子节点均为子空间之间的分割值。
设目标点云的数据量为T,目标点云占用的有效子空间数目为V,基于本发明空间分割的策略,可得V<<T。在构件K-D树速度方面,现有构建K-D树的方法需要处理的数据量为T,构建K-D树过程耗时长。本发明提供的方法构件K-D树处理的数据量为V,通过降低K-D树的复杂度,提高了在硬件上构件K-D树的速度。
在存储占用方面,除去存储点云数据以外,现有方法还需存储每个节点的左右子节点的地址信息,此部分需要的存储大小为2T*log2T。对于本发明来说,除了点云本身存储,需要的存储大小约为2V(nx+ny+nz)。基于V<<T,因此,本发明的方法减轻了硬件的内存负担。
在查询近邻方面,由于本发明构建的K-D树复杂度降低,查找近邻时回溯K-D树的过程缩短,同时,本发明中用点云数据直接存储的策略取代原技术的间接存储,避免了查询近邻时逐个计算数据点的串行操作,使得算法可利用硬件优势并行处理多个数据,从而实现加速查找。
仿真验证
仿真采用的点云为经过粗配准后的两片斯坦福龙模型。仿真实验分为三组,每组实验采用的点云数目不同。图5为三组实验采用的点云。
对现有技术的仿真,首先用C++代码编写程序并验证,然后在Visual Studio 2017平台(Intel Core i7-2600 CPU@3.4GHz)测试。
对本发明方法的仿真,首先用Verilog HDL语言描述电路,然后仿真验证电路功能,最后在Modelsim平台测试。本实验的时钟频率为100Mhz。
表1为测量K-D树构建和模型点云查找一次最近邻时间的实验结果。
表1
以上内容仅为说明本发明的技术思想,不能以此限定本发明的保护范围,凡是按照本发明提出的技术思想,在技术方案基础上所做的任何改动,均落入本发明权利要求书的保护范围之内。
Claims (6)
1.基于点云配准ICP算法构建K-D树的方法,其特征在于,包括以下步骤:
步骤1、根据点云数据的存储位宽,将点云空间划分为多个子空间并定义子空间坐标;
步骤2、为每个子空间分配地址连续的存储空间,以及1bit的有效标志位;
步骤3、读取点云数据,确定每个数据所属的子空间坐标,将该数据存储在该子空间对应的存储空间,同时将该子空间的有效标志位置为1,该子空间为有效子空间;
步骤4、根据有效子空间建立K-D树,K-D树上的叶子节点均为有效子空间的坐标,非叶子节点均为分割面方向划分有效子空间的分割值;
步骤5、存储K-D树信息,每个非叶子节点存储自身节点的分割值,并对分割值增加两个比特标志位,分别表示该非叶子节点的左右子节点是否为叶节点;每个叶子节点存储自身节点值,即子空间的坐标值。
3.根据权利要求2所述基于点云配准ICP算法构建K-D树的方法,其特征在于,将存储位宽Nx、Ny和Nz按相同比例缩小后取整得到每个维度的编码位数nx、ny和nz。
5.根据权利要求1所述基于点云配准ICP算法构建K-D树的方法,其特征在于,步骤4中K-D树的建立方法包括以下步骤:
S1、定义所有有效子空间的坐标为一个数据域,从第一层开始,将数据域的子空间坐标在分割方向排序,找到中位值,该中位值即为根节点,小于中位值的子空间归为根节点的左数据域,大于等于中位值的子空间归为右数据域;
S2、左数据域和右数据域分别在下一层的分割方向排序取中位值,产生当前节点的左子节点和右子节点,重复该步骤,逐层产生分割节点;
S3、当数据域的子空间数目为1时,将该子空间的坐标作为叶子节点输出,当所有子空间的坐标输出后,K-D树建立完成。
6.根据权利要求5所述基于点云配准ICP算法构建K-D树的方法,其特征在于,步骤5中存储K-D树信息的方法如下:
令根节点的存储地址为1,任意一节点的左子节点的存储地址为其父节点的地址左移一位,右子节点的存储地址为其父节点的地址左移一位后加1,得到所有节点的存储地址;
每个非叶子节点用nx+ny+nz+2bit存储,其中最高位和次高位比特分别表示该非叶子节点的左右子节点是否为叶子节点,其余比特表示该非叶子节点的分割值;
每个叶子节点用nx+ny+nz比特来存储,节点值表示有效子空间的坐标。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910350982.XA CN110097581B (zh) | 2019-04-28 | 2019-04-28 | 基于点云配准icp算法构建k-d树的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910350982.XA CN110097581B (zh) | 2019-04-28 | 2019-04-28 | 基于点云配准icp算法构建k-d树的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110097581A CN110097581A (zh) | 2019-08-06 |
CN110097581B true CN110097581B (zh) | 2021-02-19 |
Family
ID=67446269
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910350982.XA Active CN110097581B (zh) | 2019-04-28 | 2019-04-28 | 基于点云配准icp算法构建k-d树的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110097581B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113269212A (zh) * | 2020-02-14 | 2021-08-17 | 林项武 | 一种用于三维重建特征点匹配的图形 |
WO2021207947A1 (en) * | 2020-04-14 | 2021-10-21 | Beijing Xiaomi Mobile Software Co., Ltd. | Method and apparatus for processing a point cloud |
CN112181991B (zh) * | 2020-10-15 | 2021-06-15 | 中国人民解放军国防科技大学 | 基于快速构建kd树的地球模拟系统网格重映射方法 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4901360A (en) * | 1987-10-23 | 1990-02-13 | Hughes Aircraft Company | Gated architecture for computer vision machine |
CN101645170B (zh) * | 2009-09-03 | 2011-07-20 | 北京信息科技大学 | 多视点云精确配准方法 |
CN103150747A (zh) * | 2012-11-16 | 2013-06-12 | 佳都新太科技股份有限公司 | 一种基于拓扑特征的点云配准算法 |
CN104463826A (zh) * | 2013-09-18 | 2015-03-25 | 镇江福人网络科技有限公司 | 一种新的点云并行Softassign配准算法 |
CN107798696A (zh) * | 2017-10-19 | 2018-03-13 | 北京联合大学 | 一种基于保局pca的三维点云配准方法 |
CN108470358B (zh) * | 2018-02-13 | 2021-11-30 | 南京大学 | 一种基于二阶震荡人工蜂群算法的点云配准方法 |
CN108921895B (zh) * | 2018-06-12 | 2021-03-02 | 中国人民解放军军事科学院国防科技创新研究院 | 一种传感器相对位姿估计方法 |
CN109345620B (zh) * | 2018-08-13 | 2022-06-24 | 浙江大学 | 融合快速点特征直方图的改进icp待测物体点云拼接方法 |
-
2019
- 2019-04-28 CN CN201910350982.XA patent/CN110097581B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN110097581A (zh) | 2019-08-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108920720B (zh) | 基于深度哈希和gpu加速的大规模图像检索方法 | |
US9396512B2 (en) | Fully parallel construction of k-d trees, octrees, and quadtrees in a graphics processing unit | |
CN110097581B (zh) | 基于点云配准icp算法构建k-d树的方法 | |
US9965821B2 (en) | Fully parallel in-place construction of 3D acceleration structures in a graphics processing unit | |
CN111260784B (zh) | 一种城市三维空间网格压缩编码方法、装置及终端设备 | |
CN105654548A (zh) | 一种基于大规模无序图像的多起点增量式三维重建方法 | |
CN109656798B (zh) | 基于顶点重排序的超级计算机大数据处理能力测试方法 | |
CN104036012A (zh) | 字典学习、视觉词袋特征提取方法及检索系统 | |
CN108549696B (zh) | 一种基于内存计算的时间序列数据相似性查询方法 | |
WO2022037232A1 (zh) | 三维重建中的图像分组方法及装置、电子设备和计算机可读存储介质 | |
CN111985597B (zh) | 模型压缩方法及装置 | |
CN112667860A (zh) | 一种子图匹配方法、装置、设备及存储介质 | |
Wang et al. | Duplicate discovery on 2 billion internet images | |
CN102208033A (zh) | 基于数据聚类的鲁棒sift特征匹配方法 | |
CN109918658A (zh) | 一种从文本中获取目标词汇的方法及系统 | |
CN113515656A (zh) | 一种基于增量学习的多视角目标识别与检索方法、及装置 | |
CN115630236A (zh) | 无源遥感影像的全球快速检索定位方法、存储介质及设备 | |
CN109190450A (zh) | 基于分布式计算平台的人工智能遥感影像数据提取方法 | |
CN103336963A (zh) | 一种图像特征提取的方法及装置 | |
CN104751459B (zh) | 多维特征的相似性度量优化方法及图像匹配方法 | |
Guo et al. | A 3D Surface Reconstruction Method for Large‐Scale Point Cloud Data | |
US20220199202A1 (en) | Method and apparatus for compressing fastq data through character frequency-based sequence reordering | |
CN108092670B (zh) | 编码方法和装置 | |
CN113255610B (zh) | 特征底库构建、特征检索方法以及相关装置 | |
CN103425787B (zh) | 一种渐进最优的三角网格重复顶点快速去除方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |