基于Hash‑Cube空间层次划分结构的最近邻点集快速检索方法与流程

文档序号:11830401阅读:346来源:国知局
基于Hash‑Cube空间层次划分结构的最近邻点集快速检索方法与流程

本发明涉及计算机数据和查询技术,特别涉及一种基于Hash-Cube空间层次划分结构的最近邻点集快速检索方法。



背景技术:

三维测量技术的飞速发展使得对实体的扫描越来越精细,随之获取的点云规模也颇为巨大,如何快速有效地从这些散乱点云数据中查找任意点的最近邻点集一直是一个比较热门的研究方向,诸多基于点云的数字几何处理,例如点法矢计算、点云拼接、点云去噪、点云网格化等,均依赖于高效可行的最近邻查询结构。

目前,关于最近邻点集的检索方法主要有三类,包括蛮力查找、Voronoi图查找以及空间划分查找,其中:(一)蛮力查找是一类最为简单的最近邻查找方法,先计算当前点与点云数据集中每个点的欧氏距离,再选择距离最短的前k个点作为最近邻点集,若需要计算点云数据集中所有点的最近邻,则所需的时间复杂度为O(n2),这对于实现大规模点云的高效处理几乎是不现实的;(二)Voronoi图查找,该类检索方法根据点的位置分布将点云空间划分为若干个Voronoi子区域,每个点被包含在子区域中,通过计算与该区域共边的其它子区域所包含的点即为当前点的最近邻点。由于Voronoi图的计算代价比较高,使得该方法的复杂度为O(n2logn);(三)空间划分查找,该类方法的执行思路在于首先对点云数据做空间分块,然后基于深度优先策略或最佳优先策略在划分空间内进行最近邻查找,代表性的方法有基于四叉树、基于八叉树以及基于k-d树的最近邻检索,其中基于k-d树的最近邻检索理论上具有O(nlogn+nk)的时间复杂度。

基于空间划分的最近邻检索效率明显优于蛮力查找以及Voronoi图查找,而均分空间层次划分结构又是一类比较直观地空间分块方式,其中使用的Hash函数,又称哈希函数、散列函数,是指在给定任意长度关键字(Key)的条件下,通过某个函数f将关键字映射为散列值(Hash Value)的函数,即

HashValue=f(Key) (1)

散列值一般可表示为关键字的存储位置,因此,在对关键字进行查找时直接通过Hash函数映射就可以找到关键字的存储位置,换而言之,Hash函数能够根据关键字将各元素归类,可以通过直接定址的方式查找到关键字的存储位置。Hash映射是一种压缩映射,即散列值的数据量远小于输入参数的数据量,因而,散列值一般长度较短,形式简单。

散列技术不仅是一种存储技术,同时也是一种查找方法,在对任意某个元素(关键字)进行查找时,只需要通过同样的Hash函数计算对应的散列地址,按此地址访问存储元素。这种存储查找方式与四叉树、八叉树等树状结构以及线性表、图等结构的不同之处在于,上述几种结构,通过建立某种逻辑关系将所有的数据元素关联在一起,在对元素查找时需要大量的比较过程,而Hash函数映射的数据元素之间不存在任何的逻辑关系,只跟关键字(Key)相关,可以简化查找比较过程。因此,散列技术比较适用于查找过程,具备较高的查找效率。

用P={p1,p2,...,pn}表示点云数据集,其中n表示包含点的个数。对于集合中的任意一点pi,把当前点集P中与pi的欧氏距离最近的k个点或者与pi的欧氏距离小于阈值r的称作pi的最近邻点集,记作Near(pi),最近邻点集中包含的每个点称为pi的邻域点。为便于区分,把通过限定邻域点的个数k进行最近邻查找的方式称作k近邻查找,而通过给定检索距离r进行最近邻查找的方式称作r近邻查找。

随着三维测量技术的飞速发展,扫描所得到的实体图像越来越清晰,数据量也越来越大,这样带来的问题就是庞大的数据量用传统的查找方式耗时会非常大,因此需要一种查找迅速,资源消耗较少,使用效率高的查找方法。



技术实现要素:

本发明的目的在于克服现有的存储和查找方法的缺点和不足,提出一种基于Hash-Cube空间层次划分结构的最近邻点集快速检索方法。

本发明的上述目的通过独立权利要求的技术特征实现,从属权利要求以另选或有利的方式发展独立权利要求的技术特征。

为达成上述目的,本发明提出的基于Hash-Cube空间层次划分结构的最近邻点集快速检索方法,包括以下步骤:

步骤一、结合均分空间的划分思想,通过估算单位长度内包含的点云数目将整个点云空间划分为若干个大小相等的子空间(Cube),点云中的所有点将被包裹在这些子空间中;

步骤二、通过计算每个点的子空间坐标,结合Hash函数直接定址的特点将每个数据点分配到对应的子空间中;

步骤三、由于多个数据点可能对应于同一个单位子空间,因此为了节省存储空间,通过对数据点排序,提出了一种有效的数据点存储方式,即每个子空间Hash-Cube只需记录检索值最小的点的地址;

步骤四、空间点的最近邻查询,最近邻查找过程中,根据当前点采样半径r的大小以及Hash函数快速建立检索域,在检索域中查找位于检索半径范围内点,以此确定最近邻点集,最后完成检索。

进一步,所述步骤一之前还包括以下处理:

建立数据结构,其包括:三维点结构体Point3D,用于记录点坐标、点检索以及该点所在的子空间坐标等数据信息;点结构体HashPoint,用于记录三维点坐标、经Hash映射后该点对应的子空间检索,该结构体在空间划分完成后以及后续的最近邻查找过程中使用;存储所有经Hash映射后的点云信息的数组HashPointsArray;存储所有子空间的数组HashCubesArray,每个子空间最多只存储一个数据点的指针。

进一步,所述步骤一对点云数据的空间划分,具体包括以下步骤:

(1)计算点云数据集的最小包围盒{[xmin,xmax][ymin,ymax][zmin,zmax]},根据包围盒尺寸以及点云数目估算单位长度内包含的点的数目cρ

(2)估算沿坐标轴x,y,z三个方向上的单位子空间个数nx,ny,nz,即单位子空间在坐标轴方向上的解析度;

(3)根据(2)步计算的子空间解析度估算单位子空间沿坐标轴方向上的尺寸sx,sy,sz

(4)上述三步执行完成之后,整个点云空间被划分为(cx×cy×cz)个子空间,每个子空间的尺寸为sx×sy×sz

进一步,所述步骤二设计Hash函数将每个数据点分配到单位子空间中,在此将Hash函数定义为关于坐标cx、cy的二元线性函数,其中数据点作为输入参数,对应的返回值(散列值)为单位子空间检索Cubeid。任意一点pi所在的单位子空间的检索Cubeid之间的Hash函数可表示为:

<mrow> <msub> <mi>Cube</mi> <mrow> <mi>i</mi> <mi>d</mi> </mrow> </msub> <mo>=</mo> <msubsup> <mi>C</mi> <msub> <mi>p</mi> <mi>i</mi> </msub> <mi>x</mi> </msubsup> <mo>+</mo> <msubsup> <mi>C</mi> <msub> <mi>p</mi> <mi>i</mi> </msub> <mi>y</mi> </msubsup> <mo>&CenterDot;</mo> <msub> <mi>p</mi> <mi>x</mi> </msub> <mo>+</mo> <msubsup> <mi>C</mi> <msub> <mi>p</mi> <mi>i</mi> </msub> <mi>z</mi> </msubsup> <mo>&CenterDot;</mo> <msub> <mi>c</mi> <mi>x</mi> </msub> <mo>&CenterDot;</mo> <msub> <mi>c</mi> <mi>y</mi> </msub> </mrow>

通过引入Hash函数,在空间点pi与子空间Cubeid之间建立了一个确定的对应关系,使得每个点只归属于一个子空间,所有数据点经Hash函数映射后存储在一块连续的存储空间HashPointsArray中。

进一步,所述步骤三通过对数据点排序,提出了一种有效的数据点存储方式,即每个子空间Hash-Cube只需记录检索值最小的点的地址具体包括:数据点分配完成后,由于每个子空间内可能包含多个数据点,这些点具有相同的子空间检索,若将每个点都记录在子空间中,不仅占用大量内存空间,而且不利于快速检索子空间内包含的数据点。为此,根据每个点对应的Cubeid大小对点云中所有的点进行排序,排序之后,每个子空间只需记录检索值最小的点的地址,若子空间内不包含任何点,则记为NULL,最终将排序后的HashPointsArray中的点云信息与子空间存储数组HashCubesArray相关联。

进一步,所述步骤四空间点的最近邻查询,具体包括以下步骤:

(1)以点pi为中心,以2r为边长建立虚拟检索立方体,立方体的最小、最大角点坐标Cubemin(最小点)、Cubemax(最大点)。

(2)分别计算虚拟立方体的两个角点坐标Cubemin、Cubemax的子空间坐标,两个角点坐标可能对应于不同的子空间,也可能归属于同一个子空间,把位于两个角点子空间坐标区间内的所有非空子空间作为与点pi对应的检索域。

(3)遍历检索域内的所有子空间,将每组子空间坐标代入已定义的Hash函数,计算对应的子空间检索。由于每个子空间中存储的是检索值最小的点的地址,据此地址可以检索到包含在内的所有点的信息,通过计算每个点与pi的平方距离,进而筛选出位于检索范围内的所有点。

由以上技术方案可知,与现有技术相比,本发明的显著优点在于:

结合均分空间的划分思想,通过估算单位长度内包含的点云数目将整个点云空间划分为若干个大小相等的子空间(Cube),点云中的所有点将被包裹在这些子空间中。通过计算每个点的子空间坐标,结合Hash函数直接定址的特点将每个数据点分配到对应的子空间中,提高数据的构建效率。由于多个数据点可能对应于同一个单位子空间,通过对数据点排序,提出了一种有效的数据点存储方式,即每个子空间只需记录检索值最小的点的地址,大大节省存储空间。最近邻查找过程中,根据当前点采样半径r的大小以及Hash函数快速建立检索域,从而快速准确的在检索域中查找位于检索半径范围内点,以此确定最近邻点集,提高了检索效率。

应当理解,前述构思以及在下面更加详细地描述的额外构思的所有组合只要在这样的构思不相互矛盾的情况下都可以被视为本公开的发明主题的一部分。另外,所要求保护的主题的所有组合都被视为本公开的发明主题的一部分。

结合附图从下面的描述中可以更加全面地理解本发明教导的前述和其他方面、实施例和特征。本发明的其他附加方面例如示例性实施方式的特征和/或有益效果将在下面的描述中显见,或通过根据本发明教导的具体实施方式的实践中得知。

附图说明

附图不意在按比例绘制。在附图中,在各个图中示出的每个相同或近似相同的组成部分可以用相同的标号表示。为了清晰起见,在每个图中,并非每个组成部分均被标记。现在,将通过例子并参考附图来描述本发明的各个方面的实施例,其中:

图1是利用Hash函数将点云分配到子空间示意图,其中利用Hash函数将点云中的12个点分配到4个子空间中,点云中的每个点只对应于一个子空间检索。

图2是Hash-Cube空间划分示意图,其中图2(a)所示为根据子空间检索值Cubeid的大小对点云中的10个点排序,Cubeid值相同的元素在HashPointsArray中连续存储,HashCubesArray中的3个非空子空间内存储的是检索值最小的点元素的地址;图2(b)表示子空间包含数据点的示意图。

图3是最近邻检索二维示意图,其中图3(a)为最初的点云数据分布图,其中目标检索点pi为中间覆盖面较大的点,图3(b)表示虚构检索空间立方体(在此表示为二维平面正方形),图3(c)中的阴影部分是指在虚构检索空间立方体的尺寸点Cubemin(最小点)、Cubemax(最大点)相对应检索范围内所有的子空间区域,在图3(d)中圆形区域内部颜色较浅的空间点是指检索到与目标空间点pi的欧氏距离在0—r之间的所有最近邻点集。

具体实施方式

为了更了解本发明的技术内容,特举具体实施例并配合所附图式说明如下。

在本公开中参照附图来描述本发明的各方面,附图中示出了许多说明的实施例。本公开的实施例不必定意在包括本发明的所有方面。应当理解,上面介绍的多种构思和实施例,以及下面更加详细地描述的那些构思和实施方式可以以很多方式中任意一种来实施,这是因为本发明所公开的构思和实施例并不限于任何实施方式。另外,本发明公开的一些方面可以单独使用,或者与本发明公开的其他方面的任何适当组合来使用。

根据本发明的实施例,一种基于Hash-Cube空间层次划分结构的最近邻点集快速检索方法,本专利将均分空间层次划分结构与Hash映射相结合,通过引入Hash函数来分配、定址点云,建立数据点与单位子空间之间的线性映射,提出了一种基于Hash-Cube空间层次划分结构的最近邻点集快速检索方法。结合均分空间的划分思想,通过估算单位长度内包含的点云数目将整个点云空间划分为若干个大小相等的子空间(Cube),点云中的所有点将被包裹在这些子空间中。通过计算每个点的子空间坐标,结合Hash函数直接定址的特点将每个数据点分配到对应的子空间中。由于多个数据点可能对应于同一个单位子空间,因此为了节省存储空间,通过对数据点排序,提出了一种有效的数据点存储方式,即每个子空间只需记录检索值最小的点的地址。最近邻查找过程中,根据当前点采样半径r的大小以及Hash函数快速建立检索域,在检索域中查找位于检索半径范围内点,以此确定最近邻点集,最后完成检索。

具体地,前述方法的具体实现包括:

步骤一、结合均分空间的划分思想,通过估算单位长度内包含的点云数目将整个点云空间划分为若干个大小相等的子空间(Cube),点云中的所有点将被包裹在这些子空间中;

步骤二、通过计算每个点的子空间坐标,结合Hash函数直接定址的特点将每个数据点分配到对应的子空间中;

步骤三、由于多个数据点可能对应于同一个单位子空间,因此为了节省存储空间,通过对数据点排序,提出了一种有效的数据点存储方式,即每个子空间Hash-Cube只需记录检索值最小的点的地址;

步骤四、空间点的最近邻查询,最近邻查找过程中,根据当前点采样半径r的大小以及Hash函数快速建立检索域,在检索域中查找位于检索半径范围内点,以此确定最近邻点集,最后完成检索。

其中,所述步骤一之前还包括以下处理:

建立数据结构,其包括:三维点结构体Point3D,用于记录点坐标、点检索以及该点所在的子空间坐标等数据信息;点结构体HashPoint,用于记录三维点坐标、经Hash映射后该点对应的子空间检索,该结构体在空间划分完成后以及后续的最近邻查找过程中使用;存储所有经Hash映射后的点云信息的数组HashPointsArray;存储所有子空间的数组HashCubesArray,每个子空间最多只存储一个数据点的指针。

具体地,本发明中,需要建立下述数据结构:

(1)三维点结构体Point3D,用于记录点坐标、点检索值以及该点所在的子空间坐标等数据信息,该结构体在空间层次划分过程中使用,即:

(2)点结构体HashPoint,用于记录三维点坐标、经Hash映射后该点对应的子空间检索值,

该结构体在空间划分完成后以及后续的最近邻查找过程中使用,即:

(3)存储所有经Hash映射后的点云信息的数组HashPointsArray,即:

std::vector<HashPoint>HashPointsArray;

(4)存储所有子空间的数组HashCubesArray,每个子空间最多只存储一个数据点的指针,即:

std::vector<HashPoint*>HashCubesArray;

(一)基于Hash-Cube对空间的划分

本节将依据点云包围盒的尺寸、点云数目估算子空间的解析度,并利用Hash函数分配每一个数据点的存储位置。对于点云数据的空间划分过程可通过如下步骤执行:

(1)计算点云数据集的最小包围盒{[xmin,xmax][ymin,ymax][zmin,zmax]},根据包围盒尺寸以及点云数目估算单位长度内包含的点的数目cρ,即

<mrow> <msub> <mi>c</mi> <mi>&rho;</mi> </msub> <mo>=</mo> <mroot> <mfrac> <mi>c</mi> <mrow> <mrow> <mo>|</mo> <mrow> <msub> <mi>x</mi> <mrow> <mi>m</mi> <mi>a</mi> <mi>x</mi> </mrow> </msub> <mo>-</mo> <msub> <mi>x</mi> <mrow> <mi>m</mi> <mi>i</mi> <mi>n</mi> </mrow> </msub> </mrow> <mo>|</mo> </mrow> <mo>&CenterDot;</mo> <mrow> <mo>|</mo> <mrow> <msub> <mi>y</mi> <mrow> <mi>m</mi> <mi>a</mi> <mi>x</mi> </mrow> </msub> <mo>-</mo> <msub> <mi>y</mi> <mrow> <mi>m</mi> <mi>i</mi> <mi>n</mi> </mrow> </msub> </mrow> <mo>|</mo> </mrow> <mo>&CenterDot;</mo> <mrow> <mo>|</mo> <mrow> <msub> <mi>z</mi> <mrow> <mi>m</mi> <mi>a</mi> <mi>x</mi> </mrow> </msub> <mo>-</mo> <msub> <mi>z</mi> <mrow> <mi>m</mi> <mi>i</mi> <mi>n</mi> </mrow> </msub> </mrow> <mo>|</mo> </mrow> </mrow> </mfrac> <mn>3</mn> </mroot> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>2</mn> <mo>)</mo> </mrow> </mrow>

(2)估算沿坐标轴x,y,z三个方向上的单位子空间个数nx,ny,nz,即单位子空间在坐标轴方向上的解析度,表示为

其中为向上取整符号。

(3)根据(2)步计算的子空间解析度估算单位子空间沿坐标轴方向上的尺寸sx,sy,sz,即:

<mrow> <msub> <mi>s</mi> <mi>x</mi> </msub> <mo>=</mo> <mfrac> <mrow> <mo>|</mo> <mrow> <msub> <mi>x</mi> <mrow> <mi>m</mi> <mi>a</mi> <mi>x</mi> </mrow> </msub> <mo>-</mo> <msub> <mi>x</mi> <mrow> <mi>m</mi> <mi>i</mi> <mi>n</mi> </mrow> </msub> </mrow> <mo>|</mo> </mrow> <msub> <mi>c</mi> <mi>x</mi> </msub> </mfrac> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>6</mn> <mo>)</mo> </mrow> </mrow>

<mrow> <msub> <mi>s</mi> <mi>y</mi> </msub> <mo>=</mo> <mfrac> <mrow> <mo>|</mo> <mrow> <msub> <mi>y</mi> <mrow> <mi>m</mi> <mi>a</mi> <mi>x</mi> </mrow> </msub> <mo>-</mo> <msub> <mi>y</mi> <mrow> <mi>m</mi> <mi>i</mi> <mi>n</mi> </mrow> </msub> </mrow> <mo>|</mo> </mrow> <msub> <mi>c</mi> <mi>y</mi> </msub> </mfrac> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>7</mn> <mo>)</mo> </mrow> </mrow>

<mrow> <msub> <mi>s</mi> <mi>z</mi> </msub> <mo>=</mo> <mfrac> <mrow> <mo>|</mo> <mrow> <msub> <mi>z</mi> <mrow> <mi>m</mi> <mi>a</mi> <mi>x</mi> </mrow> </msub> <mo>-</mo> <msub> <mi>z</mi> <mrow> <mi>m</mi> <mi>i</mi> <mi>n</mi> </mrow> </msub> </mrow> <mo>|</mo> </mrow> <msub> <mi>c</mi> <mi>z</mi> </msub> </mfrac> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>8</mn> <mo>)</mo> </mrow> </mrow>

上述三步执行完成之后,整个点云空间被划分为(cx×cy×cz)个子空间,每个子空间的尺寸为sx×sy×sz

(4)设计Hash函数将每个数据点分配到单位子空间中,在此将Hash函数定义为关于坐标cx、cy的二元线性函数,其中数据点作为输入参数,对应的返回值(散列值)为单位子空间检索值Cubeid。任意一点pi所在的单位子空间的检索值Cubeid可表示为:

<mrow> <msub> <mi>Cube</mi> <mrow> <mi>i</mi> <mi>d</mi> </mrow> </msub> <mo>=</mo> <msubsup> <mi>C</mi> <msub> <mi>p</mi> <mi>i</mi> </msub> <mi>x</mi> </msubsup> <mo>+</mo> <msubsup> <mi>C</mi> <msub> <mi>p</mi> <mi>i</mi> </msub> <mi>y</mi> </msubsup> <mo>&CenterDot;</mo> <msub> <mi>p</mi> <mi>x</mi> </msub> <mo>+</mo> <msubsup> <mi>C</mi> <msub> <mi>p</mi> <mi>i</mi> </msub> <mi>z</mi> </msubsup> <mo>&CenterDot;</mo> <msub> <mi>c</mi> <mi>x</mi> </msub> <mo>&CenterDot;</mo> <msub> <mi>c</mi> <mi>y</mi> </msub> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>9</mn> <mo>)</mo> </mrow> </mrow>

式中,,分别表示点pi在x轴、y轴、z轴方向上的子空间坐标,即

其中,pix、piy、piz分别表示点pi沿x轴、y轴、z轴方向的坐标。

通过引入Hash函数,在空间点pi与子空间Cubeid之间建立了一个确定的对应关系,使得每个点只归属于一个子空间,所有数据点经Hash函数映射后存储在一块连续的存储空间HashPoints中。图1表示利用Hash函数将点云中的12个点分配到4个子空间中,点云中的每个点只对应于一个子空间检索。

由图1可知,点云中的10个点只对应于3个子空间空间,出现了多个元素关键字(Key)对应同一个散列值的“冲突”现象,例如其中点1、7、8、11、12映射在相同的子空间Cube1中。通常要处理的点云数据量一般在数十万个点以上,若要求实现每个点与散列值的一一对应,则对于散列函数的设计要求较为苛刻。由于子空间的数目远小于点云的规模,多个点不可避免的会被映射到同一个子空间中,这也恰恰反映了这些点的空间位置比较接近,也就是说,位置关系比较接近的数据点,极有可能被映射到同一个或相邻的子空间中。因此,这种“冲突”是不需要避免的,反而可以借助这类“冲突”从相邻子空间中查找到最近邻点集。

(5)数据点分配完成后,由于每个子空间内可能包含多个数据点,这些点具有相同的子空间检索,若将每个点都记录在子空间中,不仅占用大量内存空间,而且不利于快速检索子空间内包含的数据点。为此,根据每个点对应的Cubeid大小对点云中所有的点进行排序,排序之后,每个子空间只需记录检索值最小的点的地址,若子空间内不包含任何点,则记为NULL,最终将排序后的HashPoints中的点云信息与子空间存储数组HashCubes相关联。如图2(a)所示,根据子空间检索值Cubeid的大小对点云中的12个点排序,Cubeid值相同的元素在HashPoints中连续存储,HashCubes中的3个非空子空间内存储的是检索值最小的点元素的地址;图2(b)表示子空间包含数据点的示意图。

(二)空间点的最近邻查询

利用Hash-Cube结构对点云空间划分完成后,由于划分方式是人为界定的,加之点云的分布是随机的、不规则的,使得空间点pi的最近邻点可能分布于多个相邻的子空间中,单纯在pi点所在的子空间内查找是不准确的。如图2(a),检索值为8的空间点在Cube1的右下角,该点的最近邻点可能在Cube1附近的子空间Cube2和Cube4中。所以,在对空间中任意点进行最近邻检索的时候,不仅要在当前点所属子空间中检索,还需要从当前点的相邻子空间中检索,其中如何确定哪些邻域子空间包含近邻点以及如何快速的检索这些点是最近邻检索方法的关键。

根据当前点pi的查找距离r,建立包裹pi点的虚拟立方体,再次利用Hash函数直接定址的方式查找与该虚拟立方体有交集或位于虚拟立方体内部的所有子空间,将这些子空间作为点pi的邻接子空间,即点pi的检索域,以此限定最近邻检索的范围,待查找的最近邻点必定位于检索区域集内。随后通过遍历检索区域集内的每一个非空子空间筛选出与点pi的距离小于r的所有点(为了避免开平方运算,使用平方距离替代欧氏距离),可以快速实现对任意空间点pi的最近邻查询,检索方法的具体细节如下:

(1)以当前目标点pi为检索中心,以2r为边长构建虚构检索空间立方体,其中该立方体的尺寸坐标Cubemin(最小点)、Cubemax(最大点)利用以下公式计算:

Cubemin=(pix-r,piy-r,piz-r) (13)

Cubemax=(pix+r,piy+r,piz+r) (14)

(2)利用公式(10-12)分别计算虚拟立方体的两个角点坐标Cubemin、Cubemax的子空间坐标,两个角点坐标可能对应于不同的子空间,也可能归属于同一个子空间,把位于两个角点子空间坐标区间内的所有非空子空间作为与点pi对应的检索域。

(3)将检索域中所有包含的子空间依次访问,将每组子空间坐标代入式(9)所定义的Hash函数,计算对应的子空间检索值。由于每个子空间中存储的是检索值最小的点的地址,据此地址可以检索到包含在内的所有点的信息,通过计算每个点与pi的平方距离,进而筛选出位于检索范围内的所有点。

图3表示的是以上检索整个过程中的二维平面示意图,其中图3(a)为最初的点云数据分布图,其中目标检索点pi为中间覆盖面较大的点,图3(b)表示虚构检索空间立方体(在此表示为二维平面正方形),图3(c)中的阴影部分是指在虚构检索空间立方体的尺寸点Cubemin(最小点)、Cubemax(最大点)相对应检索范围内所有的子空间区域,在图3(d)中圆形区域内部颜色较浅的空间点是指检索到与目标空间点pi的欧氏距离在0—r之间的所有最近邻点集。

虽然本发明已以较佳实施例揭露如上,然其并非用以限定本发明。本发明所属技术领域中具有通常知识者,在不脱离本发明的精神和范围内,当可作各种的更动与润饰。因此,本发明的保护范围当视权利要求书所界定者为准。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1