一种应用于浏览器的三维点云数据点拾取方法及系统与流程

文档序号:32936843发布日期:2023-01-14 07:55阅读:38来源:国知局
一种应用于浏览器的三维点云数据点拾取方法及系统与流程

1.本发明涉及语义分割领域,更具体地,涉及一种应用于浏览器的三维点云数据点拾取方法及系统。


背景技术:

2.点云数据的标注方式主要分为3d框标注和语义分割标注,3d框标注使用3d立体框将点云数据中所感兴趣的目标物标注出来,并给予类别等信息。相较于语义分割标注,其信息量较为稀疏,只包含了场景内的部分信息,这对于如今高级自动驾驶及全自动驾驶研究来说,信息量是远远不够的。而语义分割可以对场景中的每个点云点均赋予类别标签,信息量远大于一般的3d框标注,因此点云语义分割也逐渐成为各大自动驾驶领域公司机构的研究重点。但对点云数据进行语义分割目前仍存在诸多难点,其中最大的难点就是标注效率的提升。随着如今激光雷达的飞速发展,更高线数的激光雷达以及车规级固态激光雷达的出现,使得单帧点云数据中点的数量呈倍数的增长。要想对这些点进行语义分割,若不使用ai,其效率将会很低。然而,一个高效准确的点云语义分割ai又需要依靠大量标注好的语义分割真值数据进行训练才能获得。因此,通过平台及工具进行手工点云语义分割仍是当今标注领域的一大需求。
3.使用平台或工具手工对点云进行语义分割的步骤大致为:选择所需分割的类别;选择所需分割为该类别的点;将所选择的点赋予所选类别的分类信息。这其中最耗时最影响效率的步骤为“选择所需分割为该类别的点”。想要使用平台或工具在三维点云视图中选取点,常用的算法为光线投射算法,而此算法每次只能拾取距离所选点位最近的点或者距离所选点位一定范围内的点,无法做到快速且精确拾取任意选定范围内的点。


技术实现要素:

4.本发明针对现有技术中存在的技术问题,提供一种应用于浏览器的三维点云数据点拾取方法及系统。
5.根据本发明的第一方面,提供了一种应用于浏览器的三维点云数据点拾取方法,包括:
6.基于three.js引擎在浏览器中加载并显示三维点云数据;
7.将加载的三维点云数据中的每一个点的三维坐标投影至浏览器所在的二维平面,得到投影后的每一个点的二维坐标;
8.基于用户在浏览器上绘制的闭合多边形,基于投影后的每一个点的二维坐标,利用相交点算法,拾取位于所述闭合多边形内的所有的点云数据点。
9.在上述技术方案的基础上,本发明还可以作出如下改进。
10.可选的,所述将加载的三维点云数据中的每一个点的三维坐标投影至浏览器所在的二维平面,得到投影后的每一个点的二维坐标,包括:
11.基于three.js引擎创建相机对象,所述相机对象用于在浏览器上浏览加载并显示
的所述三维点云数据;
12.基于three.js引擎中的vector3.project()对点云数据中每一个点的三维坐标进行转换,得到转换后的每一个点的三维坐标;
13.基于转换后的每一个点的三维坐标中的x坐标和y坐标,计算得到点云数据中的每一个点投影至浏览器所在平面上所得的二维坐标。
14.可选的,所述基于three.js引擎中的vector3.project()对点云数据中每一个点的三维坐标进行转换,得到转换后的每一个点的三维坐标,包括:
15.定义vector3=(x1,y1,z1),其中,x1,y1和z1为点云数据中点的三维坐标;
16.调用vector3.project(camera)将点云数据中点的三维坐标进行转换,得到转换后的每一个点的三维坐标,定义为vector3=(x2,y2,z2),x2、y2和z2为转换后的三维坐标。
17.可选的,所述基于转换后的每一个点的三维坐标中的x坐标和y坐标,计算得到点云数据中的每一个点投影至浏览器所在平面上所得的二维坐标,包括:
[0018][0019][0020]
其中,(p
x
,py)为投影后的每一个点的二维坐标,cavas.width为在浏览器中加载并显示的点云数据在浏览器中的宽度,cavas.height为在浏览器中加载并显示的点云数据在浏览器中的高度。
[0021]
可选的,用户在浏览器上绘制闭合多边形的过程中,依照绘制先后顺序将多边形的各顶点的二维坐标(p
nx
,p
ny
)依次保存在数组array
p
中,当闭合多边形绘制完成后,将数组array
p
中的第一个二维坐标值(p
0x
,p
0y
)再次保存到数组末尾,则数组array
p
中存储的二维坐标形成闭合多边形。
[0022]
可选的,所述基于投影后的每一个点的二维坐标,利用相交点算法,拾取位于所述闭合多边形内的所有的点云数据点,包括:
[0023]
定义计数器count,其初始值为0,按顺序依次取出array
p
中连续的两个二维坐标(p
ix
,p
iy
)和(p
jx
,p
jy
);
[0024]
基于连续的两个二维坐标(p
ix
,p
iy
)和(p
jx
,p
jy
)和当前点云数据点投影至浏览器所在平面所得的二维坐标(p
x
,py),判定是否满足设定条件,如果满足设定条件,则将计数器count的值加1;
[0025]
遍历数组array
p
中的所有连续的两个二维坐标,获取最终的计数器count的值;
[0026]
基于最终的计数器count的值,确定当前点云数据点投影至浏览器所在平面所得的二维坐标(p
x
,py)是否在闭合多边形内;
[0027]
遍历三维点云数据的每一个点投影至浏览器所在平面所得的二维坐标,是否在闭合多边形内;
[0028]
获取所有在闭合多边形内的点,并获取所有对应的三维点云数据点。
[0029]
可选的,所述基于连续的两个二维坐标(p
ix
,p
iy
)和(p
jx
,p
jy
)和当前点云数据点投影至浏览器所在平面所得的二维坐标(p
x
,py),判定是否满足设定条件,如果满足设定条件,
则将计数器count的值加1,包括:
[0030]
当连续的两个二维坐标(p
ix
,p
iy
)和(p
jx
,p
jy
)和当前点云数据点投影至浏览器所在平面所得的二维坐标(p
x
,py)同时满足第一设定条件、第二设定条件和第三设定条件时,则将计数器count的值加1;
[0031]
所述第一设定条件为:
[0032]
(p
iy
》py)^(p
jy
》py);
[0033]
其中,当a、b均为真时,a^b为假;
[0034]
当a为真,b为假时,a^b为真;
[0035]
当a为假,b为真时,a^b为真;
[0036]
当a、b均为假时,a^b为假;
[0037]
第二设定条件为:
[0038]
(p
ix
》p
x
)||(p
jx
》p
x
);
[0039]
当a、b均为真时,a||b为真;
[0040]
当a为真,b为假时,a||b为真;
[0041]
当a为假,b为真时,a||b为真;
[0042]
当a、b均为假时,a||b为假;
[0043]
第三设定条件为:
[0044][0045]
可选的,所述基于最终的计数器count的值,确定当前点云数据点投影至浏览器所在平面所得的二维坐标(p
x
,py)是否在闭合多边形内,包括:
[0046]
当time的值为1时,确定当前点云数据点投影至浏览器所在平面所得的二维坐标(p
x
,py)在闭合多边形内,否则,当前点云数据点投影至浏览器所在平面所得的二维坐标(p
x
,py)不在闭合多边形内,其中,time=count%2。
[0047]
根据本发明的第二方面,提供一种应用于浏览器的三维点云数据点拾取系统,包括:
[0048]
加载模块,用于基于three.js引擎在浏览器中加载并显示三维点云数据;
[0049]
投影模块,用于将加载的三维点云数据中的每一个点的三维坐标投影至浏览器所在的二维平面,得到投影后的每一个点的二维坐标;
[0050]
拾取模块,用于基于用户在浏览器上绘制的闭合多边形,基于投影后的每一个点的二维坐标,利用相交点算法,拾取位于所述闭合多边形内的所有的点云数据点。
[0051]
根据本发明的第三方面,提供了一种电子设备,包括存储器、处理器,所述处理器用于执行存储器中存储的计算机管理类程序时实现应用于浏览器的三维点云数据点拾取方法的步骤。
[0052]
根据本发明的第四方面,提供了一种计算机可读存储介质,其上存储有计算机管理类程序,所述计算机管理类程序被处理器执行时实现应用于浏览器的三维点云数据点拾取方法的步骤。
[0053]
本发明提供的一种应用于浏览器的三维点云数据点拾取方法及系统,可以使用户
直接在三维视图中进行点云点拾取,且可根据需要任意绘制多边形进行点云点批量精确拾取,解决了光线投射算法在拾取点云点上拾取效率与拾取精度不可兼具的缺点,提升了手工语义分割的效率。
附图说明
[0054]
图1为本发明提供的一种应用于浏览器的三维点云数据点拾取方法流程图;
[0055]
图2为一个实施例的三维点云数据点拾取方法流程图;
[0056]
图3为本发明提供的应用于浏览器的三维点云数据点拾取系统的结构示意图;
[0057]
图4为本发明提供的一种可能的电子设备的硬件结构示意图;
[0058]
图5为本发明提供的一种可能的计算机可读存储介质的硬件结构示意图。
具体实施方式
[0059]
下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。
[0060]
图1为本发明提供的一种应用于浏览器的三维点云数据点拾取方法流程图,如图1所示,该三维点云数据点拾取方法包括:
[0061]
s1,基于three.js引擎在浏览器中加载并显示三维点云数据。
[0062]
可以理解的是,基于获取的三维点云数据,利用three.js引擎在浏览器中加载并显示该三维点云数据。
[0063]
s2,将加载的三维点云数据中的每一个点的三维坐标投影至浏览器所在的二维平面,得到投影后的每一个点的二维坐标。
[0064]
作为实施例,所述将加载的三维点云数据中的每一个点的三维坐标投影至浏览器所在的二维平面,得到投影后的每一个点的二维坐标,包括:基于three.js引擎创建相机对象,所述相机对象用于在浏览器上浏览加载并显示的所述三维点云数据;基于three.js引擎中的vector3.project()对点云数据中每一个点的三维坐标进行转换,得到转换后的每一个点的三维坐标;基于转换后的每一个点的三维坐标中的x坐标和y坐标,计算得到点云数据中的每一个点投影至浏览器所在平面上所得的二维坐标。
[0065]
可以理解的是,利用three.js引擎在浏览器中加载并显示三维点云数据,同时利用three.js引擎创建camera相机对象,camera相机对象可用于在浏览器中浏览上述加载显示的点云数据。
[0066]
然后利用three.js中的vector3.project()方法将三维点云中每个点的三维坐标投影至浏览器所在平面上,获取投影后的二维坐标。
[0067]
其中,vector3表示三维点云中某点的三维坐标,如定义1所示,执行vector3.project()方法时需要将camera相机对象作为参数传入,如定义2所示,执行完成后,定义1所示vector3的值将发生改变,改变后结果如定义3所示,其中,改变后的结果依然为三维坐标,将定义3中的x2代入公式1进行计算得到p
x
,将定义3中的y2代入公式2进行计算得到py,(p
x
,py)即为将定义1中vector3投影至浏览器所在平面上所得的二维坐标。其中公式1中cavas.width表示上述在浏览器中加载并显示的点云数据在浏览器中的宽度,单位为像素;公式2中cavas.height表示上述在浏览器中加载并显示的点云数据在浏览器中显示
的高度,单位为像素。
[0068]
定义1 vector3=(x1,y1,z1);
[0069]
定义2 vector3.project(camera);
[0070]
定义3 vector3=(x2,y2,z2);
[0071]
公式1
[0072]
公式2
[0073]
根据上述的定义1、定义2和定义3以及公式1和公式2,将三维点云数据点的每一个点的三维坐标投影至浏览器所在平面上的二维坐标,投影后的二维坐标为(p
x
,py)。
[0074]
s3,基于用户在浏览器上绘制的闭合多边形,基于投影后的每一个点的二维坐标,利用相交点算法,拾取位于所述闭合多边形内的所有的点云数据点。
[0075]
作为实施例,用户在浏览器上绘制闭合多边形的过程中,依照绘制先后顺序将多边形的各顶点的二维坐标(p
nx
,p
ny
)依次保存在数组array
p
中,当闭合多边形绘制完成后,将数组array
p
中的第一个二维坐标值(p
0x
,p
0y
)再次保存到数组末尾,则数组array
p
中存储的二维坐标形成闭合多边形。
[0076]
其中,所述基于投影后的每一个点的二维坐标,利用相交点算法,拾取位于所述闭合多边形内的所有的点云数据点,包括:定义计数器count,其初始值为0,按顺序依次取出array
p
中连续的两个二维坐标(p
ix
,p
iy
)和(p
jx
,p
jy
);基于连续的两个二维坐标(p
ix
,p
iy
)和(p
jx
,p
jy
)和当前点云数据点投影至浏览器所在平面所得的二维坐标(p
x
,py),判定是否满足设定条件,如果满足设定条件,则将计数器count的值加1;遍历数组array
p
中的所有连续的两个二维坐标,获取最终的计数器count的值;基于最终的计数器count的值,确定当前点云数据点投影至浏览器所在平面所得的二维坐标(p
x
,py)是否在闭合多边形内;遍历三维点云数据的每一个点投影至浏览器所在平面所得的二维坐标,是否在闭合多边形内;获取所有在闭合多边形内的点,并获取所有对应的三维点云数据点。
[0077]
可以理解的是,完成投影后二维坐标的计算后,用户需要用鼠标在浏览器中加载显示了上述点云数据的区域内根据需要任意绘制闭合多边形。在用户绘制多边形的过程中,依照绘制先后顺序将多边形的各顶点的二维坐标(p
nx
,p
ny
)依次保存在数组array
p
中,n为二维坐标的编号。当用户完成闭合多边形绘制后,将数组array
p
中的第一个二维坐标值(p
0x
,p
0y
)再次保存到数组末尾。然后对点云数据中每个点执行如下操作:定义计数器count,其初始值为0。按顺序依次取出array
p
中连续的两个二维坐标,即第一次取出数组下标为0和1的两个二维坐标(p
0x
,p
0y
)和(p
1x
,p
1y
),第二次取出数组下标为1和2的两个二维坐标(p
1x
,p
1y
)和(p
2x
,p
2y
),以此类推。每次取出两个二维坐标后,将取出的两个二维坐标(p
ix
,p
iy
)和(p
jx
,p
jy
)以及将当前点云点投影至浏览器所在平面所得的二维坐标(p
x
,py)依次代入公式3、公式4、公式5进行计算。其中公式3的定义及计算方法如定义4所示,公式4的定义及计算方法如定义5所示,其中,公式3可以理解为第一设定条件,公式4可以理解为第二设定条件,公式5可以理解为第三设定条件。当公式3、公式4、公式5的计算结果均为真时,将计数器count的值加1。
[0078]
公式3(p
iy
》py)^(p
jy
》py);
[0079]
定义4当a、b均为真时,a^b为假;
[0080]
当a为真,b为假时,a^b为真;
[0081]
当a为假,b为真时,a^b为真;
[0082]
当a、b均为假时,a^b为假。
[0083]
公式4(p
ix
》p
x
)||(p
jx
》p
x
);
[0084]
定义5当a、b均为真时,a||b为真;
[0085]
当a为真,b为假时,a||b为真;
[0086]
当a为假,b为真时,a||b为真;
[0087]
当a、b均为假时,a||b为假。
[0088]
公式5
[0089]
当数组array
p
中连续的两个二维坐标全部取出过一次后,将计数器count的值代入公式6计算得到time,其中公式6的定义及计算方法如定义6所示。
[0090]
公式6time=count%2;
[0091]
定义6a%b表示a除以b后所得的余数,例如10
÷
3=3
……
1,则10%3=1。
[0092]
通过上述公式6求取time值,对time的值进行判断,当time的值等于1时说明该投影至浏览器所在平面上所得的二维坐标(p
x
,py)所对应的原始三维点云点被上述用户所绘制的闭合多边形所拾取,对该点进行标记。当点云数据中的每个点都执行完上述操作后,所有被标记的三维点云点即为上述用户绘制的闭合多边形所拾取到的点。
[0093]
参见图2,为本发明提供的应用于浏览器的三维点云数据点拾取方法的一个实施例,主要包括如下步骤:
[0094]
1、利用three.js加载点云数据pcd1,并创建相机对象camera;
[0095]
2、从pcd1中获取三维点云点坐标集合p1;
[0096]
3、从p1中取出一个三维坐标v1,并利用three.js对v1执行vector3.project(camera),得到结果v2;
[0097]
4、将v2中的x代入公式1计算得出px,将v2中的y代入公式2计算得出py,将(px,py)保存至数组p2中;
[0098]
5、重复上述步骤3~4直至p1中所有三维坐标取完;
[0099]
6、用户使用鼠标在浏览器中任意绘制闭合多边形,每次绘制时按顺序将多边形各顶点的二维坐标保存到数组p3中,直到用户结束绘制;
[0100]
7、当用户结束闭合多边形绘制时,将p3中的第一个二维坐标在p3的末尾再保存一次;
[0101]
8、从p2中取出一个二维坐标v2,并创建计数器count;
[0102]
9、从p3中取出连续的两个二维坐标v3,v4,并与v2一起代入公式3,公式4,公式5进行计算得到结果r1,r2,r3;
[0103]
10、判断r1,r2,r3是否均为真,若均为真则将计数器count的值+1,否则直接执行步骤11;
[0104]
11、判断p3中的值是否取完,若取完则将count代入公式6计算得到time,否则重复上述步骤9~10;
[0105]
12、判断time是否等于1,若等于1则将v2所对应的三维点云点标记为被用户所绘制的多边形拾取,否则直接执行步骤13;
[0106]
13、判断p2中的值是否取完,若未取完则重复上述步骤8~12。
[0107]
相比于光线投射算法,本发明所提出的一种应用于浏览器的三维点云点拾取方法可以使用户直接在三维视图中进行点云点拾取,且可根据需要任意绘制多边形进行点云点批量精确拾取,减少了在手工语义分割过程中“选择所需分割为该类别的点”这一步骤上所花费的时间,提高了这一步骤上的成果精确度,提升了这一步骤的工作效率,进而提高了手工语义分割的效率。
[0108]
参见图3,提供了本发明的一种应用于浏览器的三维点云数据点拾取系统,该三维点云数据点拾取系统包括加载模块301、投影模块302和拾取模块303,其中:
[0109]
加载模块301,用于基于three.js引擎在浏览器中加载并显示三维点云数据;
[0110]
投影模块302,用于将加载的三维点云数据中的每一个点的三维坐标投影至浏览器所在的二维平面,得到投影后的每一个点的二维坐标;
[0111]
拾取模块303,用于基于用户在浏览器上绘制的闭合多边形,基于投影后的每一个点的二维坐标,利用相交点算法,拾取位于所述闭合多边形内的所有的点云数据点。
[0112]
可以理解的是,本发明提供的一种应用于浏览器的三维点云数据点拾取系统与前述各实施例提供的应用于浏览器的三维点云数据点拾取方法相对应,应用于浏览器的三维点云数据点拾取系统的相关技术特征可参考应用于浏览器的三维点云数据点拾取方法的相关技术特征,在此不再赘述。
[0113]
请参阅图4,图4为本发明实施例提供的电子设备的实施例示意图。如图4所示,本发明实施例提了一种电子设备400,包括存储器410、处理器420及存储在存储器410上并可在处理器420上运行的计算机程序411,处理器420执行计算机程序411时实现以下步骤:基于three.js引擎在浏览器中加载并显示三维点云数据;将加载的三维点云数据中的每一个点的三维坐标投影至浏览器所在的二维平面,得到投影后的每一个点的二维坐标;基于用户在浏览器上绘制的闭合多边形,基于投影后的每一个点的二维坐标,利用相交点算法,拾取位于所述闭合多边形内的所有的点云数据点。
[0114]
请参阅图5,图5为本发明提供的一种计算机可读存储介质的实施例示意图。如图5所示,本实施例提供了一种计算机可读存储介质500,其上存储有计算机程序511,该计算机程序511被处理器执行时实现如下步骤:基于three.js引擎在浏览器中加载并显示三维点云数据;将加载的三维点云数据中的每一个点的三维坐标投影至浏览器所在的二维平面,得到投影后的每一个点的二维坐标;基于用户在浏览器上绘制的闭合多边形,基于投影后的每一个点的二维坐标,利用相交点算法,拾取位于所述闭合多边形内的所有的点云数据点。
[0115]
本发明实施例提供的一种应用于浏览器的三维点云数据点拾取方法及系统,利用three.js引擎在浏览器中加载并显示点云数据,同时利用three.js引擎创建相机对象,用于在浏览器上浏览上述加载并显示的点云数据,利用three.js引擎将点云数据中所有点的三维坐标投影至浏览器所在的二维平面,得到投影后的二维坐标。再根据用户在浏览器上
所绘制的多边形,利用相交点算法,对投影后的二维坐标逐个计算,判断该二维坐标是否位于该多边形内。所有投影后二维坐标在该多边形内的三维点云点即为用户在浏览器上所绘制的多边形所拾取到的点。此方法可以使用户直接在三维视图中进行点云点拾取,且可根据需要任意绘制多边形进行点云点批量精确拾取,解决了光线投射算法在拾取点云点上拾取效率与拾取精度不可兼具的缺点,提升了手工语义分割的效率。
[0116]
需要说明的是,在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详细描述的部分,可以参见其它实施例的相关描述。
[0117]
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
[0118]
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式计算机或者其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0119]
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0120]
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0121]
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
[0122]
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包括这些改动和变型在内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1