点云的孔洞填充的方法和设备与流程

文档序号:21108542发布日期:2020-06-16 21:32阅读:546来源:国知局
点云的孔洞填充的方法和设备与流程

本公开总体上涉及表示3d对象的点云数据源的领域。

更具体地,它涉及点云的后处理。

因此,本公开涉及点云的孔洞填充的方法和对应的设备。它还涉及用于对点云进行编码和解码的方法以及对应的编码器和解码器。它还涉及实现本发明的孔洞填充方法的计算机程序。



背景技术:

本部分中描述的方案可被实行,但不一定是先前已经设想或实行的方案。因此,除非本文另外指出,否则本部分中描述的方案不是本申请中权利要求的现有技术,并且也不因包含在本部分中而被承认为现有技术。

点云由点的集合构成,这些点通常用于表示3d对象的外表面,也用于表示更复杂的几何形状,如头发、毛发,这些几何形状可能无法由其他数据格式(如网格)有效地表示。每个点由其3d空间位置(3d空间中的x、y和z坐标)(即几何信息)以及可能地由其他相关联的属性来定义,这些属性典型地包括在rgb或yuv或任何其他颜色坐标系统中表示的颜色信息。其他属性可以包括透明度、反射率等。几何形状可以被视为属性数据中的一个。在本公开的其余部分中,将几何形状和其他属性数据都视为点的属性。

在下文中,考虑有色点云,即6分量点(x,y,z,r,g,b)或等效地(x,y,z,y,u,v)的集合,其中(x,y,z)定义点在3d空间中的空间位置,并且(r,g,b)或(y,u,v)定义该点的颜色。

有色点云可以是静态的或动态的,取决于点云是否随时间演变。应当注意,在动态点云的情况下,点的数量不是恒定的,而是相反,通常随时间演变。因此,动态点云是点集的按时间排序的列表。

点云数据源可以在许多应用中找到。依赖于巨大点云数据源的重要应用可以在地理信息系统、机器人技术、医学断层扫描和科学可视化中找到。

除了这些更加工业化和科学导向的应用之外,基于飞行时间或其他深度传感技术的廉价3d扫描仪的普及、移动设备上的3d捕获以及基于云的3d打印的兴起,正在产生对消费市场中的大规模可互操作的压缩3d点云存储和传输数据格式的巨大需求。

扫描的3d点云通常具有数千个点,并占用大量存储空间。另外,当从3d扫描仪实时捕获时,它们可以以高速率生成,从而甚至进一步增加数据速率。因此,点云压缩对于有效的网络分发和存储至关重要。

在捕获点云期间,由于表面反射性质、遮挡和可访问性限制,可能无法对对象的某些区域进行采样,导致得到的点云中出现孔洞。这些孔洞表示3d点云的重要缺失部分。

因此,必须使用孔洞填充技术以便完成点云。

关于点云孔洞填充的现有技术工作主要基于边界点检测、闭合边界环提取和边界环填充。

通过将点云的每个点的相邻点投影到其局部切平面来执行边界点检测。其投影的相邻点不能形成完整的圆的那些点被视为边界点。然后,通过跟踪相邻的检测到的边界点来执行边界环提取。在当前跟踪边界遇到当前跟踪开始的边界点时,找到闭合边界环。然后,通过在边界环的中间添加点来填充得到的闭合边界环。

在现有技术中,只有闭合的边界点环被视为边界并且将被填充。因此,边界点检测需要是准确的。如果在检测步骤期间错过了某些边界点或将某些点错误地检测为边界点或者是其他情况,则边界环无法闭合。

然而,边界点检测通常是困难的,因为无法获得点之间的连通性。实际上,局部切平面的计算取决于邻域的选择。由于没有可用的连通性信息,因此难以定义点云中每个点的正确邻域。因此,边界点检测通常是困难的。

同样,边界环填充步骤通常取决于复杂运算,如多项式拟合、表面重建和三角剖分。

因此,现有技术的点云孔洞填充技术不适用于要求低复杂度的用例,诸如空中(on-the-fly)点云渲染和点云解码。



技术实现要素:

通过提供根据所附权利要求的方法和设备,本公开提出了一种改善状况的解决方案。

相应地,本公开提供了一种具有至少一个孔洞的点云的孔洞填充的方法,包括:

-检测点云的边界点;

-基于所检测到的边界点的空间邻接(adjacency),在边界区域中对所检测到的边界点进行分组;

-用至少一个平面覆盖每个边界区域;以及

-使用覆盖边界区域的平面在点云中插入新点。

因此,本公开的方法通过使用平面插入操作能够显著降低现有技术的孔洞填充技术的复杂度。而且,由于本解决方案不需要提取闭合边界点环,因此不需要准确的边界点检测,使得本公开的孔洞填充方法比现有技术的解决方案更鲁棒。

根据实施例,使用角度标准将点云的点检测为边界点。

在bendels等人的文章(“检测点集表面中的孔洞(detectingholesinpointsetsurfaces)”,wscg期刊,第14卷,wscg2006,2006年1月30日至2006年2月3日)的第4.2节中描述了这种检测边界点的技术。其精度不是最佳的,但是对于不需要提取精确且闭合的边界点环的本公开的孔洞填充方法来说是足够的。

有利地,如果点的两个连续的局部邻居之间的最大角度间隙大于第一阈值并且该点的两个连续的较远邻居之间的最大角度间隙小于第二阈值,则将点云的该点检测为边界点。

局部邻居在这里是指近邻,例如距离为1的邻居,而较远邻居位于较远处,例如距离为10的邻居。第二阈值条件允许避免检测错误的边界点。

例如,第一阈值等于60度,并且第二阈值等于120度。

根据实施例,连续邻居之间的角度间隙是这些邻居在点的切平面上的投影之间的角度间隙。

有利地,对每个边界区域定义至少一个边界点组,并且每个边界点组被一个平面覆盖。

有利地,该方法包括确定每个新点的属性。

根据实施例,属性是颜色。

有利地,通过从点云的附近点进行插值来确定属性。

根据实施例,在(r,g,b)颜色空间中执行插值。

根据另一实施例,在(y,u,v)颜色空间中执行插值。

本发明还提供了一种用于对具有至少一个孔洞的点云进行孔洞填充的孔洞填充设备,包括:

-检测模块,被配置为检测点云的边界点;

-分组模块,被配置为基于所检测到的边界点的空间邻接,在边界区域中对所检测到的边界点进行分组;

-覆盖模块,被配置为用至少一个平面覆盖每个边界区域;以及

-插入模块,被配置为使用覆盖边界区域的平面在点云中插入新点。

有利地,孔洞填充设备的模块由一个或多个处理器实现。

根据另一方面,本公开提供了一种用于对表示3d对象的点云进行编码的方法,包括根据本公开的孔洞填充后处理。

本公开还提供了一种用于对表示3d对象的点云进行解码方法,包括根据本公开的孔洞填充后处理。

本公开还提供了一种编码器,包括本公开的孔洞填充设备。

本公开还提供了一种解码器,包括本公开的孔洞填充设备。

根据本公开的方法可以在可编程装置上以软件实现。它们可以仅以硬件或软件实现,或者以其组合来实现。

由于这些方法可以以软件实现,因此它们可以体现为计算机可读代码,以在任何合适的载体介质上提供给可编程装置。载体介质可以包括存储介质,诸如软盘、cd-rom、硬盘驱动器、磁带设备或固态存储器设备等。

因此,本公开提供了一种计算机可读程序,包括计算机可运行指令,以使计算机能够执行本发明的孔洞填充方法。

图1的图示出了用于这种计算机程序的通用算法的示例。

附图说明

在附图的图中,通过示例而非限制的方式示出了本发明,其中相同的参考标记指代相似的元件,并且其中:

-图1是示出根据本公开的实施例的点云的孔洞填充的步骤的流程图;

-图2表示根据本公开的实施例的用于检测边界点的变换矩阵;

-图3是图示根据本公开的实施例的编码器的示意图;以及

-图4是图示根据本公开的实施例的解码器的示意图。

具体实施方式

在图1的流程图中图示了根据本公开的实施例的3d点云的孔洞填充的方法。

该方法通过检测点云的边界点从步骤2开始。

优选地,使用角度标准将点云的点检测为边界点。

因此,将投影在p的局部切平面上的p的两个连续邻居之间的最大角度间隙g大于第一阈值t1的点云的点p视为可能的边界点。t1的可能值为60度。

根据一个实施例,对于每个点p,使用p的s距离邻域{ni}来计算平均点m和协方差矩阵c,例如,其中s=1,使用以下公式:

其中n是p的s距离邻居的数量。

这里,点p(xp,yp,zp)的s距离邻域neigh(xneigh,yneigh,zneigh)由下式定义:

{neigh(xneigh,yneigh,zneigh)||xneigh-xp|≤s&&|yneigh-yp|≤s&&|zneigh-zp|≤s}

然后,计算c的特征矢量和对应的特征值。经过归一化并按特征值的降序排序后,选择三个特征矢量作为点p处局部坐标系的x、y和z轴。

局部坐标系的原点是m。

将三个排序并归一化的特征矢量记为对应于图中的x、y和z轴。

将每个s邻居ni如下投影到局部坐标系的xoy平面。

首先,通过n′i(x′,y′,z′)=transf*ni来计算在局部坐标系中表示的ni的坐标n′i(x′,y′,z′),其中transf是图2中所示的4×4矩阵。然后,是将ni投影到局部坐标系的xoy平面的结果。

如图2中所示,矩阵transf包括3×3旋转矩阵r和平移矢量t。

根据实施例,通过来计算r,其中是两个四元数。

矢量表示使世界坐标系的x轴与局部坐标系的x轴对齐的旋转。

由旋转轴和旋转角度确定。于是,

矢量表示使世界坐标系的y轴在由旋转之后与局部坐标系的y轴对齐的旋转。

由旋转轴和旋转角度确定。

通过t=m来计算矢量t。

其次,通过∝i=arctan2(y′,x′)来计算之间的角度∝i。

第三,将所有邻居ni按照角度∝i排序为列表。

第四,计算所有ni的列表中两个相邻ni的∝i的差。如果最大的差或间隙(记为g)大于第一阈值t1,则将p视为可能的边界点。

然后,对于点云的每个可能的边界点p,执行以下过程。

该过程从找到点p的较远邻居开始。p的较远邻居定义为落在以p为中心、尺度或直径为2*s’的立方体或球体的表面上的所有点。

{neigh(xneigh,yneigh,zneigh)|(|xneigh-xp|=s′&&|yneigh-yp|

≤s′&&|zneigh-zp|≤s′)||(|yneigh-yp|

=s′&&|xneigh-xp|≤s′&&|zneigh-zp|

≤s′)||(|zneigh-zp|=s′&&|xneigh-xp|

≤s′&&|yneigh-yp|≤s′)}

优选地,s’的值的选择取决于要填充的孔洞的尺度,例如s’可以选择为等于10。

然后,将p的所有较远邻居投影在p的切平面上,并根据它们围绕p的角度进行排序。

然后,计算两个连续的投影的较远邻居之间的最大间隙g’。仅将g’小于第二阈值t’的点视为边界点。t’的可能值为120度。

然后,在步骤4,将所有检测到的边界点排序到名为all_boundary_point_queue的队列中,使得也是边界点的其n距离邻居的数量增加。n的可能值为2。实际上,具有较多也是边界点的邻居的边界点很可能位于大孔洞上。

在步骤6,检查all_boundary_point_queue是否为空。如果是,则过程结束。

否则,从all_boundary_point_queue中弹出第一个边界点,并在步骤8中考虑。创建与该边界点相关联的队列,名为current_boundary_point_queue。将所述第一个边界点标记为已访问并将其推入current_boundary_point_queue中。创建新边界点区域boundary_region_current,并在开始时将其设置为空。

在步骤10,检查current_boundary_point_queue是否为空。如果是,则过程继续进行稍后描述的步骤16。

如果current_boundary_point_queue不为空,则从current_boundary_point_queue中弹出在current_boundary_point_queue的前部的边界点,名为boundary_point_cur。

在步骤12,将boundary_point_cur添加到boundary_region_current。

在步骤13,将boundary_point_cur的也是边界点并且尚未标记为已访问的n距离邻居添加到current_boundary_point_queue。

然后,在步骤14,将boundary_point_cur的也是边界点并且尚未标记为已访问的所述n距离邻居标记为已访问。

然后,过程转到步骤10,其中,检查current_boundary_point_queue是否为空。

如果队列为空,则过程转到步骤16,在步骤16,boundary_region_current被数个平面覆盖,以便近似围绕每个边界区域的基础表面(underlyingsurface)。

首先,覆盖过程从属于boundary_region_current的尚未标记为已覆盖的边界点开始,记为boundary-point-start,以构建边界点组,记为boundary-point-group。将boundary-point-start添加到boundary-point-group,并且将boundary-point-start标记为已覆盖和已检查。

其次,考虑boundary-point-start的属于boundary_region_current并且尚未标记为已覆盖和已检查的n距离邻居。然后,通过对boundary_point_start以及boundary_point_start的属于boundary_region_current并且尚未标记为已覆盖和已检查的所述n距离邻居应用主成分分析(pca)来计算平均点mean和法线normal。

然后,通过normal*(p-mean)=0来定义新平面pln,其中*是矢量点积。

第三,将boundary-point-start的属于boundary_region_current并且尚未标记为已覆盖和已检查的每个n距离邻居(记为boundary-point-neigh)到pln的距离计算为normal*(boundary-point_neigh-mean)。

第四,一方面,将boundary-point-start的属于boundary_region_current、尚未标记为已覆盖和已检查、并且到pln的距离小于用户定义的阈值thres_plane的n距离邻居添加到boundary-point-group,并标记为已覆盖和已检查。例如,thres_plane=2.0。另一方面,将boundary-point-start的属于boundary_region_current、尚未标记为已覆盖和已检查、并且到pln的距离大于用户定义的阈值thres_plane的n距离邻居标记为已检查,并且不将其添加到boundary-point-group。

通过以下步骤重复该过程:

-首先,通过对属于boundary-point-group的点和属于boundary-point-group的点的属于boundary_region_current并且尚未标记为已覆盖和已检查的n距离邻居应用pca,来计算新平面pln_new;

-其次,计算属于boundary-point-group的点的属于boundary_region_current并且尚未标记为已覆盖和已检查的每个n距离邻居到pln_new的距离;

-第三,将属于boundary-point-group的点的属于boundary_region_current、尚未标记为已覆盖、尚未标记为已检查、并且到pln_new的距离小于thres_plane的n距离邻居添加到boundary-point-group,并标记为已覆盖和已检查;

-第四,将属于boundary-point-group的点的属于boundary_region_current、尚未标记为已覆盖、尚未标记为已检查、并且到pln_new的距离大于thres_plane的n距离邻居标记为已覆盖和已检查。

重复上述过程,直到所有属于boundary_region_current的点都被标记为已检查为止。

然后,检查是否所有属于boundary_region_current的边界点都被标记为已覆盖。如果是,则过程转到步骤18。如果否,则将所有属于boundary_region_current的点标记为未检查。然后,从属于boundary_region_current的尚未标记为已覆盖的边界点开始,重复如上所述的平面生长过程,并定义新的boundary-point-group。平面生长和新的边界点组创建过程被重复,直到将所有属于boundary_region_current的边界点都被标记为已覆盖为止。

在步骤18,对于每个边界区域,将相关联的平面变换为要包括在点云中的新点。

首先,在步骤18,对于每个所确定的平面,如下确定要包括在点云中的潜在新点。

对于每个边界点组,通过对所有属于边界点组的边界点应用pca来定义相关联的平面。将所有属于当前边界点组的边界点及其n’距离邻居都投影在与当前边界点组相关联的平面上。然后,在平面上所有投影点的边界框内,未占用的点构成一组潜在的新点。n’的可能值为4。

其次,然后通过将对点进行投影的逆过程应用于前述的局部坐标系,将每组潜在的新点投影到世界坐标系。将重叠点合并在一起。合并后,将剩下的新点添加到输入点云。

然后,在步骤20,对于在步骤18插入点云中的每个新点pnew,通过对附近的现有点和点云的新添加的点的颜色属性进行插值来确定其颜色。

可以在(r,g,b)或(y,u,v)空间中执行颜色插值。

例如,有利地,插值使用在(y,u,v)空间中表示的以下公式:

其中pnearest是pnew的除了pundersampled之外最近的邻居。

通过将(y,u,v)替换为(r,g,b),可以在(r,g,b)空间中写出相同的公式。

图3是实现本公开的3d点云的编码方法的编码器30的示例性实施例的框图。

有利地,编码器30包括一个或多个处理器以及存储器32。

编码器30包括编码模块34,该编码模块34被配置为将输入的3d点云编码到比特流中。

根据本公开,编码器30还包括孔洞填充设备36,该孔洞填充设备36包括:

-检测模块38,被配置为检测点云的边界点;

-分组模块40,被配置为基于所检测到的边界点的空间邻接,在边界区域中对所检测到的边界点进行分组;

-覆盖模块42,被配置为用至少一个平面覆盖每个边界区域;以及

-插入模块44,被配置为使用覆盖边界区域的平面在点云中插入新点。

根据所表现的实施例,总线46提供编码器30的各个元件之间的通信路径。其他点对点互连选项(例如,非总线架构)也是可行的。

图4是实现本公开的解码器方法的解码器50的示例性实施例的框图。

有利地,解码器50包括一个或多个处理器以及存储器52。

解码器50包括解码模块54,该解码模块54被配置为将输入比特流解码为3d点云。

根据本公开,解码器50还包括上述的孔洞填充设备36。

根据所表现的实施例,总线56提供解码器50的各个元件之间的通信路径。其他点对点互连选项(例如,非总线架构)也是可行的。

尽管已经图示和描述了目前被认为是本发明的优选实施例的内容,但是本领域技术人员将理解,在不脱离本发明的真实范围的情况下,可以做出各种其他修改,并且可以替换等同物。另外,在不脱离本文描述的中心发明构思的情况下,可以做出许多修改以使特定情况适应本发明的教导。此外,本发明的实施例可以不包括所有上述特征。因此,本发明意在不限于所公开的特定实施例,而是本发明包括落入所附权利要求的范围内的所有实施例。

当解释说明书及其相关权利要求时,将以非排他性的方式解释诸如“包括”(comprise),“包括”(include),“包含”(incorporate),“包含”(contain),“是”(is)和“具有”(have)的表达,即解释为允许未明确定义的其他项目或组件也存在。对单数的引用也可以被解释为对复数的引用,反之亦然。

本领域技术人员将容易理解,不脱离本发明的范围的情况下,可以修改说明书中公开的各种参数,并且可以组合所公开的和/或要求保护的各种实施例。

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