CN110276829B - 通过多尺度体素哈希处理的三维表示 - Google Patents
通过多尺度体素哈希处理的三维表示 Download PDFInfo
- Publication number
- CN110276829B CN110276829B CN201910524090.7A CN201910524090A CN110276829B CN 110276829 B CN110276829 B CN 110276829B CN 201910524090 A CN201910524090 A CN 201910524090A CN 110276829 B CN110276829 B CN 110276829B
- Authority
- CN
- China
- Prior art keywords
- voxel
- level
- integer
- coordinates
- voxels
- 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
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/08—Volume rendering
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T17/00—Three dimensional [3D] modelling, e.g. data description of 3D objects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2255—Hash tables
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T19/00—Manipulating 3D models or images for computer graphics
- G06T19/006—Mixed reality
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2210/00—Indexing scheme for image generation or computer graphics
- G06T2210/12—Bounding box
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2210/00—Indexing scheme for image generation or computer graphics
- G06T2210/21—Collision detection, intersection
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2210/00—Indexing scheme for image generation or computer graphics
- G06T2210/56—Particle system, point based geometry or rendering
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Graphics (AREA)
- Software Systems (AREA)
- Geometry (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Computer Hardware Design (AREA)
- Image Generation (AREA)
Abstract
一种用于构建三维(3D)稀疏点图的多尺度体素表示的***和方法。所述方法包括:提供3D稀疏点图;从3D稀疏点图接收3D点的坐标;将3D点的坐标转换为整数坐标;以及当整数坐标未被哈希表的任何体素条目包含时:以尺度级别0来创建新单位体素,尺度级别0是最小体素尺寸;使用整数坐标计算哈希值;将新单位体素***哈希表中;以及沿整数坐标的至少一个轴将新单位体素与相邻体素合并,以获得3D稀疏点图的多尺度体素表示。
Description
交叉引用
在本公开的说明书中引用和讨论了一些参考文献,其可以包括专利、专利申请和各种出版物。提供这些参考文献的引用和/或讨论仅仅是为了阐明本公开的描述,而不是承认任何这样的参考文献是对本文所述公开内容的“现有技术”。本说明书中引用和讨论的所有参考文献通过引用整体并入本文中,相当于每篇参考文献通过引用被单独并入本文中。
技术领域
本公开一般涉及三维(3D)重建,并且更具体地涉及针对移动增强现实(AR)使用多尺度体素哈希处理来进行高效三维表示的***和方法。
背景技术
本文中提供的背景描述是为了总体上呈现本公开的上下文。目前署名的发明人就本背景技术部分中描述的程度所做的工作以及在提交时本来可以不具有现有技术资格的描述方面,既不明确地也不暗示地被认为是针对本公开的现有技术。
增强现实(Augmented Reality,AR)是物理真实世界环境的直接或间接的实时取景,所述物理真实世界环境的元素由计算机生成的感知信息(理想地跨越多个感觉形态,包括视觉、听觉、触觉、体感和嗅觉)“增强”。移动AR技术使用移动电话的相机及其显示器来提供周围物理环境的实时取景,然后所述周围物理环境的实时取景由计算机生成的元素(例如,数字对象)“增强”。移动AR的关键组成部分是单眼同时定位和地图构建(SimultaneousLocalization and Mapping,SLAM),单眼SLAM构建并更新未知环境的地图,同时跟踪相机姿态。
在没有场景几何的附加知识的情况下,单眼SLAM方法通常依赖于运动恢复结构(Structure-From-Motion,SfM)来引导相机跟踪。SfM方法重建场景的初始结构并同时恢复相机姿态。然而,这些重建高达任意尺度。随着传感器融合技术的最新进展,视觉惯性测距(Visual-Inertial Odometry,VIO)变得足够成熟以供商业使用。两个最突出的示例是Apple的ARKit和Google的ARCore平台。通过融合视觉和惯性传感器信息,还可以估计环境的度量尺度。通过精确的相机跟踪和尺度估计,ARKit和ARCore允许将数字对象和信息与物理环境无缝混合。已经有许多利用这种能力的移动应用,例如电子商务、游戏、教育等。然而,这些***尚未解决的一个重要问题是冲突检测和避免。
因此,本领域存在未解决的需求以解决上述缺陷和不足。
发明内容
在某些方面,本公开涉及一种使用计算设备来构建三维(3D)点图的多尺度体素表示的方法。在某些实施例中,所述方法包括:在坐标空间中提供3D点图,所述坐标空间具有x轴、y轴和z轴;从所述3D点图接收3D点的坐标;将所述3D点的坐标转换为整数坐标;将所述整数坐标与哈希表中的体素条目进行比较;以及在确定所述整数坐标不被所述哈希表中的任何所述体素条目包含时:以尺度级别0来创建新单位体素,新单位体素的三个维度中的每一个维度分别具有单位长度的尺寸,所述单位长度的尺寸对应于所述整数坐标沿坐标空间的轴的一个整数单位;使用所述整数坐标计算哈希值;将所述新单位体素***所述哈希表中;以及尝试沿坐标空间的至少一个轴将新单位体素与相邻体素合并,以获得3D点图的多尺度体素表示。
在某些实施例中,合并步骤包括:确定三个相邻m级(即,尺度级别m)体素,其中所述m级体素的最长维度的长度为2m单位,所述三个相邻m级体素与新m级体素位于相同的平面,所述三个相邻m级体素和所述新m级体素属于相同的均一m+1级体素,所述m级体素和所述新m级体素中的每一个的最长维度的长度为2m单位,并且所述均一m+1级体素的所有三个维度的长度均为2m+1单位;以及当所述三个相邻m级体素在哈希表中可得到时:将所述新m级体素和所述三个相邻m级体素组合以形成新m+1级体素,所述新m+1级体素的最长维度的长度为2m+1单位;将所述新m+1级体素添加到所述哈希表;以及从所述哈希表中删除所述三个相邻m级体素和所述新m级体素,在某些实施例中,m是0到9范围内的整数,并且所述新m+1级体素的密度是所述新m级体素和所述三个相邻m级体素的密度之和。在某些实施例中,密度是体素的体积中的点的数量。
在某些实施例中,所述3D点的整数坐标是(xi,yi,zi),所述均一m+1级体素的最接近坐标空间原点的顶点的整数坐标是(xi/2(m+1)*2(m+1),yi/2(m+1)*2(m+1),zi/2(m+1)*2(m+1)),并且每个所述xi/2(m+1),yi/2(m+1),zi/2(m+1)是整数除法。
在某些实施例中,沿xy平面、yz平面和xz平面顺序地尝试合并步骤,并且x、y、z分别对应于3D点图的笛卡尔坐标系的三个轴。在某些实施例中,当沿一个平面的三个相邻m级体素在哈希表中不可得到时,进一步沿其他平面尝试合并步骤。当在一个体素级别处执行了合并时,该方法进一步尝试在下一体素级别上合并。当在某个体素级别处不能合并时,该方法从3D点图接收或取回另一个新的3D点以再次执行上述步骤。
在某些实施例中,可以使用整数除法和乘法来定义均一m级体素的顶点。例如,从体素整数坐标的原点(0,0,0),均一0级体素沿x、y和z轴的长度为1,1,1(20)单位,例如以(0,0,0)作为最接近原点的顶点并且以(1,1,1)作为最远离原点的顶点的立方体;或者以(1,1,1)作为最接近原点的顶点并且以(2,2,2)作为最远离原点的顶点的立方体,并且场景的3D空间用那些0级体素填充;均一1级体素沿x、y和z轴的长度为2,2,2单位,例如以(0,0,0)作为最接近原点的顶点并且以(2,2,2)作为最远离原点的顶点的立方体;或者以(2,2,2)作为最接近原点的顶点并且以(4,4,4)作为最远离原点的顶点的立方体;以及每个均一1级体素占据与8个均一0级体素相同的空间;均一m级体素沿x、y和z轴的长度为2m,2m,2m,例如以(0,0,0)作为最接近原点的顶点并且以(2m,2m,2m)作为最远离原点的顶点的立方体,或以(2m,2m,2m)作为最接近原点的顶点并且以(2m+1,2m+1,2m+1)作为最远离原点的顶点的立方体,并且每个均一m级体素占据与八个均一m-1级体素相同的空间。换句话说,不同级别的体素通过以下来确定:从坐标空间的原点开始计算,并且分别以20,21,22,…2m为单位从原点在三个维度上延伸以定义0,1,2,…m级体素的位置。在某些实施例中,m级体素的最长维度的长度为2m。换句话说,m级体素的一个、两个或三个维度的长度为2m单位,而m级体素的0个、另一个或另外两个维度的长度小于2m单位,例如2m-1、2m-2或20单位。当m级体素的所有三个维度都具有2m单位的均一长度时,体素可以被命名为均一m级体素。
在某些实施例中,3D点图是3D稀疏点图。
在某些实施例中,通过将坐标与缩放比例整数相乘,将3D点的坐标转换为整数坐标。在某些实施例中,缩放比例整数在10至1000的范围内。在某些实施例中,缩放比例整数在50至200的范围内。在一个实施例中,缩放比例整数是100。
在某些实施例中,3D点的整数坐标是(xi,yi,zi),以及将整数坐标与哈希表中的体素条目进行比较的步骤包括:基于坐标(xi/2m*2m,yi/2m*2m,zi/2m*2m)计算m级体素的哈希值;以及将整数坐标(xi,yi,zi)和由哈希值索引的均一m级体素条目的坐标进行比较。当整数坐标(xi,yi,zi)被由哈希值索引的任何均一m级体素条目包含时,确定整数坐标(xi,yi,zi)被包含在哈希表中的体素条目中。这里的实施例涉及均一体素搜索,即,体素沿三个轴具有相同的级别。
在某些实施例中,执行非均一搜索。在那些实施例中,3D点的整数坐标是(xi,yi,zi),将整数坐标与哈希表中的体素条目进行比较的步骤包括:基于坐标(xi,yi,zi)和级别尺度lx、ly和lz计算m级体素的哈希值;以及将整数坐标(xi,yi,zi)和由哈希值索引的对应m级体素条目(如果可得到)的坐标进行比较。当整数坐标(xi,yi,zi)被由哈希值索引的且具有沿三个轴对应尺度级别的任何m级体素条目包含时,确定整数坐标(xi,yi,zi)被包含在哈希表中的体素条目中。具体地,包含3D点(xi,yi,zi)的潜在m级体素的集合表示为(xi/2h*2h,yi/2k*2k,zi/21*21,h,k,l),其中,h、k和l是范围为从0至m的正整数。因为体素是m级体素,所以h、k和l中的至少一个等于m,并且其他两个等于或小于m。当h、k和l相等时,表示与均一搜索相同。对于每个体素(xi/2h*2h,yi/2k*2k,zi/21*21,h,k,l),计算哈希值,并执行搜索以确定体素(xi/2h*2h,yi/2k*2k,zi/21*21,h,k,l)是否由哈希表中计算的哈希值索引。在某些实施例中,搜索步骤通过固定h=m开始,并且从0至m运行k和l,其对应于搜索m*m体素;然后固定k=m,并从0至(m-1)运行h,并且从0至m运行l,其对应于搜索(m-1)*m个体素;最后固定l=m,并且从0至(m-1)运行h,和从0至(m-1)运行k,其对应于搜索(m-1)*(m-1)个体素。上述过程可以变化。在某些实施例中,针对h、k和l的所有上述三种计算是从0至m,并且某些体素的重复计算(例如,h=m、k=m和l=m)不会浪费很多计算资源。在某些实施例中,搜索步骤执行均一搜索,然后执行非均一搜索。在某些实施例中,仅执行非均一搜索,其包括当h、k和l相同时的均一搜索的情况。
总之,可以从h,k,l中的每一个等于0开始执行搜索;然后,h,k,l中的每一个<=1且h,k,l中的至少一个等于1;然后,h,k,l中的每一个<=2且h,k,l中的至少一个等于2;......;并且然后,h,k,l中的每一个<=m且h,k,l中的至少一个等于m,直到体素(xi/2h*2h,yi/2k*2k,zi/21*21,h,k,l)被发现以存储在哈希表中或直到达到阈值级别m并且没有包含整数坐标(xi,yi,zi)的体素条目。
在某些实施例中,哈希表中的每个体素条目的形式为{xi,yi,zi,lx,lv,lz,d},其中,xi,yi,zi是最接近原点的体素顶点的整数坐标,lx、ly和lz是沿x、y和z方向的体素尺度级别,并且d是体素条目的密度。
在某些实施例中,该方法还包括将3D点图与场景的真实世界坐标对齐。例如,使用惯性信息将y轴与竖直方向对齐,通过先检测墙面将x或z方向与房间的墙对齐。
在某些实施例中,该方法还包括通过以下步骤检测并避免3D模型和3D点图的冲突:将3D模型转换为3D表示;以及确定所述3D模型的3D表示是否与所述3D点图的多尺度体素表示重叠。在某些实施例中,3D模型的3D表示包括体素表示、边界框表示和边界球表示。关于边界框表示,3D模型可以由一个边界框或一组边界框表示。
在某些实施例中,在当前正在处理的点的整数坐标已被哈希表的任何体素条目包含时:将所述一个体素条目的密度加1。这里,密度表示对应体素中包含的3D点的数量。然而,密度不限于3D点的数量,而是可以是3D点的其他性质。
在某些方面,本公开涉及用于构建三维(3D)点图的多尺度体素表示的***。在某些实施例中,该***包括计算设备。计算设备具有处理器和存储计算机可执行代码的存储设备。当在处理器处执行时所述计算机可执行代码,计算机可执行代码被配置为:在坐标空间中提供3D点图,所述坐标空间具有x轴、y轴和z轴;从所述3D点图接收3D点的坐标;将所述3D点的坐标转换为整数坐标;将所述整数坐标与哈希表中的体素条目进行比较;以及在确定所述整数坐标或3D点被所述哈希表中的任何所述体素条目包含时:以尺度级别0创建新单位体素,新单位体素的三个维度中的每一个维度分别具有单位长度的尺寸,所述单位长度的尺寸对应于所述整数坐标沿坐标空间的轴的一个整数单位;使用所述整数坐标计算哈希值;将所述新单位体素***所述哈希表中;以及尝试沿所述坐标空间的至少一个轴将所述新单位体素与相邻体素合并,以获得所述3D点图的多尺度体素表示。这里,坐标空间指示3D点图或3D体素表示的坐标空间,其中3D点图和3D体素表示共享相同的3D空间。
在某些实施例中,计算机可执行代码被配置为通过以下步骤合并新体素:确定三个相邻m级体素,其中所述三个相邻m级体素与新m级体素位于相同的平面,所述三个相邻m级体素和所述新m级体素属于相同的均一m+1级体素,所述m级体素和所述新m级体素中的每一个的最长维度的长度为2m单位,并且所述均一m+1级体素的所有三个维度的长度均为2m+1单位;以及当所述三个相邻m级体素在哈希表中可得到时:将所述新m级体素和所述三个相邻m级体素组合以形成新m+1级体素,所述新m+1级体素的最长维度的长度为2m+1单位;将所述新m+1级体素添加到所述哈希表;以及从哈希表中删除三个相邻m级体素和新m级体素,其中m是0到9范围内的整数,并且所述新m+1级体素的密度是所述新m级体素和所述三个相邻m级体素的密度之和。
在某些实施例中,所述计算机可执行代码被配置为在由所述x轴和所述y轴定义的xy平面上、在由所述y轴和所述z轴定义的yz平面上以及在由所述x轴和所述z轴定义的xz平面上顺序地尝试合并体素。
在某些实施例中,3D点图是3D稀疏点图,计算机可执行代码被配置为通过将坐标与缩放比例整数相乘来将3D点的坐标转换为整数坐标,并且缩放比例整数在10到1000的范围内。
在某些实施例中,哈希表中的每个体素条目的形式为{xi,yi,zi,lx,lv,lz,d},其中,xi,yi,zi是最接近原点的顶点的整数坐标,lx、lv和lz是沿x、y和z方向的体素尺度级别,并且d是体素的密度。
在某些实施例中,计算机可执行代码还被配置为通过以下步骤检测并避免3D模型和3D点图的冲突:将3D模型转换为3D表示;确定所述3D模型的3D表示是否与所述3D点图的多尺度体素表示重叠。在某些实施例中,3D模型的3D表示包括体素表示、边界框表示和边界球表示。关于边界框表示,3D模型可以由一个边界框或一组边界框表示。
在某些方面,本公开涉及存储计算机可执行代码的非暂时性计算机可读介质。当在计算设备的处理器处执行所述计算机可执行代码时,所述计算机可执行代码被配置为执行如上所述的方法。
从以下结合附图对优选实施例的详细描述,本公开的这些和其他方面将变得更加清楚,尽管可以在不脱离本公开的新颖构思的精神和范围的情况下进行多种改变和修改。
附图说明
附图示出了本公开的一个或多个实施例,并与书面描述一起用于解释本公开的原理。在任何可能的地方,贯穿附图,相同的附图标记用于表示实施例的相同或类似的部件。
图1示意性地描绘了根据本公开的某个实施例的计算设备。
图2A-2C示意性地描绘了根据本公开的某个实施例的哈希表结构。
图3A示意性地描绘了根据本公开的某些实施例的均一多尺度体素合并过程。
图3B示意性地描绘了根据本公开的某些实施例的沿坐标空间的三个轴具有非均一尺度的多尺度体素合并过程。
图4描绘了根据本公开的某些实施例的通过多尺度体素哈希处理来重建三维地图的方法。
图5A描绘了根据本公开的某些实施例的合并(具有均一合并)的流程图。
图5B描绘了根据本公开的某些实施例的合并(没有均一合并)的流程图。
图6A-6F示意性地描绘了应用于办公室厨房上的本公开的示例。
图7A-7D示意性地描绘了应用于储藏室上的本公开的示例。
图8A-8B示意性地描绘了应用于桌子上的本公开的示例。
图9A示意性地描绘了根据本公开的某些实施例的多尺度体素表示统计。
图9B示意性地描绘了与运行时间有关的多尺度体素表示的变化和3D点的变化。
图9C示意性地描绘了与单尺度体素表示相比的多尺度体素表示的减小率。
图10A-10D示意性地描绘了根据本公开的某些实施例的冲突检测结果。
具体实施方式
在以下示例中更具体地描述了本公开,这些示例仅用于说明,因为其中的许多修改和变化对于本领域技术人员来说将是显而易见的。现在详细描述本公开的各种实施例。参考附图,在所有视图中相同的数字表示相同的组件。如本文的描述和随后的权利要求中所使用的,“一”,“一个”和“该”的含义包括复数指代,除非上下文另有明确说明。此外,如本文的描述和随后的权利要求中所使用的,“在......中”的含义包括“在......中”和“在......上”,除非上下文另有明确说明。此外,为了方便读者,可以在说明书中使用标题或副标题,这不会影响本公开的范围。另外,本说明书中使用的一些术语在下面更具体地定义。
本说明书中使用的术语通常在本领域、在本公开的上下文中以及在使用每个术语的特定上下文中具有其普通含义。用于描述本公开的某些术语在下文或说明书中的其他地方讨论,以向从业者提供关于本公开的描述的附加指导。应当理解,可以以不止一种方式说同样的事情。因此,替代语言和同义词可以用于本文所讨论的任何一个或多个术语,并且对于术语是否在本文中详细阐述或讨论也没有任何特殊意义。提供了某些术语的同义词。一个或多个同义词的叙述不排除使用其他同义词。本说明书中任何地方的示例(包括本文中讨论的任何术语的示例)的使用仅是说明性的,并且决不限制本公开或任何示例性术语的范围和含义。同样地,本公开不限于本说明书中给出的各种实施例。
将理解,当提及元件在另一元件“之上”时,该元件可以直接在该另一元件之上,或者可以存在介于中间的中间元件。相反,当元件称作在另一个元件的″直接上面″时,不存在中间元件。本文中所使用的术语“和/或”包括相关联列出项目中的一个或多个的任意和所有组合。
将理解,虽然本文中可以使用术语“第一”、“第二”、“第三”等来描述各种元件、组件、区域、层和/或部分,但是这些元件、组件、区域、层和/或部分不应受这些术语限制。这些术语仅用于区分一个元件、组件、区域、层或部分与另一元件、组件、区域、层或部分。因此,在不脱离本公开的教导的前提下,以下讨论的第一元件、组件、区域、层或者部分可以被称为第二元件、组件、区域、层或者部分。
此外,在本文中可以使用诸如“下”或“底”和“上”或“顶”的相对术语来描述一个元件与图示另一个元件的关系。应当理解,除了附图中所描绘的取向之外,相对术语旨在包括器件的不同取向。例如,如果一幅图中的器件翻转,则被描述为位于其它元件的“下”侧的元件将被取向在其它元件的“上”侧。因此,示例性术语“下”可以包含“下”和“上”二者的朝向,这取决于图的特定取向。类似地,如果一幅图中的器件翻转,则被描述为位于其它元件的“下方”或“下侧”的元件将被取向在其它元件的“上方”。因此,“下方”或“下侧”的示例性术语可以包括上下取向二者。
除非另外定义,否则这里使用的所有术语(包括技术和科学术语)具有与本公开所属领域的普通技术人员通常所理解的含义相同的含义。还将理解的是,诸如在常用词典中定义的术语应被解释为其含义与在相关技术和/或本申请的上下文中的含义相同,而不应将其解释为理想的或过于正式的含义,除非本文明确如此定义。
如本文所用,“大约”,“大概”,“基本上”或“近似”通常意指在给定值或范围的20%、优选10%、更优选5%内。本文给出的数值是近似的,意味着如果没有明确说明,可以推断出术语“大约”,“大概”,“基本上”或“近似”。
如本文所用,“多个”意指两个或更多个。
如本文所用,术语“包含”,“包括”,“携带”,“具有”,“含有”,“涉及”等应理解为开放式的,即,意味着包括但不限于。
如本文所使用的,短语A、B和C中的至少一个应该被解释为使用非排他逻辑OR意指逻辑(A或B或C)。应当理解,方法内的一个或多个步骤可以以不同的顺序(或同时)执行,而不改变本公开的原理。
如本文所使用的,术语“模块”可以指代专用集成电路(ASIC);电子电路;组合逻辑电路;现场可编程门阵列(FPGA);执行代码的处理器(共享、专用或组);提供所述功能的其他合适的硬件组件;或者上述部分或全部的组合(例如,在片上***中),可以是上述器件的一部分或包括上述器件。术语模块可以包括存储由处理器执行的代码的存储器(共享、专用或组)。
本文使用的术语“代码”可以包括软件、固件和/或微代码,并且可以指代程序、例程、函数、类和/或对象。如上所使用的术语“共享”意味着可以使用单个(共享)处理器来执行来自多个模块的一些或所有代码。另外,来自多个模块的一些或所有代码可以由单个(共享)存储器存储。如上所使用的术语组意味着可以使用一组处理器来执行来自单个模块的一些或所有代码。另外,可以使用一组存储器来存储来自单个模块的一些或所有代码。
本文使用的术语“接口”通常是指用于在组件之间执行数据通信的组件之间的交互点处的通信工具或装置。通常,接口可以适用于硬件和软件二者的级别,并且可以是单向或双向接口。物理硬件接口的示例可以包括电连接器、总线、端口、电缆、终端和其他I/O设备或组件。与接口通信的组件可以是例如计算机***的多个组件或***设备。
公开的概述
如上所述,在移动AR***中没有解决冲突检测和避免。通常,一旦将数字对象放置在物理环境中,它们就可以自由地移动。这可能导致数字对象和真实对象占据相同的物理空间,从而导致不切实际的感知。
为了在移动设备上以高效的方式解决该问题,在某些方面,本公开提供了一种多尺度体素哈希处理算法。该方法将单眼SLAM***生成的3D点作为输入,并使用哈希表将数据存储到体素中。附近的点可能由一个共同的体素表示。此外,提供自下而上的体素合并以减少总内存占用。此外,由于体素哈希处理方案隐含地去除了冗余的3D点,因此不需要帧之间的点对应来识别重复点。这允许根据本公开的某个实施例的方法与ARKit和ARCore一起工作,其中这种对应数据是适当的并且开发者不可访问。
在某些方面,提供了一种能够处理由SLAM***捕获的3D稀疏点云的方法。在某些实施例中,该方法还能够实现冲突检测和避免,这对AR应用的真实性具有显著影响。此外,如果可以使用外部设备或使用基于范围的SLAM算法实时跟踪扫描设备的姿态,则该方法还可以与其他类型的范围扫描仪一起工作。3D重建方法可以创建精细模型,并且创建的精细模型最终可以用于冲突检测和避免。然而,详细的3D重建不仅在计算上昂贵,而且也是不必要的。因此,在某些实施例中,本公开针对移动AR应用使用一组多尺度体素来表示3D环境。除其他之外,这些实施例具有以下优点:
1.使用由VIO***生成的稀疏点集进行高效的3D表示。
2.多尺度自下而上合并方案高效地将体素合并在一起并减少存储器占用。
3.一种易于实现的用于移动AR应用的冲突检测和避免方法。
在本公开的一个方面,提供了一种方法来扩展体素哈希处理方案并将其应用于由VIO***生成的稀疏点云数据。该方法允许在AR应用中的数字对象和物理对象之间容易且快速地进行冲突检测和避免。
对于稀疏点数据,使用常规网格进行存储是并不有效,因为大多数体素将被标记为空。分层树状数据结构将缓解这个问题,但它仍然在计算上成本高。此外,使用诸如等曲面之类的共同表面重建算法从稀疏体积数据创建表面是不切实际的。在某些实施例中,该方法使用空间体素哈希处理方案:针对每个点使用其整数坐标计算哈希值,然后将体素数据存储在哈希表中。利用这种哈希处理机制,体素的数量仍然随着输入3D点的数量而增加。当场景的区域包含丰富的纹理时,哈希表中会有很多条目。这限制了执行某些任务(例如避免冲突)的能力。必须针对数字对象测试每个小体素以检测冲突。为了解决该问题,在某些实施例中,提供了多尺度自下而上合并过程,其可以有效地将体素合并在一起以减少存储器占用。
在某些实施例中,该方法包括体素哈希处理。对于每个点,体素哈希处理的步骤使用以下公式(1)将3D点的整数坐标(xi,yi,zi)映射到哈希值:
其中,p1、p2和p3是大质数,n是哈希表中的槽的数量。通过仅保留3D坐标(xr,yr,zr)的整数分量来从3D图中的3D坐标(xr,yr,zr)导出整数坐标(xi,yi,zi)。在某些实施例中,在导出整数坐标(xi,yi,zi)之前执行3D坐标(xr,yr,zr)的进一步修订。具体地,如果3D点的3D坐标(xr,yr,zr)包含负数,在导出整数坐标(xi,yi,zi)前将负坐标(xr,yr,zr)转换为正坐标。可以通过向(xr,yr,zr)的每个维度添加正偏移I来执行变换,以获得(xr+I,yr+I,zr+I),然后xi,yi,zi分别是xr+I,yr+I,zr+I的整数分量。例如,正数I可以是10,以确保所有负坐标都可以变为正。此外,在某些实施例中,如果3D点的3D坐标(xr,yr,zr)的整数分量具有有限的位数,则坐标(xr,yr,zr)在哈希处理之前乘以缩放比例整数S。例如,在ARKit中,以米为单位来指定坐标。因此,测量具有0或1位整数分量。在某些实施例中,S=100用于按比例缩放3D点的世界坐标(xr,yr,zr),以得到(xr*100,yr*100,zr*100),然后xi,yi,zi分别为xr*100,yr*100,zr*100的整数分量。当S=100时,在去除小数分量以得到整数坐标(xi,yi,zi)之后,具有相同整数坐标的点由单位体素隐式表示,单位体素的尺寸为1cm3。在某些实施例中,当需要从负变为正和整数按比例缩放二者时,坐标(xr,yr,zr)可以导出整数坐标((xr+I)*100,(yr+I)*100,(zr+I)*100)。在某些实施例中,在冲突计算之前使用偏移I和缩放比例因子S来变换来自数字模型的坐标,使得虚拟对象和体素表示共享相同的坐标空间。当多个体素映射到相同的哈希值时,发生哈希表冲突。为了处理这一点,在某些实施例中,体素条目的链表存储在每个哈希表槽中。每当创建新体素条目时,将新体素条目***到对应哈希表槽处的列表末尾。
在某些实施例中,每个体素条目包含体素的整数坐标(xi,yi,zi),并且每个体素还存储密度值d,其等于该体素限定的点的数量。在某些实施例中,该方法使用密度值d来过滤掉在冲突计算期间包含少量点(例如<50)的体素,从而去除由VIO***产生的可能的异常值。
在体素哈希处理之后,根据某些实施例的方法创建多尺度体素表示。单位体素被定义为沿坐标空间的所有三个轴具有一个单位的长度,或者被定义为沿坐标空间的所有三个轴具有尺度级别0。单位体素的单位尺寸mv可以通过缩放比例整数S来控制。例如,对于公制坐标,S=100对应于mv=1cm,而S=10对应于mv=10cm。小的S值导致大的体素单位尺寸并且大的S值导致小的体素单位尺寸。如果mv太小,则对于冲突检测和避免,该方法可能遇到大内存占用的风险以及更高计算成本。如果mv太大,则所得到的3D表示可能会过度简化并且不够紧密。在某些实施例中,为了缓解该问题,该方法引入了多尺度体素哈希处理表示。
在某些实施例中,关键构思是在每个体素处包括级别值l。在某些实施例中,术语级别与尺度级别可交换使用。这允许该方法在哈希表中存储不同尺寸的体素。对于输入3D点,该方法首先对存储在哈希表中的体素条目执行搜索,并检查该点是否已被任何体素包含。这里,3D点可以被处于不同尺度级别的不同体素包含,并且处于不同尺度级别的那些体素的哈希值可以彼此不同。将3D点与处于不同尺度级别的那些体素条目进行比较以找到匹配。如果未找到体素,则该方法针对此点以最小尺度创建新单位体素。在单位体素中,存储整数坐标(xi,yi,zi)及其尺度级别l=0。
一旦将体素添加到哈希表,该方法使用递归过程将相邻体素合并成更高级别的体素。在某些实施例中,使用直接的方式沿三个轴均一地合并。如果在下一级别形成体素的所有八个体素都存在于哈希表中,则去除八个体素并且将更高级别的新体素***到哈希表中。新体素的密度是来自8个较小体素的所有密度之和。重复该过程,直到不能合并更多体素或达到预定义的最大体素级别。对于任何体素,可以使用整数除法和乘法从哈希表中容易地定位形成下一级别的体素的七个伙伴体素。然而,这种方法可能不是高效的,因为它需要在合并八个体素之前占据所有八个体素。对于场景内部不可见的表面数据,这尤其困难。
在某些实施例中,为了提高效率,该方法针对三个维度中的每一个使用不同的尺度级别:lx,lv,lz。在将新单位体素***到哈希表中之后,如果可能的话,该方法将在三个维度中的两个维度上合并四个体素,所述四个体素形成下一级别的体素。例如,如果形成的较大体素的四个体素的x,y维度处于1级但z维度处于0级,则该方法继续进行合并这四个体素并***lx=1,lv=1,lz=0的新体素。以这种方式,可以有效地表示近似轴对齐的平面结构。
在某些实施例中,该方法调整用于合并体素的标准以允许更大的灵活性。在某些实施例中,当形成下一级别的体素的四个体素中的三个存在于哈希表中时,该方法创建新体素并从数据结构中去除所述三个体素。
在某些实施例中,如果可能,该方法沿一个轴合并两个体素。以这种方式,可以使用该方法表示细长结构。
在某些实施例中,体素是轴对齐的。换句话说,体素与空间的坐标轴对齐,但是这些坐标轴不一定与现实世界中的房间取向对齐。当VIO***引导相机跟踪时,这些坐标轴取决于移动设备的初始取向。为了解决该问题,在某些实施例中,该方法使用竖直平面检测来估计房间的取向。例如,在根据本公开的某些实施例的AR应用中,执行的AR应用引导用户扫描具有竖直表面的强存在的场景的部分。然后,从重建的3D点开始,应用使用RNASAC算法来鲁棒地估计垂直于地平面的平面。地平面取向可以通过移动电话上的运动感测硬件来估计。当竖直平面的内围层的数量大于阈值时,应用使用平面的法线作为新的x轴,并将所有捕获的3D点转换为新的坐标系。在某些实施例中,简单的旋转就足够了,因为y轴总是指向与如ARKit或ARCore的VIO***中的运动感测硬件所检测到的重力的反方向。
在某些实施例中,可以使用根据本公开的多尺度体素表示来高效地计算冲突检测。数字对象可以由边界框、边界框组、边界圆柱或甚至一组多边形或体素来表示。在某些实施例中,数字对象被转换为一组3D点,并且3D点由另一组多尺度体素表示。在某些实施例中,在冲突计算之前使用偏移因子I和缩放比例因子S来变换数字模型的顶点或点的坐标,使得虚拟对象和环境的体素表示共享相同的坐标空间。实时地,将几何形状与所有多尺度体素进行比较。因为体素都是箱形的,所以可以高效地检测冲突。例如,为了检测两个箱之间的冲突,该方法仅需要检查两个箱是否在所有三个维度处重叠,每个箱需要两次比较。这导致仅3*2=6次比较。在某些实施例中,仅当针对鲁棒性与数字对象冲突的体素的数量大于阈值(例如,10)时才检测到冲突。在典型的ARKit或ARCore应用中,首先确定水平支撑平面(地面或台面)。然后将数字对象放置在支撑平面上以进行查看和交互。在冲突检测期间,根据本公开的某些实施例的方法省略了足够靠近支撑平面的那些体素;否则,来自支撑平面的特征点将导致与数字对象的意外冲突。
本公开的实现
本公开涉及计算机***。如附图中所示,计算机组件可以包括物理硬件组件和虚拟软件组件,物理硬件组件被示为实线块,虚拟软件组件被示为虚线块。除非另有说明,否则本领域普通技术人员将理解,这些计算机组件可以以软件、固件或硬件组件的形式或其组合来实现,但不限于软件、固件或硬件组件的形式或其组合来实现。
本文描述的装置、***和方法可以由一个或多个处理器执行的一个或多个计算机程序实现。计算机程序包括存储在非暂时性有形计算机可读介质上的处理器可执行指令。计算机程序还可以包括存储的数据。非暂时性有形计算机可读介质的非限制性示例是非易失性存储器、磁存储设备和光存储设备。
下文中参考示出本公开的实施例的附图,将更全面地描述本公开。然而,本公开可以按多种不同形式来实现,并且不应当被解释为受到本文阐述的实施例的限制。更确切地说,提供这些实施例使得本公开将是全面和完整的,并且将本公开的范围全面地传达给本领域技术人员。
图1示意性地描绘了根据本公开的某些实施例的计算设备,其可以是AR***的一部分。AR***可以包括一个或多个计算设备和与计算设备通信的一个或多个服务器。在某些实施例中,计算设备可以是移动设备、平板计算机、通用计算机、无头计算机、可穿戴设备、专用计算机、服务器计算机、集群或云计算机,其提供增强现实服务。在某些实施例中,计算设备优选地是一个或多个移动设备,诸如智能电话、可穿戴设备或平板计算机。如图1所示,计算设备100可以包括但不限于处理器102、存储器104、存储设备106、一个或多个视觉传感器130以及一个或多个惯性测量单元(Inertial Measurement Units,IMU)150。在某些实施例中,计算设备100可以充当服务器并且从外部设备接收和处理3D图以用于重建,并且视觉传感器130和IMU 150不是必需的。在某些实施例中,计算设备100可以包括其他硬件组件和软件组件(未示出)以执行其对应的任务。这些硬件和软件组件的示例可以包括但不限于其他所需的存储器、接口、总线、输入/输出(I/O)模块或设备、光检测和测距(LightDetection and Ranging,LIDAR)传感器网络接口以及***设备。
处理器102可以是中央处理单元(Central Processing Unit,CPU),其被配置为控制计算没备100的操作。处理器102可以执行计算设备100的操作***(Operating System,OS)或其他应用。在一些实施例中,计算设备100可以具有多于一个CPU作为处理器,例如两个CPU、四个CPU、八个CPU或任何合适数量的CPU。
存储器104可以是易失性存储器,例如随机存取存储器(Random-Access Memory,RAM),用于在计算设备100的操作期间存储数据和信息。在某些实施例中,存储器104可以是易失性存储器阵列。在某些实施例中,计算设备100可以在一个以上的存储器104上运行。
存储设备106是用于存储OS(未示出)和计算设备100的其他应用的非易失性数据存储介质。存储设备106的示例可以包括非易失性存储器,诸如闪存、存储卡、USB驱动器、硬盘驱动器、软盘、光盘驱动器或任何其他类型的数据存储设备。在某些实施例中,计算设备100可以具有多个存储设备106,其可以是相同的存储设备或不同类型的存储设备,并且计算设备100的应用可以存储在计算设备100的一个或多个存储设备106中。。如图1所示,存储设备106包括3D重建应用110(“应用”)。3D重建应用110提供用于高效增强现实服务(例如,在线购物)的平台。
3D重建应用110包括3D点图模块112、3D点接收模块114、整数计算模块116、坐标搜索模块118、体素创建模块120、哈希值计算模块122、哈希表模块124和合并模块126等等。在某些实施例中,3D重建应用110可以包括模块112-126的操作所需的其他应用或模块。应当注意,每个模块由共同形成一个应用的计算机可执行代码或指令或数据表或数据库实现。在某些实施例中,每个模块还可包括子模块。或者,一些模块可以组合为一个堆叠。在其他实施例中,某些模块可以实现为电路而不是可执行代码。在某些实施例中,3D重建应用110的一些模块(例如,3D点图模块112)可以位于远程计算设备处,并且3D重建应用110的其他模块通过有线或无线网络与远程计算设备中的3D点图模块112通信。
3D点图模块112被配置为在从视觉传感器130接收捕获的图像时,计算视觉传感器130的姿态并构建环境的3D点图。3D点图模块112可以使用来自视觉传感器130的连续捕获的2D图像连续地更新3D点图。在某些实施例中,3D点图模块112使用捕获的图像执行SLAM以获得3D点图。视觉传感器130可以是一个或多个相机。相机的姿态可以表示为三度平移和三度旋转,并且3D图可以是点图,所述点图形成为特征点的点云。每个特征点具有特定的特征描述符,所述特定的特征描述符基于2D图像中的对应特征点的特征。在某些实施例中,3D点图模块112将由IMU150收集的惯性数据与由视觉传感器130捕获的视觉数据融合以建立3D点图。在某些实施例中,3D点图模块112可以由ARKit、ARCore或其他定制的SLAM模块提供。3D点图可以是密集图或稀疏图。在某些实施例中,3D图不限于基于点的图,并且基于体积的图也可以用作3D重建的输入。在该实施例中,图由计算设备100创建。在其他实施例中,输入3D图还可以由与计算设备100通信的其他计算设备构建。
3D点接收模块114被配置为从3D点图模块112接收3D点图的3D点。在某些实施例中,当3D点图模块112更新其3D点图时,更新的点被发送给3D点接收模块114或由3D点接收模块114取回,并且3D点的处理是逐个的。所接收的3D点的信息包括3D点图中的3D点的坐标,例如,(xr,yr,zr)。在接收到3D点之后,3D点接收模块114被配置为将该点发送给整数计算模块116。在某些实施例中,3D点被顺序地或有时随机地逐个接收和处理。在其他实施例中,3D点接收模块114还可以接收或取回一批3D点并处理该批3D点。在某些实施例中,3D点接收模块114还可以从另一计算设备接收3D点,并且随后为另一计算设备执行3D重建。
整数计算模块116被配置为在接收到3D点(具体地,3D点的坐标(xr,yr,zr))时,将3D点的坐标转换为整数坐标(xi,yi,zi),并将整数坐标发送给坐标搜索模块118。3D点坐标的整数分量用作输入(关键字(key))以计算哈希值(哈希码)。取决于3D点图模块112的坐标系,3D点的坐标(xr,yr,zr)可以具有有限的位数。例如,在由ARKit准备的3D点图中,以米为单位指定坐标,并且如果测量常规尺寸的房间,则测量通常给出0或1位整数分量。有限数量的整数分量容易导致太多3D点以致于不能具有相同的哈希值。为了避免针对相同哈希值的太多体素条目,整数计算模块116将原始坐标与缩放比例整数S相乘。基于3D点图中的坐标值的分布,缩放比例整数S可以在约10至10,000的范围内。在某些实施例中,缩放比例整数S在20至500的范围内。在某些实施例中,缩放比例整数S在50至200的范围内。在某些实施例中,缩放比例整数S被设定为100。因此,对于在3D点图中具有坐标(0.0123,0.0245,0.0357)的点,整数计算模块116将坐标与缩放比例整数S=100相乘以获得按比例缩放后的坐标(1.23,2.45,3.57),去除按比例缩放后的坐标的小数分量,并保持按比例缩放后的坐标的整数分量,以获得整数坐标,即(1,2,3)。在某些实施例中,不同维度中的3D点的坐标可以分别与不同的缩放比例整数相乘。在示例中,x、y、z维度的缩放比例整数分别为120、80和50。在某些实施例中,维度的缩放比例整数是基于沿维度的尺寸和复杂度来确定的。例如,如果其中一个维度非常窄,则应用可以对维度使用大的缩放比例整数。在某些实施例中,一些3D点的坐标(xr,yr,zr)的至少一个维度可能是负的。在这种情况下,整数计算模块116被配置为在接收到每个3D点并且在将3D点的坐标(xr,yr,zr)转换为整数坐标(xi,yi,zi)之前将坐标变换为正坐标,并将正坐标转换为整数坐标。在某些实施例中,可以通过将3D点的坐标的每个维度与正数(例如,10)相加来执行变换。在某些实施例中,正数被均一地添加到正被处理的每个3D点的坐标的所有三个维度。在某些实施例中,当需要从负变为正和整数按比例缩放时,坐标(xr,yr,zr)可以通过以下来导出整数坐标:首先将正整数与xr,yr,zr相加,然后将三个和与缩放比例整数相乘以获得按比例缩放后的坐标,最后去除小数分量并保持整数分量以获得整数坐标(xi,yi,zi)。
坐标搜索模块118被配置为在从整数计算模块116接收到3D点的整数坐标时,检查整数坐标(xi,yi,zi)是否存在或是否被任何体素条目包含,如果不,则将结果发送给体素创建模块120,如果是,则将结果发送给哈希表模块124。在某些实施例中,坐标搜索模块118被配置为使用线性搜索算法执行检查。在一个示例中,在哈希表中存在0级体素条目。沿x,y,z轴的体素长度是1个单位,并且体素的八个顶点中的两个顶点是(1,2,3)和(2,3,4)。顶点(1,2,3)是0级体素的最接近坐标系原点的拐角,并且用于定义体素。请注意的是,除非另有说明,否则体素(0级或更高级体素)的最接近坐标系原点的顶点被视为所有贯穿本公开的体素的代表性顶点,并且用于计算体素的哈希值(在其他实施例中,体素的代表性顶点也可以被任意地定义为顶点中的另一个;在另外的实施例中,还可以基于位于体素内的特定位置处的点的坐标来计算哈希值,并且该点不是任何一个顶点)。如果新接收的3D点的坐标为(0.0123,0.0245,0.0357),则3D点的按比例缩放后的坐标为(1.23,2.45,3.57),3D点的整数坐标为(1,2,3),然后3D点被包含在上面的0级体素(1,2,3)中。在另一示例中,在哈希表中存在lx=1、lv=1并且lz=1的体素条目。沿x,y,z轴的体素长度是2单位,并且体素的八个顶点中的两个顶点是(2,2,2)和(4,4,4)。顶点(2,2,2)是体素的最接近坐标系原点的拐角,并且用于将体素与lx=1、lv=1和lz=1一起定义。如果新接收的3D点的坐标为(0.0323,0.0345,0.0357),则3D点的按比例缩放后的坐标为(3.23,3.45,3.57),3D点的整数坐标为(3,3,3),那么3D点被包含在上面的1级体素(2,2,2)中,其中lx=1、ly=1和lz=1。在另一示例中,在哈希表中存在lx=1、ly=1并且lz=0的体素条目。沿x,y,z轴的体素长度分别为2个单位、2个单位和1个单位,并且该体素的八个顶点中的两个顶点是(2,2,0)和(4,4,1)。顶点(2,2,0)是体素的拐最接近坐标系原点的角,用于将体素与lx=1、ly=1和lz=0定义在一起。如果3D点的坐标为(0.0323,0.0345,0.0057),则3D点的按比例缩放后的坐标为(3.23,3.45,0.57),3D点的整数坐标为(3,3,0),则3D点被包含在上面的体素(2,2,0)中,其中lx=1、lv=1和lz=0。换句话说,坐标搜索模块118将确认搜索结果为是。
在某些实施例中,坐标搜索模块118被配置为在从整数计算模块116接收到3D点的整数坐标时,使用整数除法和乘法检查整数坐标是否存在或由任何级别的体素条目包含。具体地,对于具有按比例缩放后的坐标(4.1,5.2,6.3)的3D点,整数坐标是(4,5,6)。坐标搜索模块118首先被配置为识别整数坐标是否具有对应的0级体素。坐标搜索模块118使用整数坐标(4,5,6)计算哈希值(0级哈希值),并且哈希值例如是133。然后,坐标搜索模块118检查存储在槽133内的所有体素条目。如果槽133中的0级体素条目之一具有整数坐标(4,5,6),则坐标搜索模块118确定整数坐标(4,5,6)存在或由该体素包含。如果不是,则坐标搜索模块118进一步检查1级体素。
当坐标搜索模块118确定整数坐标(4,5,6)不具有匹配的0级体素时,则模块被配置为通过整数除法和乘法来识别整数坐标(4,5,6)是否具有对应的1级体素1个体素。坐标搜索模块118对整数坐标(4,5,6)执行除以2(21)和乘以2(21),即,4/2*2=4,5/2*2=4,6/2*2=6,结果为(4,4,6),(4,4,6)与对应1级体素的最接近原点的顶点相对应。换句话说,均一1级体素由其顶点(4,4,6)定义,并且沿x轴、y轴和z轴中的每一个具有2单位的长度。坐标搜索模块118使用整数坐标(4,4,6)计算哈希值(1级哈希值),并且哈希值例如是157。然后坐标搜索模块118检查存储在槽157中的1级体素条目(多个条目),如果由哈希值索引的一个1级体素条目包含整数坐标(4,4,6),则坐标搜索模块118确定整数坐标(4,5,6)被包含在体素中。如果不是,则坐标搜索模块118进一步检查2级体素。
当处理均一体素时执行上述实施例。在其他实施例中,如果应用搜索沿三个轴具有不同尺度值的体素,例如lx=1,lv=1,lz=0,则应用将使用(4/21*21=4,5/21*21=4,6/20*20=6)作为整数坐标执行搜索。换句话说,当搜索1级时,应用将搜索lx=1,ly=1,lz=0;然后lx=0,ly=1,lz=1;然后lx=1,ly=0,lz=1;然后lx=1,ly=0,lz=0;然后lx=0,ly=1,lz=0;然后lx=0,ly=0,lz=1。
当坐标搜索模块118确定整数坐标(4,5,6)不具有匹配的1级体素时,则模块被配置为通过整数除法和乘法来识别整数坐标(4,5,6)是否具有对应的2级体素1个体素。坐标搜索模块118对整数坐标(4,5,6)执行除以4(22)和乘以4(22),即,4/4*4=4,5/4*4=4,6/4*4=4,结果为(4,4,4),(4,4,4)与对应均一2级体素的最接近原点的顶点相对应。换句话说,2级体素由其顶点(4,4,4)定义,并且沿x轴、y轴和z轴中的每一个具有4个单位的长度。坐标搜索模块118使用整数坐标(4,4,4)计算哈希值(2级哈希值),并且哈希值例如是17。然后坐标搜索模块118检查存储在槽17中的2级体素条目(多个条目),如果一个2级体素条目被定义为(4,4,4),则坐标搜索模块118确定整数坐标(4,5,6)包含在该体素(4,4,4)中。如果不是,则坐标搜索模块118进一步检查3级体素。
然后,坐标搜索模块118被配置为检查下一级别。通常,对于n级,坐标搜索模块118对整数坐标(4,5,6)执行整数除以2n并且乘以2n,即,4/2n*2n=a,5/2n*2n=b,6/2n*2n=c(a、b和c是正整数),结果是(a,b,c),其与对应均一n级体素的最接近原点的顶点相对应,即,对应于n级体素的代表性顶点。换句话说,均一n级体素由其顶点(a,b,c)定义,并且沿x轴、y轴和z轴中的每一个具有2n个单位的长度。坐标搜索模块118使用整数坐标(a,b,c)计算哈希值(n级哈希值),并且哈希值例如是Hn。然后坐标搜索模块118检查存储在槽Hn内的体素条目(一个或多个条目),如果由整数坐标(a,b,c)定义的一个n级条目是可得到的,坐标搜索模块118确定整数坐标(4,5,6)被包含在体素(a,b,c)中。如果不是,则坐标搜索模块118进一步检查n+1级体素。
应用具有需要检查的阈值级别,阈值级别在2至20的范围内。在某些实施例中,阈值级别在5至10的范围内。在一个实施例中,阈值是9。如果坐标搜索模块118检查从0级到阈值级别的体素条目并且找不到匹配,则模块确定搜索结果为否。在从低级别到高级别的检查过程期间,每当坐标搜索模块118检查体素条目包含3D点的整数坐标时,检查停止并且坐标搜索模块118确定搜索结果为是。
如上所述,坐标搜索模块118被配置为通过以下步骤确定整数坐标是否存在或被包含在哈希表条目中:确定与整数坐标相对应的n级体素最接近原点的顶点;以及检查在哈希表中是否存在由所述顶点定义的n级条目。可以使用整数除法和乘法来确定顶点,但是不限于此。在某些实施例中,均一n级体素的顶点(最接近3D空间原点的顶点)被如下确定:
(a)*2n<=xi<=(a+1)*2n;
(b)*2n<=yi<=(b+1)*2n;以及
(c)*2n<=zi<=(c+1)*2n,
其中(xi,yi,zi)是3D点的整数坐标,a、b和c是正整数,并且(a*2n,b*2n,c*2n)是n级体素的顶点的整数坐标。当由(a*2n,b*2n,c*2n)定义的n级体素在哈希表中找到时,坐标搜索模块118确定整数坐标(xi,yi,zi)存在或被包含在哈希表中。
请注意的是,对于n级体素,体素可以沿一个、两个或三个轴是n级的,但不必须沿所有三个轴都是n级的。例如,n级体素可以沿x轴是n级的,沿y轴是n-1级的,沿z轴是0级的。
在某些实施例中,坐标搜索模块118还被配置为:当3D点的整数坐标未包含在哈希表中的任何体素条目中时,指示体素创建模块120创建与坐标对应的新单位体素;以及当3D点的坐标被包含在哈希表中的体素条目中时,指示哈希表模块124将3D点的信息(特别是密度)添加到哈希表中的体素条目。
体素创建模块120被配置为在接收到来自坐标搜索模块118的指令时,创建新单位体素。单位体素被定义为具有尺度级别0。尺度级别0体素具有单位长度,所述单位长度可以基于场景识别来预先确定或计算。一旦创建了新体素,体素创建模块120还被配置为填充新体素的信息。具体地,体素创建模块120被配置为指示哈希值计算模块122计算体素的哈希值;使用整数坐标和尺度级别准备体素条目;以及将准备好的体素条目发送给哈希表模块124。
哈希值计算模块122被配置为在从体素创建模块120接收到指令(以计算对应的哈希值)和输入(整数坐标)时,计算3D点的哈希值,并将哈希值发送给哈希表模块124。在某些实施例中,哈希值计算模块122被配置为使用公式(1)计算3D点的哈希值,
H(xi,yi,zi)是具有整数坐标xi、yi和zi的3D点的哈希值。xi、yi和zi是3D点的整数坐标,其仅包括3D点的按比例缩放后的坐标的整数分量。p1、p2和p3是大质数,n是哈希表中的槽的数量。较大的n降低了哈希值冲突的可能性,从而减少了哈希表槽中链接条目的数量。因此,大n将提高性能,但需要更多空间来存储哈希表。在某些实施例中,应用将数量n设定在256至65536的范围内。在某些实施例中,应用将数量n设定在1024至16384的范围内。在一个实施例中,应用将数量n设定为4096。数字n可以是或可以不是2的幂。
在某些实施例中,应用可以不包括特定哈希值计算模块122,并且整数坐标的哈希值可以在搜索过程期间由坐标搜索模块118计算。
哈希表模块124被配置为在从哈希值计算模块122接收哈希值并且从体素创建模块120接收3D点的组装体素条目时,将体素条目***哈希表。具体地,现在对应于3D点的体素条目包括整数坐标和尺度级别。在某些实施例中,体素条目是5元组的形式,即{xi,yi,zi,l,d},其中xi,yi,zi是体素的代表性顶点的整数坐标,1是尺度级别(此处1=0,因为新创建的单位体素处于最小级别0),并且d是体素的密度。在某些实施例中,密度表示体素中的点的数量。因为这个新创建的体素基于一个3D点,换句话说,体素中只有一个点,因此d=1。因此,对于这一点,体素条目是{x1,y1,z1,0,1}。在某些实施例中,为了指示沿不同坐标维度的不同尺度级别,体素条目的形式是7元组,即,{xi,yi,zi,lx,ly,lz,d},其中xi,yi,zi是体素的代表性顶点的整数坐标,lx,lv,lz是沿x、y和z方向的尺度级别(此处lx=0,ly=0,lz=0,因为新创建的单位体素在所有维度处于最小级别0),并且d是体素的密度。因此,对于这一点,体素条目是{x1,y1,z1,0,0,0,1}。请注意的是,哈希表模块124被配置为在***第一体素之前的任何时间设定哈希表。在某些实施例中,应用的哈希表模块124在运行应用的开始时分配空哈希表,其中空哈希表是具有例如4096个空元素的数组。
图2A示出了根据本公开的某些实施例的哈希表条目结构。如图2A所示,体素哈希表具有索引1至10......,对应于使用公式(1)计算的条目的哈希值。体素条目的值(不是哈希值)的形式是如图2B中所示的5元组或如图2C中所示的7元组。每个哈希表槽可以是空的,例如索引号2、6和10,可以指向一个体素条目,例如索引号1、7和9,或者可以指向若干个体素条目的列表,例如索引号3、5和8。在某些实施例中,当体素具有相同的索引(或哈希值)时,哈希表可以使用链处理机制来存储多个体素条目。例如,当多个体素映射到相同的哈希值时,体素条目的链接列表存储在每个哈希表槽中。每当创建新体素条目时,它被***到对应哈希表槽处的列表末尾。请注意的是,具有相同哈希值的体素条目列表在体素表示的3D空间中可以是远程的。
在某些实施例中,哈希表模块124还被配置为预先构建哈希表。例如,哈希表模块124可以指示3D点接收模块114批量接收多个3D点,指示整数计算模块116将3D点的坐标转换为整数坐标,指示体素生成模块120为每个3D点生成单位体素,指示哈希值计算模块122基于对应的整数坐标计算每个3D点的哈希值,并使用整数坐标、沿坐标空间中的每个轴的尺度级别(此处沿三个轴的所有级别为0、最小尺度)和体素的密度构建体素条目。在某些实施例中,执行合并步骤以简化哈希表。
合并模块126被配置为在将3D点的新单位体素条目***哈希表中时,对新添加的体素条目执行递归合并。如上所述,哈希表中新添加的单位体素条目的值为(xi,yi,zi,0,0,0,1)。合并模块126被配置为首先通过以尺度级别0固定z方向来沿x和y轴(或xy平面)执行体素与相邻体素的合并。具体地,新体素具有沿x方向的x相邻体素,其中新体素和x相邻体素属于沿x轴的下一级(1级)的同一体素。x相邻体素位于新体素的左侧或右侧。此外,新体素具有沿y方向的y相邻体素,其中新体素和y相邻体素属于沿y方向的下一级(1级)的同一体素。y相邻体素位于新体素上方或下方。新体素、x相邻体素、y相邻体素、以及沿y方向与x相邻体素相邻的和沿x方向与y相邻体素相邻的另一个体素,一起形成下一级别(1级)的单位。1级体素包括xy平面中的4个0级体素。当四个0级体素中的每一个在哈希表中可得到时,合并模块126被配置为将四个0级体素合并到合并后的1级体素,并删除四个0级体素。每个体素可以由该体素最接近原点的顶点的坐标、沿x轴、y轴、z轴的尺度级别以及密度d来定义,密度d是四个低级别体素的密度之和。
当在x和y方向或xy平面中尺度级别0到尺度级别1合并成功时,合并模块126进一步尝试在xy平面中执行从尺度级别1到尺度级别2的合并,这类似于上面关于从尺度级别0到尺度级别1的合并描述的过程。可以递归地执行合并,直到在尺度级别处没有合并是可得到的(缺少至少一个较低级别的体素单位),或者合并已经达到预定级别,例如,合并停止在预定的尺度级别处。在某些实施例中,预定的尺度级别或停止合并的阈值在3至20的范围内。在某些实施例中,阈值在5至12的范围内。在某些实施例中,阈值是9。
在xy平面中执行合并之后,合并模块126还被配置为在yz平面中类似地执行合并,然后在xz平面中执行合并。在某些实施例中,当xy平面中的合并不成功时,合并模块126在yz平面中执行合并。在某些实施例中,当xy平面中的合并不成功并且在yz平面中合并不成功时,合并模块126在xz平面中执行合并。在某些实施例中,可以以不同的任意顺序或基于场景特征的顺序尝试在xy平面、yz平面和xz平面中的合并。在某些实施例中,即使在一个平面中的合并对于一个或多个轮次成功,也尝试在一个或两个其他平面上的后续合并,其中可以合并长方体形状的体素。例如,具有顶点(0,0,0)和(2,2,1)的长方体形体素可以与具有顶点(0,0,1)和(2,2,2)的另一个长方体形体素合并,以便形成具有顶点(0,0,0)和(2,2,2)的均一1级体素。
在上述实施例中,用于将四个低级体素合并到更高级体素的标准是四个体素均至少包含点。在某些实施例中,标准可以变化,例如,只要四个低级体素中的三个包含点,就可以组合三个低级体素以形成更高级体素。
在上述实施例中,不同维度的合并可以彼此不同,从而形成3D地图的非均一多尺度体素表示。在其他实施例中,不同维度的合并可以是均一的,使得3D地图可以由均一的多尺度体素表示。
图3A示意性地示出了根据本公开的某些实施例的均一多尺度体素合并。在某些实施例中,均一合并由合并模块126执行。如图3A所示,八个相邻的0级体素分别如下定义:
{0,0,0,0,2};
{0,1,0,0,2};
{1,1,0,0,1};
{1,0,0,0,1};
{0,0,1,0,1};
{0,1,1,0,1};
{1,1,1,0,2};和
{1,0,1,0,2}。
体素条目或值的格式为5元组,即{x,y,z,1,d}。x,y,z是最接近原点的体素的代表性顶点的整数坐标。1是尺度级别,此处所有1等于0。d是体素的密度,或体素中的点的数量,点的数量在图3A中为1或2。0级中的8个体素属于同一1级体素。因为属于一个1级体素的八个0级体素中的每一个包含至少一个点,所以合并模块126被配置为将八个体素合并到1级的一个单个体素。合并后的1级体素由以下表示:
{0,0,0,1,12}。
体素条目值{0,0,0,1,12}意味着1级体素的代表性顶点具有坐标0,0,0;体素的级别是1;并且体素的密度为12,即,1级体素中包含的总共12个点。沿x轴、y轴、z轴的低级体素的合并是相同的,并且合并被称为均一合并。
图3B示意性地示出了根据本公开的某些实施例的非均一多尺度体素合并。在某些实施例中,多尺度体素合并由合并模块126执行。如图3B所示,六个尺度级别0体素分别是:
{0,0,0,0,0,0,2};
{0,1,0,0,0,0,2};
{1,1,0,0,0,0,1};
{1,0,0,0,0,0,1};
{0,0,1,0,0,0,1};以及
{1,0,1,0,0,0,1}。
体素条目或值的格式为7元组,即,{xi,yi,zi,lx,ly,lz,d}。xi,yi,zi是体素的最接近原点的代表性顶点的整数坐标。lx,ly,lz是沿x轴、y轴、z轴的尺度级别,此处所有l等于0;d是体素的密度,或体素中的点的数量,该点的数量在图中是一个或两个。如果使用均一多尺度合并,则尺度级别0的六个可得到的体素属于同一1级体素。然而,体素表示缺少八个0级体素当中的另外两个尺度级别0体素,并且不能使用三维上的均一合并来合并。在某些实施例中,合并模块126被配置为沿两个维度而不是三个维度合并四个低级体素。如图3B所示,合并模块126被配置为检查沿x和y轴是否存在四个低级体素。当四个低级体素可用时,合并模块126被配置为将四个低级体素组合成一个体素并且由{0,0,0,1,1,0,6}定义。组合体素沿x和y轴具有尺度级别1,并且沿z轴具有尺度级别0。合并的体素包含6个点。在某些实施例中,如果在xy平面中的合并不可得到,则合并模块126进一步尝试在yz平面中合并。如果在xy平面和yz平面中的合并不可得到,则合并模块126可以进一步尝试在xz平面中合并。通过非均一多尺度合并,可以用简单的体素结构精确地表示诸如墙壁或桌面的平面表面。
在某些实施例中,当沿两个或三个轴的合并不可得到时,合并模块126可以沿一个轴合并体素。在这种情况下,可以高效地表示沿x方向、y方向、z方向之一延伸的条形结构。
视觉传感器130被配置为捕获环境的视觉图像,并且可以是一个或两个红色、绿色和蓝色(RGB)相机。在某些实施例中,视觉传感器130还可以包括灰度级相机、RGB深度(RGBD)相机和深度相机。在某些实施例中,计算设备还可以包括一维(单光束)或2D(扫描)激光测距仪、3D高清晰度激光雷达、3D闪光激光雷达、2D或3D声纳传感器。视觉传感器130被控制以连续地以预定的帧速率实时捕获环境图像。IMU150可以包括加速度计、陀螺仪和磁力计。计算设备100将指示IMU150实时收集特定力、角速率和可选的磁场。
图4描绘了根据本公开的某些实施例的通过多尺度体素哈希处理来重建三维(3D)图的方法。在某些实施例中,该方法由图1中所示的计算设备实现。应特别注意,除非在本公开中另有说明,否则该方法的步骤可以以不同的顺序排列,因此不限于如图4所示的顺序。
如图4所示,在过程402,3D点图模块112提供3D点图。在某些实施例中,3D点图模块112通过VIO***生成3D点图,例如,通过使用多个图像和可选的惯性信息执行SLAM。在某些实施例中,所提供的3D点图是3D稀疏点图,并且每个3D点在点云数据的3D空间中的坐标为(xi,yi,zi)。在某些实施例中,提供3D点图的该步骤可以在远程计算设备中执行。在某些实施例中,代替基于点的地图,***还可以处理基于体积的地图。
在过程404,计算设备100的3D点接收模块114从3D点图模块112接收或取回3D点,然后将3D点的坐标发送给整数计算模块116。接收到的3D点信息包括3D点图中的3D点的坐标,即(xr,yr,zr)。在其他实施例中,该方法还可以成批处理多个点。
在过程406,在接收到具有(xr,yr,zr)的坐标的3D点时,整数计算模块116将坐标(xr,yr,zr)与缩放比例整数S相乘,并去除小数分量以获得整数坐标(xi,yi,zi)。在一个示例中,对于坐标(0.0123,0.0245,0.0357),整数计算模块116使用100的缩放比例整数来乘以坐标以获得按比例缩放后的坐标(1.23,2.45,3.57),并从按比例缩放后的坐标中去除小数分量以获得整数坐标(1,2,3)。然后,整数计算模块116将转换后的整数坐标发送给坐标搜索模块118。在某些实施例中,当针对正被处理的3D点的维度存在负值时,整数计算模块116将坐标变换为正坐标,然后将正坐标转换为整数坐标,如上所述。
在某些实施例中,基于不同场景或场景的不同部分的特性来确定缩放比例因子。较大的缩放比例因子导致较小的单位体素并且为复杂场景制作高分辨率表示,而较小的缩放比例因子导致较大的单位体素并且为简单场景制作低分辨率表示。在某些实施例中,对于不同的场景(例如,办公室厨房、储藏室、桌子和会议室),针对每个场景捕获一系列点云和图像(该分析可以离线执行)。点间距离针对不同场景而变化。当场景更接近相机时,重建的点彼此更接近,从而需要更小的单位体素以更好地近似场景的几何形状。通过对从场景点到相机的距离求平均,从一系列初始帧估计场景深度,并且深度用于确定单位体素尺寸mv。在某些实施例中,使用以下确定的阈值:
mv=2厘米(cm),D<0:75米(m);
mv=4cm,0.75m<D<1m;以及
mv=8cm,D>=1m,
其中D是初始场景深度。
在某些实施例中,mv=2cm,其在公制***中等于S=50。
在过程408,坐标搜索模块118使用3D点的整数坐标对照哈希表中的体素条目执行搜索,以确定是否存在包含3D点的体素条目。具体地,通过检查3D点的整数坐标(xi,yi,zi)是否位于任何体素的立方体内来执行过程408。
在某些实施例中,过程408中的搜索从0级到阈值级别顺序执行,直到找到匹配。在某些实施例中,阈值级别在3至9的范围内。在每个级别,计算体素的代表性顶点的整数坐标的对应哈希值,并且比较该级别的对应于哈希值的体素条目。以下是应用如何执行m级搜索的示例。首先,应用确定包含3D点的m级体素的顶点的坐标为(xi/2m*2m,yi/2m*2m,zi/2m*2m),xi/2m,yi/2m,zi/2m中的每一个是整数除法。然后,应用基于整数坐标(xi/2m*2m,yi/2m*2m,zi/2m*2m)计算均一m级体素的哈希值。之后,应用将整数坐标(xi,yi,zi)与由哈希值索引的均一m级体素条目的坐标进行比较。换句话说,对于特定的哈希值,存在处于不同体素级别的多个体素条目,并且应用将3D点的整数坐标仅与m级体素进行比较,而不与其他更低级的体素或更高级的体素进行比较。当应用发现整数坐标(xi,yi,zi)被由哈希值索引的m级体素条目中的任何一个包含时,应用确定整数坐标(xi,yi,zi)被包含在哈希表中的体素条目中,并停止进一步搜索。当已经搜索了0级至阈值级别并且没有找到匹配时,应用确定3D点不包含在哈希表中的任何体素条目中。在某些实施例中,当m级体素不是均一m级体素时,即,体素的仅一个或两个轴是m级,体素的另一个或两个轴的级别低于m;则可以基于沿不同轴的尺度级别分别执行整数除法,并相应地执行搜索。
当在过程410处未找到包围(xi,yi,zi)的体素时,坐标搜索模块118指示体素创建模块120创建与最小尺度(即,沿所有三个轴的尺度级别0)的3D点对应的新单位体素。
在过程412,一旦创建了新体素,体素创建模块120就指示哈希值计算模块122基于3D点的整数坐标(xi,yi,zi)使用哈希值公式(1)来计算哈希值。
在过程414,哈希表模块124将体素作为哈希表的新条目***,并基于新体素的***执行合并。在某些实施例中,当哈希表尚不可得到时,哈希表模块124还可以构建哈希表。哈希表包括单个体素——一个槽中的新体素,并且哈希表的所有其他槽都是空的。
在某些实施例中,哈希表模块124可以在过程404之前构建具有多个体素的哈希表。例如,哈希表模块124可以指示3D点接收模块114成批接收多个3D点,指示整数计算模块116将3D点的坐标转换为整数坐标,指示体素创建模块120针对每个3D点使用3D点的整数坐标、沿坐标空间中的每个轴的尺度级别(此处全部为0级,最小尺度)和体素的密度(此处,对于单个点为1)生成最小尺度的单位体素,指示哈希值计算模块122基于对应的整数坐标计算每个3D点的哈希值,并使用体素条目构建哈希表或将体素条目***预先创建的空哈希表。在某些实施例中,执行合并步骤以简化发起的哈希表。
在***之后,合并模块126对新添加的3D点的体素条目执行递归合并。哈希表中的新体素条目的格式为(xi,yi,zi,lx,lv,lz,d),其中xi,yi,zi是代表性顶点的整数坐标,lx,ly,lz是新体素的沿x、y和z轴的尺度级别,d是3D点图中点的密度。当体素包含一个点时,d=1。因为新单位体素以沿x,y,z轴的最小尺度级别创建的,所以此处体素的表示为(xi,yi,zi,0,0,0,1)。合并模块126首先沿xy平面执行体素与相邻体素的合并(通过将z方向固定在尺度级别0)。具体地,新体素沿x方向具有x相邻体素,其中新体素和x相邻体素属于沿x方向的下一级(1级)的同一单位。x相邻体素位于新体素的左侧或右侧。此外,新体素沿y方向具有y相邻体素,其中新体素和y相邻体素属于沿y方向的下一级(1级)的同一体素。y相邻体素位于新体素上方或下方。新体素、x相邻体素、y相邻体素、以及沿y方向与x相邻体素相邻的和沿x方向与y相邻体素相邻的另一个体素,一起形成下一级别(此处1级)的单位。1级体素包括四个尺度级别0体素。当四个尺度级别0体素中的每一个在哈希表中可得到时,合并模块126将四个尺度级别0体素沿两个轴合并到合并后的1级体素。合并后的体素的x、y、z坐标是新体素的预定坐标,例如最接近原点的顶点;新体素的尺度级别为(1,1,0),其中沿x和y轴的尺度级别为1,沿z轴的尺度级别为0;密度d是所有四个0级体素中的密度之和,即,四个尺度级别0体素中的总点数。
当沿xy平面的尺度级别0到尺度级别1的合并成功时,合并模块126进一步执行xy平面中的尺度级别1到尺度级别2的合并,这类似于上面关于从尺度级别0到尺度级别1的合并所描述的过程。可以递归地执行合并,直到在某个尺度级别不可能合并(缺少四个较低级别体素中的至少一个较低级别体素),或者合并已经达到预定级别,例如,合并在9级停止。
在沿xy平面执行合并之后,合并模块126进一步类似地沿yz平面执行合并,然后沿xz平面执行合并。在某些实施例中,当xy平面中的合并不成功时,合并模块126在yz平面中执行合并。在某些实施例中,当xy平面中的合并和在yz平面中的合并二者不成功时,合并模块126在xz平面中执行合并。
当合并完成时,合并模块126指示3D点接收模块124从3D点图模块122接收新的3D点,并对新的3D点重复过程404至414。
另外,在过程408之后,当找到哈希表中的体素包含新3D点的整数坐标时,坐标搜索模块118将3D点信息发送给哈希表模块134,并且哈希表模块134在过程416更新找到的体素的密度。具体地,对应的体素可以是任何尺度级别的体素,只要新3D点的整数坐标在体素的长方体内即可。相应体素的密度增加1,这意味着在体素内又找到了一个3D点。
通过完成上述过程,创建了多尺度体素表示。
图5A描绘了根据本公开的某些实施例的合并(采用均一合并)的流程图。在该流程图中,组合了均一合并和非均一合并。在其他实施例中,本公开可以仅包括均一合并或仅包括非均一合并。请注意的是,不同流程图路径中的数字m可以是不同的整数。此外,应用可以将阈值设置为m,使得当完成阈值级别的合并时,应用停止合并过程并接收和处理另一个3D点。因此,一轮合并可以停止,因为没有可能的合并可得到或者因为有足够轮次的成功合并。
如图5A所示,一旦接收到新的3D点,3D重建应用110首先在尺度级别0尝试均一合并。如果均一合并工作,则均一合并继续,直到不能再进行合并的级别。然后,3D重建应用110继续顺序地尝试在xy平面、yz平面以及xz平面处合并。
如果0级的均一合并是不可能的,则3D重建应用110在xy平面处执行合并,直到在xy平面处无法再进行合并。
如果在xy平面处的0级的合并是不可能的,则3D重建应用110在yz平面处执行合并,直到在yz平面处无法再进行合并。
如果在yz平面处的0级的合并是不可能的,则3D重建应用110在xz平面处执行合并,直到在xz平面处无法再进行合并。
均一合并可能对AR应用有缺点。因此,如图5B所示,本公开的应用不需要包括均一合并。
公开的示例
在某些示例中,使用ARKit和对象C来实现3D重建应用(或AR应用),并且在iPhone8上测试应用。ARKit的VIO算法以60fps运行,每帧产生数十至数百个3D点,这具体取决于场景的复杂度。应用处理这些3D点并将它们实时***到多尺度体素哈希数据结构中。
该应用适用于四个不同的场景,包括办公室厨房、储藏室、桌子和会议室。图6A-6F示意性地示出了将根据本公开的某些实施例的应用应用于办公室厨房的示例,其中,图6A示出了办公室厨房场景的全景,图6B示出了具有叠加在场景上的体素的水槽区域的侧视图,图6C示出了水槽区域的正视图,图6D示出了垃圾箱和附近楼层的特写视图,图6E示出了冰箱区域的正视图,图6F示出了整个体素表示的俯视图。图7A-7D示意性地示出了将根据本公开的某些实施例的应用应用于储藏室的示例,其中,图7A示出了具有多尺度体素表示的储藏室的完整视图,图7B-7D示出了某些区域的特写视图。图8A和8B示出了叠加多尺度体素表示之前和之后的桌面场景的图片。
上述多尺度表示是实时实现的。此外,捕获每个场景的一系列点云和图像以离线处理。点间距离针对不同场景而变化。当场景更接近相机时,重建的点彼此更接近;因此需要更小的体素以更好地近似场景的几何形状。从一系列初始帧估计场景深度,并且使用所述深度来确定最小体素尺寸mv。在本公开的***中,应用使用以下公式(2)确定阈值:
其中D是初始场景深度。
在每种情况下,应用都可以高效地处理ARKit生成的输入3D点,并将它们实时转换为多尺度体素。图9A示出了将应用用于上述场景的结果。表格列表包括捕获时间、由ARKit重建的3D点总数、由我们的算法重建的体素数量以及应用所使用的单位体素尺寸。计算压缩比,所述压缩比是所有3D点(浮点坐标)所需的存储与多尺度体素数据结构所需的存储之间的比率。每个体素条目需要用于整数坐标(xi,yi,zi)的3个字节、用于lx,lv,lz尺度的3个字节以及用于密度的4个字节。对于不太复杂的场景,例如桌面和会议室,压缩比远大于更复杂的场景。值得注意的是,像ARKit这样的VIO***不向开发人员提供帧间对应信息;因此,3D点在很大程度上是冗余的,并且总点数远大于场景中的实际特征。
当应用运行较长时间时,应用随着3D点数的增加而很好地按比例缩放。图9B示出了办公室厨房场景上3D点和体素随着捕获时间的增加的变化。运行时间从30秒增加到240秒,并且记录针对办公室厨房场景的由ARKit生成的总点数和重建体素的数量。单位体素设定为8厘米。当点的数量随着捕获时间近似线性地增加时,重建的体素的数量以慢得多的速率增长。
为了示出根据本公开的某些实施例的自下而上合并方案的有效性,在有多尺度处理和没有多尺度处理的情况下应用体素哈希处理应用。图9C示出了使用单尺度(第一行)和多尺度(第二行)的重建的体素的数量。多尺度方案始终将总存储器占用降低30%至40%。
在一个示例中,在本公开的AR应用中实现冲突检测和避免。当用户在AR视图期间与数字对象交互时,使用上述重叠边界框方法实时检测冲突,并且如果检测到潜在冲突则停止数字对象的移动。图10A-10D示出了使用AR应用的冲突检测结果。当用户将虚拟对象“推”向障碍物时,移动电话示出虚拟对象停止的渲染结果。图10A示出了图10B的图像的体素表示的叠加,图10C示出了图10D的图像的体素表示的叠加。
总之,本公开提供了一种高效的算法,其可以处理由移动VIO***(例如,ARKit和ARCore)生成的3D点。该方法能够实时地将3D点压缩成多尺度体素哈希结构。数据结构需要较小的存储器占用,并支持针对移动AR应用的高效冲突检测。
在某些实施例中,使用从一系列初始帧估计的场景深度来设定单位体素尺寸。在其他实施例中,本公开允许基于当前场景深度动态地调整单位体素尺寸。在某些实施例中,AR应用可以使用平面检测来估计房间的取向,使得轴对齐的体素与场景中的主要竖直表面对齐。在其他实施例中,AR应用向体素添加取向以更好地近似具有不同取向的表面。在某些方面,本公开涉及存储计算机可执行代码的非暂时性计算机可读介质。当在计算设备100的处理器102处执行所述代码时,代码可以执行如上所述的方法400。在某些实施例中,非暂时性计算机可读介质可以包括但不限于任何物理或虚拟存储介质。在某些实施例中,非暂时性计算机可读介质可以实现为如图1所示的计算设备100的存储设备106。
在某些实施例中,根据本公开的AR应用可以用在诸如智能电话、个人计算机或平板计算机之类的移动设备中。在其他实施例中,AR应用还可以用在计算服务器、云计算机、机器人设备、无人机中。此外,提供了用于AR应用的示例,然而,本公开不限于此。相反,本公开提供了用于使用多尺度高效地表示3D地图的一般方法,并且可以用在与3D地图处理有关的其他应用中。
已经仅出于说明和描述的目的呈现了本公开的示例性实施例的前述描述,并且不旨在穷举或将本公开限制于所公开的精确形式。鉴于上述教导,许多修改和变化是可能的。
选择和描述实施例以便说明本公开的原理及其实际应用,从而使得本领域的其他技术人员能够利用本公开和各种实施例以及适合于预期的特定用途的各种修改。在不脱离本公开的精神和范围的情况下,替代实施例对于本公开所属领域的技术人员将变得显而易见。因此,本公开的范围由所附权利要求限定,而不是由前面描述和本文中描述的示例性实施例限定。
参考文献:
1.ARKit.https://developer.apple.com/arkit/
2.ARCore:https://developers.***.com/ar/
3.A Volumetric Method for Building Complex Models from Range Images,Brian Curless and Marc Levoy,Proc.SIGGRAPH′96.
4.“KinectFusion:Real-time dense surface mapping and tracking,″R.A.Newcombe et al.,2011 10th IEEE International Symposium on Mixed andAugmented Reality,Basel,2011,pp.127-136.
Claims (20)
1.一种使用计算设备来构建三维3D点图的多尺度体素表示的方法,所述方法包括:
在坐标空间中提供3D点图,所述坐标空间具有x轴、y轴和z轴;
从所述3D点图接收3D点的坐标;
将所述3D点的坐标转换为整数坐标;
将所述整数坐标与哈希表中的体素条目进行比较;以及
在确定所述整数坐标不被所述哈希表中的任何体素条目包含时:
创建新单位体素,所述新单位体素的三个维度中的每一个维度分别具有单位长度,所述单位长度对应于所述整数坐标沿所述坐标空间的轴的一个整数单位;
使用所述整数坐标计算哈希值;
将所述新单位体素***所述哈希表中;以及
沿所述坐标空间的至少一个轴将所述新单位体素与相邻体素合并,以获得所述3D点图的多尺度体素表示。
2.根据权利要求1所述的方法,其中,所述合并的步骤包括:
确定三个相邻m级体素,其中所述三个相邻m级体素与新m级体素位于相同的平面,所述三个相邻m级体素和所述新m级体素属于相同的均一m+1级体素,所述m级体素和所述新m级体素中的每一个的最长维度的长度为2m单位,并且所述均一m+1级体素的所有三个维度的长度均为2m+1单位;以及
当所述三个相邻m级体素在哈希表中可得到时:
将所述新m级体素和所述三个相邻m级体素组合以形成新m+1级体素,所述新m+1级体素的最长维度的长度为2m+1单位;
将所述新m+1级体素添加到所述哈希表;以及
从所述哈希表中删除所述三个相邻m级体素和所述新m级体素,
其中m是0到9范围内的整数,并且所述新m+1级体素的密度是所述新m级体素和所述三个相邻m级体素的密度之和。
3.根据权利要求2所述的方法,其中,所述3D点的整数坐标是(xi,yi,zi),所述均一m+1级体素与所述坐标空间的原点最接近的顶点的整数坐标是(xi/2(m+1)*2(m+1),yi/2(m+1)*2(m +1),zi/2(m+1)*2(m+1)),并且所述xi/2(m+1),yi/2(m+1),zi/2(m+1)中的每一个是整数除法。
4.根据权利要求3所述的方法,其中,沿由所述x轴和所述y轴定义的xy平面、由所述y轴和所述z轴定义的yz平面、由所述x轴和所述z轴定义的xz平面顺序地尝试所述合并的步骤。
5.根据权利要求1所述的方法,其中,所述3D点图是3D稀疏点图。
6.根据权利要求1所述的方法,其中,通过将所述3D点的坐标与缩放比例整数相乘,将所述3D点的坐标转换为整数坐标。
7.根据权利要求1所述的方法,其中,所述3D点的整数坐标是(xi,yi,zi),以及将所述整数坐标与哈希表中的体素条目进行比较的步骤包括:
使用(xi/2h*2h,yi/2k*2k,zi/21*21)计算哈希值;以及
将所述整数坐标(xi,yi,zi)与由所述哈希值索引的(h,k,l)级体素条目的坐标进行比较,以确定所述整数坐标(xi,yi,zi)是否被由所述哈希值索引的任何一个所述(h,k,l)级体素条目包含,
其中h,k,l分别是沿所述x轴、y轴、z轴的尺度级别。
9.根据权利要求1所述的方法,其中,所述哈希表中的每个体素条目的形式为{xi,yi,zi,lx,ly,lz,d},其中,xi、yi、zi是体素的代表性顶点的整数坐标,lx、ly和lz是沿x、y和z方向的尺度级别,d是对应体素条目的密度。
10.根据权利要求1所述的方法,还包括:将所述3D点图与场景的真实世界坐标对齐。
11.根据权利要求1所述的方法,还包括:通过以下步骤检测并避免3D模型和所述3D点图的冲突:
将所述3D模型转换为3D表示,所述3D表示包括体素表示、边界框表示和边界球表示;以及
确定所述3D模型的3D表示是否与所述3D点图的多尺度体素表示重叠。
12.根据权利要求1所述的方法,其中,当所述整数坐标被所述哈希表的体素条目包含时:将所述一个体素条目的密度加1。
13.一种用于构建三维3D点图的多尺度体素表示的***,所述***包括计算设备,所述计算设备包括处理器和存储计算机可执行代码的存储设备,其中当在所述处理器处执行所述计算机可执行代码时,所述计算机可执行代码被配置为:
在坐标空间中提供3D点图,所述坐标空间具有x轴、y轴和z轴;
从所述3D点图接收3D点的坐标;
将所述3D点的坐标转换为整数坐标;
将所述整数坐标与哈希表中的体素条目进行比较;以及
在确定所述整数坐标不被所述哈希表中的任何体素条目包含时:
创建新单位体素,所述新单位体素的三个维度中的每一个维度分别具有单位长度,所述单位长度对应于所述整数坐标沿所述坐标空间的轴的一个整数单位;
使用所述整数坐标计算哈希值;
将所述新单位体素***所述哈希表中;以及
沿所述坐标空间的至少一个轴将所述新单位体素与相邻体素合并,以获得所述3D点图的多尺度体素表示。
14.根据权利要求13所述的***,其中,所述计算机可执行代码被配置为通过以下步骤合并新体素:
确定三个相邻m级体素,其中所述三个相邻m级体素与新m级体素位于相同的平面,所述三个相邻m级体素和所述新m级体素属于相同的均一m+1级体素,所述m级体素和所述新m级体素中的每一个的最长维度的长度为2m单位,并且所述均一m+1级体素的所有三个维度的长度均为2m+1单位;以及
当所述三个相邻m级体素在哈希表中可得到时:
将所述新m级体素和所述三个相邻m级体素组合以形成新m+1级体素,所述新m+1级体素的最长维度的长度为2m+1单位;
将所述新m+1级体素添加到所述哈希表;以及
从所述哈希表中删除所述三个相邻m级体素和所述新m级体素,
其中m是0到9范围内的整数,并且所述新m+1级体素的密度是所述新m级体素和所述三个相邻m级体素的密度之和。
15.根据权利要求13所述的***,其中,所述计算机可执行代码被配置为在由所述x轴和所述y轴定义的xy平面上、在由所述y轴和所述z轴定义的yz平面上、在由所述x轴和所述z轴定义的xz平面上顺序地尝试合并。
16.根据权利要求13所述的***,其中,所述3D点图是3D稀疏点图,所述计算机可执行代码被配置为通过将所述3D点的坐标与缩放比例整数相乘来将所述3D点的坐标转换为所述整数坐标。
18.根据权利要求13所述的*** ,其中,所述哈希表中的每个体素条目的形式为{xi,yi,zi,lx,ly,lz,d},其中,xi、yi、zi是体素的代表性顶点的整数坐标,lx、ly和lz是沿x轴、y轴和z轴的尺度级别,d是对应体素条目的密度。
19.根据权利要求13所述的***,其中,所述计算机可执行代码还被配置为通过以下步骤检测并避免3D模型和所述3D点图的冲突:
将所述3D模型转换为3D表示,所述3D表示包括体素表示、边界框表示和边界球表示;以及
确定所述3D模型的3D表示是否与所述3D点图的多尺度体素表示重叠。
20.一种存储计算机可执行代码的非暂时性计算机可读介质,其中,当在计算设备的处理器处执行所述计算机可执行代码时,所述计算机可执行代码被配置为:
在坐标空间中提供3D点图,所述坐标空间具有x轴、y轴和z轴;
从所述3D点图接收3D点的坐标;
将所述3D点的坐标转换为整数坐标;
将所述整数坐标与哈希表中的体素条目进行比较;以及
在确定所述整数坐标不被所述哈希表中的任何所述体素条目包含时:
创建新单位体素,所述新单位体素的三个维度中的每一个维度分别具有单位长度,所述单位长度对应于所述整数坐标沿所述坐标空间的轴的一个整数单位;
使用所述整数坐标计算哈希值;
将所述新单位体素***所述哈希表中;以及
沿所述坐标空间的至少一个轴将所述新单位体素与相邻体素合并,以获得所述3D点图的多尺度体素表示。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/009,356 US10706611B2 (en) | 2018-06-15 | 2018-06-15 | Three-dimensional representation by multi-scale voxel hashing |
US16/009,356 | 2018-06-15 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110276829A CN110276829A (zh) | 2019-09-24 |
CN110276829B true CN110276829B (zh) | 2023-03-07 |
Family
ID=67960987
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910524090.7A Active CN110276829B (zh) | 2018-06-15 | 2019-06-17 | 通过多尺度体素哈希处理的三维表示 |
Country Status (2)
Country | Link |
---|---|
US (1) | US10706611B2 (zh) |
CN (1) | CN110276829B (zh) |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10698562B1 (en) | 2019-04-30 | 2020-06-30 | Daqri, Llc | Systems and methods for providing a user interface for an environment that includes virtual objects |
US11238641B2 (en) * | 2019-09-27 | 2022-02-01 | Intel Corporation | Architecture for contextual memories in map representation for 3D reconstruction and navigation |
CN112703368B (zh) * | 2020-04-16 | 2022-08-09 | 华为技术有限公司 | 车辆定位的方法和装置、定位图层生成的方法和装置 |
CN113570691B (zh) * | 2020-04-27 | 2023-07-25 | 北京蓝亚盒子科技有限公司 | 用于体素模型的存储优化方法、装置及电子设备 |
CN111625611A (zh) * | 2020-05-25 | 2020-09-04 | Oppo广东移动通信有限公司 | 地图应用的任务处理、地图构建方法及装置、设备、介质 |
US11438628B2 (en) * | 2020-06-03 | 2022-09-06 | Tencent America LLC | Hash-based accessing of geometry occupancy information for point cloud coding |
US11580671B2 (en) | 2020-08-17 | 2023-02-14 | Tencent America LLC | Hash-based attribute prediction for point cloud coding |
US11651052B2 (en) * | 2020-11-20 | 2023-05-16 | Shenzhen Deeproute.Ai Co., Ltd | Methods for extracting point cloud feature |
US20220284633A1 (en) * | 2021-03-05 | 2022-09-08 | Tencent America LLC | Method and apparatus for constructing a 3d geometry |
CN116027269B (zh) * | 2023-03-29 | 2023-06-06 | 成都量芯集成科技有限公司 | 一种平面场景定位方法 |
CN116206066B (zh) * | 2023-04-25 | 2023-09-12 | 阿里巴巴达摩院(杭州)科技有限公司 | 基于场景重建生成视频的方法、存储介质和*** |
CN116414867B (zh) * | 2023-06-12 | 2023-08-22 | 中南大学 | 一种基于量化哈希编码的时空数据检索方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103617593A (zh) * | 2013-12-05 | 2014-03-05 | 中国科学技术大学 | 三维流体物理动画引擎的实现方法及装置 |
CN105453139A (zh) * | 2013-07-17 | 2016-03-30 | 微软技术许可有限责任公司 | 用于3d表面重建的稀疏gpu体素化 |
JP2017045428A (ja) * | 2015-08-28 | 2017-03-02 | 大日本印刷株式会社 | 立体物造形用データ削減装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6980690B1 (en) * | 2000-01-20 | 2005-12-27 | Canon Kabushiki Kaisha | Image processing apparatus |
-
2018
- 2018-06-15 US US16/009,356 patent/US10706611B2/en active Active
-
2019
- 2019-06-17 CN CN201910524090.7A patent/CN110276829B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105453139A (zh) * | 2013-07-17 | 2016-03-30 | 微软技术许可有限责任公司 | 用于3d表面重建的稀疏gpu体素化 |
CN103617593A (zh) * | 2013-12-05 | 2014-03-05 | 中国科学技术大学 | 三维流体物理动画引擎的实现方法及装置 |
JP2017045428A (ja) * | 2015-08-28 | 2017-03-02 | 大日本印刷株式会社 | 立体物造形用データ削減装置 |
Non-Patent Citations (1)
Title |
---|
Matthias Nießner 等.Real-time 3D reconstruction at scale using voxel hashing.《ACM Transactions on Graphics》.2013,全文. * |
Also Published As
Publication number | Publication date |
---|---|
US10706611B2 (en) | 2020-07-07 |
CN110276829A (zh) | 2019-09-24 |
US20190385355A1 (en) | 2019-12-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110276829B (zh) | 通过多尺度体素哈希处理的三维表示 | |
JP7181977B2 (ja) | 3次元再構成において構造特徴を検出し、組み合わせるための方法およびシステム | |
KR102402494B1 (ko) | 지오메트리 정보의 모션 보상 | |
KR102096673B1 (ko) | 포인트 클라우드에서의 포인트 백필링 | |
JP5160640B2 (ja) | 画像のステレオ・マッチングのためのシステム及び方法 | |
CN107077744B (zh) | 使用边缘的三维模型生成的方法和*** | |
US10885707B1 (en) | Network, system and method for multi-view 3D mesh generation via deformation | |
US8610712B2 (en) | Object selection in stereo image pairs | |
KR101310589B1 (ko) | 이미지들로부터의 빠른 스테레오 재구성을 위한 기술들 | |
EP3326156B1 (en) | Consistent tessellation via topology-aware surface tracking | |
GB2566443A (en) | Cross-source point cloud registration | |
CN115439607A (zh) | 一种三维重建方法、装置、电子设备及存储介质 | |
Manni et al. | Snap2cad: 3D indoor environment reconstruction for AR/VR applications using a smartphone device | |
US10937236B1 (en) | Mesh smoothing for visual quality and analysis improvement | |
JP2018133059A (ja) | 情報処理装置及び三次元モデルの生成方法 | |
Xu et al. | Multi-scale voxel hashing and efficient 3D representation for mobile augmented reality | |
Kalomiros | Dense disparity features for fast stereo vision | |
CN116012666B (zh) | 图像生成、模型的训练、信息重建方法、装置及电子设备 | |
CN115908723B (zh) | 基于区间感知的极线引导多视图立体重建方法 | |
Aung et al. | Multi-view Stereo Dense Reconstruction using SfM-based PMVS for Image-based Modeling (IBM) | |
CN114820908B (zh) | 虚拟形象生成方法、装置、电子设备和存储介质 | |
Yamao et al. | A sequential online 3d reconstruction system using dense stereo matching | |
CN114463409A (zh) | 图像深度信息的确定方法、装置、电子设备和介质 | |
Qian | Efficient poisson-based surface reconstruction of 3D model from a non-homogenous sparse point cloud | |
Locher et al. | Progressive 3D Modeling All the Way |
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 |