基于邻域旋转体积的点云配准方法与流程

文档序号:12675377阅读:来源:国知局

技术特征:

1.一种基于邻域旋转体积的点云配准方法,其特征在于,所述点云配准方法包括:

步骤1,载入视角相邻的源点云source和目的点云target,并分别计算源点云的表面分辨率mr_src和目的点云的表面分辨率mr_tgt;

步骤2,对源点云source和目的点云target,分别以n*mr_src和n*mr_tgt为邻域,计算源点云的法向量normal_src和目的点云的法向量normal_tgt;

步骤3,利用Harris3D算法,根据源点云的法向量normal_src计算源点云的源关键点集合keypoints_src,根据目的点云的法向量normal_tgt计算目的点云的目的关键点集合keypoints_tgt;

步骤4,对源关键点集合keypoints_src和目的关键点集合keypoints_tgt中的每个关键点,分别以n倍表面分辨率为邻域计算出局部坐标系,并根据局部坐标系计算出邻域内点的旋转体积作为描述向量,得到源关键点描述向量集features_src和目的关键点描述向量集features_tgt;

步骤5,根据源关键点描述向量集features_src和目的关键点描述向量集features_tgt,在源关键点集合keypoints_src和目的关键点集合keypoints_tgt中确定多个匹配关键点对;根据匹配关键点对计算出从源关键点描述向量集features_src到目的关键点描述向量集features_tgt的旋转平移矩阵Rt;利用旋转平移矩阵Rt对源关键点描述向量集features_src进行旋转和平移,得到中间关键点描述向量集features_src';计算中间关键点描述向量集features_src'中的每个描述向量与目的关键点描述向量集features_tgt中的对应描述向量之间的平均欧式距离;多次执行该步骤,取平均欧式距离最小时的旋转平移矩阵Rt作为最终的旋转平移矩阵;

步骤6,根据最终的旋转平移矩阵将源点云source变换到目的点云target所在的坐标系下,得到中间点云source′,以完成根据关键点对源点云source和目的点云target的粗配准;

步骤7,利用ICP算法对中间点云source′和目的点云target进行精确配准。

2.根据权利要求1所述的点云配准方法,其特征在于,所述步骤1中,分别计算源点云的表面分辨率mr_src和目的点云的表面分辨率mr_tgt,包括:

步骤1.1,对于源点云source和目的点云target中的每一个点,通过KD-tree算法找到其最近点;

步骤1.2,计算每一个点与其最近点之间的距离di

步骤1.3,通过如下公式(1)计算点云的表面分辨率mr:

<mrow> <mi>m</mi> <mi>r</mi> <mo>=</mo> <mfrac> <mn>1</mn> <mi>N</mi> </mfrac> <munderover> <mi>&Sigma;</mi> <mrow> <mi>i</mi> <mo>=</mo> <mn>1</mn> </mrow> <mi>N</mi> </munderover> <msub> <mi>d</mi> <mi>i</mi> </msub> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>1</mn> <mo>)</mo> </mrow> </mrow>

其中,N为点云中点的个数。

3.根据权利要求1所述的点云配准方法,其特征在于,所述步骤4中,对源关键点集合keypoints_src和目的关键点集合keypoints_tgt中的每个关键点,分别以n倍表面分辨率为邻域计算出局部坐标系,并根据局部坐标系计算出邻域内点的旋转体积作为描述向量,得到源关键点描述向量集features_src和目的关键点描述向量集features_tgt,包括:

对于源关键点集合keypoints_src和目的关键点集合keypoints_tgt中的任一关键点p,计算p的描述向量的过程通过如下步骤4.1至步骤4.4实现:

步骤4.1,建立p点及其邻域点Nbhd(p)的局部坐标系,具体为:

首先,以p的法向量为z轴;然后,在Nbhd(p)内找到法向量与p的法向量之间的夹角最小的关键点q,并连接p与q在p的切平面上的投影点q',将该方向作为x轴;最后,根据z×x计算出y轴,形成p处的局部坐标系其中p为该局部坐标系的原点,代表x轴,代表y轴,代表z轴;

步骤4.2,对邻域球S进行空间几何区间划分,形成m个区间,其中,邻域球S是指Nbhd(p)形成的空间,邻域球S的圆心为p,半径为R,R=n×mr,mr为源点云的表面分辨率mr_src或目的点云的表面分辨率mr_tgt,具体为:

首先,以的正方向和邻域球S的交点pnorth为北极,的逆方向与邻域球S的交点psouth为南极,为中轴,沿着邻域球S球面的经线均匀地将邻域球S剖分为m个区间,该区间集合记为Region,每个独立区间记为Regionj(j∈[0m-1]);然后,将邻域球S正投影到upv平面后所得的圆沿圆心平行下移至以psouth为圆心处,记该圆为Cprj_S,该圆Cprj_S也即为圆心在psouth、半径为R的与邻域球S正切的圆;接下来,将Regionj分别投影到Cprj_S上,形成m个扇形,扇形集合记为Sector,每个扇形记为Sectorj(j∈[0m-1]),且Regionj与Sectorj一一对应;

步骤4.3,确定Nbhd(p)中每个点所属的区间,具体为:

首先,将Nbhd(p)中的任一点pi,按照如下公式(2)投影到upv平面上,投影点记为qi,并根据如下公式(3)计算出与坐标轴的逆时针夹角αi

然后,因为圆Cprj_S所在的平面与upv平面平行的关系,因此,可根据αi的值计算qi所属的扇形,从而确定出qi所处的区间;接着,由pi与qi的一一对应性,确定出pi所处的区间;其中,pi所处的区间与qi所处的区间相同;

步骤4.4,计算p的第k(k∈[0m-1])个维度的数值,具体为:

首先,对每个区间内的邻域点集中的每个点,计算其在upv平面上投影点与p的距离,将距离由小到大进行排序,得到每个区间的邻域点序列的各个元素,并将p点作为首元素加入到每个区间的邻域点序列中,形成每个区间的邻域点序列,该邻域点序列记为Nbhd(p)k(k∈[0m-1]);

设任一区间Regionk的邻域点序列Nbhd(p)k为{p,p1,p2,...,ps},按序依次取出p和p1,并分别投影至Cprj_S平面上,投影点分为别为psouth和q1,依次连接psouth、q1、p1和p形成一个梯形T1;然后,将T1绕着轴旋转360°,其扫过的体积记为Vk,1;同理,依次计算序列<p1,p2>、<p2,p3>,…,<ps-1,ps>扫过的体积Vk,2,Vk,3,…,Vk,s;接下来,利用如下公式(4)将所有体积累加从而计算出Regionk内所有邻域点序列扫过的体积和Vk,将其作为p的描述向量的第k个维度的数值;

其中,在计算Regionk中两相邻邻域点<pi-1,pi>及其投影点<qi-1,qi>所形成的梯形旋转后的模型的体积Vk,i时,可将该模型拆分为一个空心圆柱体Modelk,i,1和一个中间为空心圆柱的圆台Modelk,i,2;Modelk,i,1的体积Vk,i,1可通过如下公式(5)进行计算,其中,hk,i,1代表Modelk,i,1的高,可通过如下公式(6)进行计算;rk,i-1和rk,i分别代表Modelk,i,1的内、外半径,均可通过如下公式(7)进行计算;Modelk,i,2的体积Vk,i,2可由圆台的体积Vk,i,3与圆柱的体积Vk,i,4相减而得,见如下公式(8);如下公式(9)用于计算体积Vk,i,3,其中hk,i,2代表圆台的高,rk,i-1和rk,i分别代表圆台的内、外半径,其也通过公式(7)进行计算;公式(10)用于计算体积Vk,i,4,其中hk,i,2代表空心圆柱的高,其通过公式(11)进行计算,rk,i-1代表圆柱的半径;另外,rk,0=0,hk,0,1=R;

<mrow> <msub> <mi>V</mi> <mi>k</mi> </msub> <mo>=</mo> <munderover> <mo>&Sigma;</mo> <mrow> <mi>i</mi> <mo>=</mo> <mn>1</mn> </mrow> <mi>S</mi> </munderover> <msub> <mi>V</mi> <mrow> <mi>k</mi> <mo>,</mo> <mi>i</mi> </mrow> </msub> <mo>=</mo> <munderover> <mo>&Sigma;</mo> <mrow> <mi>i</mi> <mo>=</mo> <mn>1</mn> </mrow> <mi>S</mi> </munderover> <mrow> <mo>(</mo> <msub> <mi>V</mi> <mrow> <mi>k</mi> <mo>,</mo> <mi>i</mi> <mo>,</mo> <mn>1</mn> </mrow> </msub> <mo>+</mo> <msub> <mi>V</mi> <mrow> <mi>k</mi> <mo>,</mo> <mi>i</mi> <mo>,</mo> <mn>2</mn> </mrow> </msub> <mo>)</mo> </mrow> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>4</mn> <mo>)</mo> </mrow> </mrow>

<mrow> <msub> <mi>V</mi> <mrow> <mi>k</mi> <mo>,</mo> <mi>i</mi> <mo>,</mo> <mn>1</mn> </mrow> </msub> <mo>=</mo> <mi>&pi;</mi> <mo>*</mo> <msub> <mi>h</mi> <mrow> <mi>k</mi> <mo>,</mo> <mi>i</mi> <mo>,</mo> <mn>1</mn> </mrow> </msub> <mo>*</mo> <mrow> <mo>(</mo> <msubsup> <mi>r</mi> <mrow> <mi>k</mi> <mo>,</mo> <mi>i</mi> </mrow> <mn>2</mn> </msubsup> <mo>-</mo> <msubsup> <mi>r</mi> <mrow> <mi>k</mi> <mo>,</mo> <mi>i</mi> <mo>-</mo> <mn>1</mn> </mrow> <mn>2</mn> </msubsup> <mo>)</mo> </mrow> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>5</mn> <mo>)</mo> </mrow> </mrow>

<mrow> <msub> <mi>r</mi> <mrow> <mi>k</mi> <mo>,</mo> <mi>i</mi> </mrow> </msub> <mo>=</mo> <msqrt> <mrow> <mo>|</mo> <mo>|</mo> <msub> <mi>p</mi> <mrow> <mi>s</mi> <mi>o</mi> <mi>u</mi> <mi>t</mi> <mi>h</mi> </mrow> </msub> <msub> <mi>p</mi> <mi>i</mi> </msub> <mo>|</mo> <msup> <mo>|</mo> <mn>2</mn> </msup> <mo>-</mo> <msubsup> <mi>h</mi> <mrow> <mi>k</mi> <mo>,</mo> <mi>i</mi> <mo>,</mo> <mn>1</mn> </mrow> <mn>2</mn> </msubsup> </mrow> </msqrt> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>7</mn> <mo>)</mo> </mrow> </mrow>

Vk,i,2=Vk,i,3-Vk,i,4 (8)

<mrow> <msub> <mi>V</mi> <mrow> <mi>k</mi> <mo>,</mo> <mi>i</mi> <mo>,</mo> <mn>3</mn> </mrow> </msub> <mo>=</mo> <mfrac> <mn>1</mn> <mn>3</mn> </mfrac> <mo>*</mo> <mi>&pi;</mi> <mo>*</mo> <msub> <mi>h</mi> <mrow> <mi>k</mi> <mo>,</mo> <mi>i</mi> <mo>,</mo> <mn>2</mn> </mrow> </msub> <mo>*</mo> <mrow> <mo>(</mo> <msubsup> <mi>r</mi> <mrow> <mi>k</mi> <mo>,</mo> <mi>i</mi> </mrow> <mn>2</mn> </msubsup> <mo>+</mo> <msubsup> <mi>r</mi> <mrow> <mi>k</mi> <mo>,</mo> <mi>i</mi> <mo>-</mo> <mn>1</mn> </mrow> <mn>2</mn> </msubsup> <mo>+</mo> <msub> <mi>r</mi> <mrow> <mi>k</mi> <mo>,</mo> <mi>i</mi> </mrow> </msub> <mo>*</mo> <msub> <mi>r</mi> <mrow> <mi>k</mi> <mo>,</mo> <mi>i</mi> <mo>-</mo> <mn>1</mn> </mrow> </msub> <mo>)</mo> </mrow> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>9</mn> <mo>)</mo> </mrow> </mrow>

<mrow> <msub> <mi>V</mi> <mrow> <mi>k</mi> <mo>,</mo> <mi>i</mi> <mo>,</mo> <mn>4</mn> </mrow> </msub> <mo>=</mo> <mi>&pi;</mi> <mo>*</mo> <msub> <mi>h</mi> <mrow> <mi>k</mi> <mo>,</mo> <mi>i</mi> <mo>,</mo> <mn>2</mn> </mrow> </msub> <mo>*</mo> <msubsup> <mi>r</mi> <mrow> <mi>k</mi> <mo>,</mo> <mi>i</mi> <mo>-</mo> <mn>1</mn> </mrow> <mn>2</mn> </msubsup> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>10</mn> <mo>)</mo> </mrow> </mrow>

hk,i,2=hk,i-1,1-hk,i,1 (11);

步骤4.5,依据上述步骤4.4,计算p的其余m-1个维度的数值,最终组成p的m维的描述向量。

4.根据权利要求1所述的点云配准方法,其特征在于,所述步骤5中,根据源关键点描述向量集features_src和目的关键点描述向量集features_tgt,在源关键点集合keypoints_src和目的关键点集合keypoints_tgt中确定多个匹配关键点对;根据匹配关键点对计算出从源关键点描述向量集features_src到目的关键点描述向量集features_tgt的旋转平移矩阵Rt;利用旋转平移矩阵Rt对源关键点描述向量集features_src进行旋转和平移,得到中间关键点描述向量集features_src';计算中间关键点描述向量集features_src'中的每个描述向量与目的关键点描述向量集features_tgt中的对应描述向量之间的平均欧式距离;多次执行该步骤,取平均欧式距离最小时的旋转平移矩阵Rt作为最终的旋转平移矩阵,包括:

步骤5.1,随机从源关键点描述向量集features_src中选取3组描述向量fs0、fs1和fs2,置入集合fs中,利用KD-Tree算法在目的关键点描述向量集features_tgt中为fs0搜索5个欧式距离最近的描述向量,并从5个欧式距离最近的描述向量中随机选取一个描述向量ft0作为fs0对应的描述向量;同理,从目的关键点描述向量集features_tgt中确定fs1对应的描述向量ft1和fs2对应的描述向量ft2,将ft0、ft1和ft2置入集合ft中;

步骤5.2,在源关键点集合keypoints_src中找到fs0、fs1和fs2分别对应的源关键点ks0、ks1和ks2,在目的关键点集合keypoints_tgt中找到ft0、ft1和ft2分别对应的目的关键点kt0、kt1和kt2,形成匹配关键点对<ks0,kt0>、<ks1,kt1>和<ks2,kt2>;依次连接ks0和ks1、ks1和ks2、ks2和ks0形成三条边并分别计算三条边的长度,记为d_ks01、d_ks12和d_ks20;同理,依次连接kt0和kt1、kt1和kt2、kt2和kt0形成三条边并分别计算三条边的长度,记为d_kt01、d_kt12和d_kt20;依次计算对应边长度相似比,即计算min(d_ks01/d_kt01,d_kt01/d_ks01)、min(d_ks12/d_kt12,d_kt12/d_ks12)和min(d_ks20/d_kt20,d_kt20/d_ks20);如果相似比均大于预设阈值δ(δ∈[0 1]),则执行步骤5.3,否则返回步骤5.1;

步骤5.3,基于匹配关键点对<ks0,kt0>、<ks1,kt1>和<ks2,kt2>,通过SVD算法分解计算从源关键点描述向量集features_src到目的关键点描述向量集features_tgt的旋转平移矩阵Rt;

步骤5.4,利用旋转平移矩阵Rt对源关键点描述向量集features_src进行旋转和平移,得到中间关键点描述向量集features_src';对中间关键点描述向量集features_src'中的每个描述向量,利用KD-Tree算法在目的关键点描述向量集features_tgt中搜索欧式距离最近的描述向量作为其对应的描述向量,并计算中间关键点描述向量集features_src'中的每个描述向量与目的关键点描述向量集features_tgt中的对应描述向量之间的平均欧式距离,将该平均欧式距离作为一个评价标准fitness;

步骤5.5,多次执行上述步骤5.1至5.4,选取最小fitness时的旋转平移矩阵作为最终的旋转平移矩阵。

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