邓辉

个人站

欢迎来到我的个人站~


Detecting Holes in Point Set Surfaces 笔记


1. Introduction

由于点云缺失拓扑连接关系,空洞的存在对点云的分析有很大的影响。许多点云平滑方法在边缘处经常出错,可以通过先识别出空洞来回避这个问题。

2. Previous Work

空洞探测问题于点云表面重建和特征检测领域都很相关。因此许多相关的算法都会包含空洞检测的技巧。 有人采用角度变换准则:对每个点P的邻域内,评价两个联通邻域最大的角度值(论文中的原话,讲的是个蛋?)。 有人采用相关矩阵的方式,矩阵的特征值和特征向量表征着一个相关椭球。椭球的特征能够用来定义角点特征,折痕和边缘处同样能够获取一些信息。 为了获取连续的折痕线,可以建立邻域图,根据折痕的概率衡量出Edge。

3. Overview

图1展示了论文边界检测算法的步骤:

  • 计算每个点是边界点的概率,用红色表示。
  • 基于连通性,将候选的边界点分为边界和内部点。(基于边界点是联通的假设)
  • 最终检测出每个闭环的边界。(基于最小路径代价的方式发现联通的边界点)

4. Boundary Probability

边界性质是点P局部邻域的性质,而不是点P自身。为了定义和评价边界准则,我们不得不规格划分局部邻域。

4.1 Neighbourhood Collection

常用的邻域寻找方式是以点P最相邻的K个点作为P点的邻域点。但这种方法对点云密度不均匀的情况时会不可靠。在点云较密和边缘处,K邻域会倾向于点云较密的区域。 在使用K邻域的基础上,每个点同时伴随着一个小的固定半径的领域。这种方法可以有效地克服密度偏移问题,但是密集处会包含大量超出预期的点,增加了计算成本。 (—没看懂后续在说啥—)反正大概思想是为了避免点云密度差异较大的区域在邻域旋转的时候有偏向,导致该区域点后续可能被误认为边界点。


4.2 The Angle Criterion

如图2所示。将邻域内点Np投影到其所在的平面上,然后计算投影点两两之间的角度间隔(以点P为中心点),得到最大的角度间隔g。 按照以下公式,计算出点P的边界概率:


4.3 The Halfdisc Criterion

如图3所示。半个圆盘准则,顾名思义该准则是借助于边界点的邻域分布是半圆形的特性。具体步骤如下:

  • 计算邻域点的加权重心。高斯赋权方式是:g(d) = exp(-d2/Sigma2), Sigma = 1/3*radius;
  • 将加权重心点投影到其所在平面上,以点P与其在平面上的投影距离为依据计算P点的边界概率。公式为: pi = min( || P - meanp || /(4/(3*PI) * radius) , 1)

4.4 The Shape Criterion

如图4所示。特征准则引入了一个挺有意思的观点。基于协方差矩阵的三个特征值V0 > V1 > V2,计算一个决定向量Kp = (V0/a , V1/a , V2/a )。a = V0+V1+V2。 基于决定向量可以区分出四种特征,见表格1。表格中后三个特征可以构成一个三角形T,如图4所示。以这个三角形的重心作为高斯平滑的高斯核,公式如下: Sigma = (1/3)*(|| Kp - centriod (T)||2)。 基于以上高斯核计算一个近似的边界得分: pi_p = g(|| Kp - (stand-Kp) ||) 。其中,g()表示用上述的高斯核进行高斯平滑;stand-Kp 表示边界特征的标准Kp。后续类似。

然后进行归一化,公式如下: pi = (pi_p)/((累加)(pi_p_f)) 。 其中,累加的是基于Kp计算四种特征的近似得分。

4.5 Combining the Criteria

每一个评价准则都有它自己的优点。相较于角度准则,半圆准则探测小的空洞更有效,尤其是由于边缘所导致的孔洞。 在另一方面,相较于半圆准则和椭球准则,角度准则对细长型的边界效果更好。对于存在噪声的点云,椭球准则表现最好。 为了更好的使用各个准则,我们对三个准则进行加权。通常情况下,规则的权重就能表现出很好的效果。但对噪声较大的情况,可以适当的增加椭球准则的权重。

4.6 Normal Estimation

对于边缘处,法向估计不准会导致估计的角度准则偏大。为了更好的适应这种情况,我们对角度准则大于一定阈值的邻域法向旋转90°,从新估算角度准则。 如果新的角度准则不到上次的估计结果的一半。我们就用新的估计结果替代上次的角度准则结果。

5 Boundary Loops

前面的步骤主要是为了从点云中提取出边界点,这一章则主要介绍将候选的边界点连接成一个闭合的轮廓。

5.1 Boundary Coherence

边界一致策略方法大致如下:

  • 首先,所有的边界概率大于一定阈值的点都标记为边界点。
  • 对每个边界点,找到其构成角度准则最大的两个点b1、b2。
  • 对每个边界点,如果其b1、b2同时也是边界点,则保留下来;否则认为是内部点。
  • 重复以上步骤,直到所有点的状态都保持稳定。 上述策略中,对上次发生改变的点重新评价可以有效的提高效率。

以上策略结束以后,我们使用扩展Kruskal的最小生成树算法。连接边的权重计算分为两个部分:

  • 第一部分:对两个可能连接点之间的权重值为,Wprob(i,j) = 2-PI(pi)-PI(pj)。
  • 第二部分:基于两个点的局部密度。Wdensity(i,j) = 2*(|| pi - pj||)/(radius_pi + radius_pj)。 其中,radius_pi 、radius_pj 为pi\pj点邻域内点到pi\pj距离的平均值。 最终权重是以上两个部分权重的和: Wtotal(i,j) = Wprob(i,j) + Wdensity(i,j)。

接下来使用扩展Kruskal的最小生成树算法,最小生成图(minimum spanning graph,MSG)。 最初,G中的每个顶点相互独立。每个合格的顶点按照他们的权重升序进行排列。判断顶点是否合格的条件要求其Wprob、和W_total同时低于一定的阈值。 论文中介绍的阈值1.1和3在实验中证明是一个相对较好的阈值,在其所用的实验数据中。

如何edge(i,j)连接G中两个不同的成分,将该edge和两个成分加入MSG中。如果一个边缘连接的是两个相同的成分,仅当闭环的能量超过一个预定于的最小闭环长度e时加入MSG。 与构造邻域图G时设定的邻域半径radius相似,最小闭环长度e预示着能够发现的最小空洞半径。因此,可以将这两个参数关联起来:e = (2pi*e)/d。 其中,d是图中平均半径长度。

5.2 Loop Extraction

闭环提取采用的是广度优先策略。对MSG中每个顶点为起点都做一次寻找,除非是已经存在于闭环中的顶点。 如图所示,论文介绍的我没看太懂。我猜的思路是:

  • 首先将所有的顶点搞成白色,除了起始顶点搞成灰色。
  • 下一步将上一个灰色顶点置为黑色,然后将与之相连的白色顶点置为灰色。
  • 上一步中如果相邻的有黑色的顶点,则忽视。如果有灰色的顶点说明找到了闭环。


转载请注明原地址,邓辉的博客:https://github.com/my-lord/mylord.github.io 谢谢!


#请各位大佬多多打赏


打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦