Detecting Holes in Point Set Surfaces 笔记
---
layout: post
title: "Detecting Holes in Point Set Surfaces 笔记"
date: 2019-5-23
description: "点云空洞发现算法"
tag: 3D视觉
---
<img src="/doc_imgae/2019-5-23/1.png" height="300" width="500">
-----
## 1. Introduction
由于点云缺失拓扑连接关系,空洞的存在对点云的分析有很大的影响。许多点云平滑方法在边缘处经常出错,可以通过先识别出空洞来回避这个问题。
## 2. Previous Work
空洞探测问题于点云表面重建和特征检测领域都很相关。因此许多相关的算法都会包含空洞检测的技巧。
有人采用角度变换准则:对每个点P的邻域内,评价两个联通邻域最大的角度值(论文中的原话,讲的是个蛋?)。
有人采用相关矩阵的方式,矩阵的特征值和特征向量表征着一个相关椭球。椭球的特征能够用来定义角点特征,折痕和边缘处同样能够获取一些信息。
为了获取连续的折痕线,可以建立邻域图,根据折痕的概率衡量出Edge。
## 3. Overview
图1展示了论文边界检测算法的步骤:
> * 计算每个点是边界点的概率,用红色表示。
> * 基于连通性,将候选的边界点分为边界和内部点。(基于边界点是联通的假设)
> * 最终检测出每个闭环的边界。(基于最小路径代价的方式发现联通的边界点)
----
## 4. Boundary Probability
边界性质是点P局部邻域的性质,而不是点P自身。为了定义和评价边界准则,我们不得不规格划分局部邻域。
### 4.1 Neighbourhood Collection
<img src="/doc_imgae/2019-5-23/2.png" height="300" width="500">
常用的邻域寻找方式是以点P最相邻的K个点作为P点的邻域点。但这种方法对点云密度不均匀的情况时会不可靠。在点云较密和边缘处,K邻域会倾向于点云较密的区域。
在使用K邻域的基础上,每个点同时伴随着一个小的固定半径的领域。这种方法可以有效地克服密度偏移问题,但是密集处会包含大量超出预期的点,增加了计算成本。
(---没看懂后续在说啥---)反正大概思想是为了避免点云密度差异较大的区域在邻域旋转的时候有偏向,导致该区域点后续可能被误认为边界点。
-------
### 4.2 The Angle Criterion
<img src="/doc_imgae/2019-5-23/3.png" height="300" width="500">
如图2所示。将邻域内点Np投影到其所在的平面上,然后计算投影点两两之间的角度间隔(以点P为中心点),得到最大的角度间隔g。
按照以下公式,计算出点P的边界概率:
$$pi = min((g-(2PI/Np)/(PI - (2PI/Np))) , 1 )$$
-------
### 4.3 The Halfdisc Criterion
<img src="/doc_imgae/2019-5-23/4.png" height="300" width="500">
如图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
<img src="/doc_imgae/2019-5-23/5.png" height="300" width="500">
<img src="/doc_imgae/2019-5-23/6.png" height="300" width="500">
如图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
<img src="/doc_imgae/2019-5-23/7.png" height="300" width="500">
<img src="/doc_imgae/2019-5-23/8.png" height="300" width="500">
<img src="/doc_imgae/2019-5-23/9.png" height="300" width="500">
每一个评价准则都有它自己的优点。相较于角度准则,半圆准则探测小的空洞更有效,尤其是由于边缘所导致的孔洞。
在另一方面,相较于半圆准则和椭球准则,角度准则对细长型的边界效果更好。对于存在噪声的点云,椭球准则表现最好。
为了更好的使用各个准则,我们对三个准则进行加权。通常情况下,规则的权重就能表现出很好的效果。但对噪声较大的情况,可以适当的增加椭球准则的权重。
### 4.6 Normal Estimation
<img src="/doc_imgae/2019-5-23/10.png" height="300" width="500">
对于边缘处,法向估计不准会导致估计的角度准则偏大。为了更好的适应这种情况,我们对角度准则大于一定阈值的邻域法向旋转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
<img src="/doc_imgae/2019-5-23/11.png" height="300" width="500">
闭环提取采用的是广度优先策略。对MSG中每个顶点为起点都做一次寻找,除非是已经存在于闭环中的顶点。
如图所示,论文介绍的我没看太懂。我猜的思路是:
> * 首先将所有的顶点搞成白色,除了起始顶点搞成灰色。
> * 下一步将上一个灰色顶点置为黑色,然后将与之相连的白色顶点置为灰色。
> * 上一步中如果相邻的有黑色的顶点,则忽视。如果有灰色的顶点说明找到了闭环。
<img src="/doc_imgae/2019-5-23/12.png" height="300" width="500">
<img src="/doc_imgae/2019-5-23/13.png" height="300" width="500">
<img src="/doc_imgae/2019-5-23/14.png" height="300" width="500">
<br>
*转载请注明原地址,邓辉的博客:[https://github.com/my-lord/mylord.github.io](https://github.com/my-lord/mylord.github.io) 谢谢!*
-------------------------------------------
#请各位大佬多多打赏
-------------------------------------------
Detecting Holes in Point Set Surfaces 笔记相关推荐
- CornerNet: Detecting Objects as Paired Keypoints 论文笔记
CornerNet: Detecting Objects as Paired Keypoints 论文链接: https://arxiv.org/abs/1808.01244 一. Problem S ...
- CornerNet: Detecting Objects as Paired Keypoints论文笔记(详细)
看完Cornernet之后,不得不说这篇文章很复杂,可以扣的细节很多,而我自己也是反反复复读了好几遍才理清作者的思路,特此记录下来,以供之后回读. Cornernet作为one-stage目标检测器, ...
- PCL点云边界特征检测 (附完整代码 C++)
一.概述 点云特征在定义上(以我个人理解)大致可以分为两大类: 一类是类似于深度学习的featrue map意义,通过计算一些算子来描述点云局部,这种描述只是一种标识符,并没有实际的几何意义,比如 P ...
- 组合专机-EHY-112-90汽车变速箱壳体钻孔组合机床(夹具设计+组合机床设计)
变速箱壳体组合机床的夹具设计 摘 要:变速箱壳体组合机床采用卧式双面加工方案.用于钻削被加工零件左侧面上的8个∅8.5的孔,1个∅11.9的孔,右侧6个∅8.5的孔,2个∅9.8的孔.主要包括总体设计 ...
- Detecting Visual Relationships with Deep Relational Networks(阅读笔记)
Detecting Visual Relationships with Deep Relational Networks(阅读笔记) 原文链接:https://blog.csdn.net/xue_we ...
- DX学习笔记之Surfaces
声明:本文完全翻译自DX SDK Documentation 一个surface代表了显存中的一块线性区域,通常在显卡的显存中,尽管surface也可以存在系统内存中.surface是被IDirect ...
- 【论文笔记】:CornerNet: Detecting Objects as Paired Keypoints
&Title: CornerNet: Detecting Objects as Paired Keypoints CornerNet: Detecting Objects as Paired ...
- [Computer Architecture读书笔记] H.2 Detecting and Enhancing Loop-Level Parallelism
H.1 Introduction: Exploiting Instruction-Level Parallelism Statically 附录H对C3.2进行了的扩展,首先提出了探索ILP的四个技术 ...
- 论文笔记:CornerNet—Detecting Objects as Paired Keypoints
CornerNet: Detecting Objects as Paired Keypoints 1.摘要 2.细节 2.1.概览 2.2.检测角点 2.3.角点分组 2.4.角点池化 2.5.Hou ...
最新文章
- 学习机器学习,究竟是理论重要,还是公式推导重要?
- java架构升级_java架构之路(多线程)synchronized详解以及锁的膨胀升级过程
- JAVA编写一个telephone_JAVA练习.doc
- Java学习笔记13(equals()方法;toString()方法)
- OpenCV形态学变换函数morphologyEx()顶帽运算的使用
- python外汇兑换代码_python爬取人民币汇率中间价
- create-react-app脚手架中配置webpack的方法
- 七月外贸新规,外贸人请查收
- 第3章 项目立项管理
- su灯光插件_su各种插件合集
- 算高差改正数的计算机程序,水准测量中测量高差的改正数怎么计算?
- 送书 | 聊聊阳光问政
- 刘邦的用人之道!真心服气
- 关于vue组件引用外部Js数值和方法出现的问题
- PDF文件怎么合并在一起?这三种方法快利用起来
- LVS的NAT、TUNNEL、Full-NAT模式
- php查询数据库表中的id个数,GitHub - xindong/easy-total: 一个可以对预先设定的sql语句进行实时数据统计并输出结果的服务...
- 赛扬处理器_首批15瓦四核处理器即将成为历史:英特尔宣布停产4个型号
- 突然无法连接虚拟机:ifconfig中没有ens33
- 蓝牙芯片----BK3431开发笔记------注意事项(1)
热门文章
- 工频风力发电储能逆变电路中的电流检测(霍尔电流传感器ACS712/CH701应用案例)
- android 获得ram大小,Android中获取(RAM)总运存大小跟可用运存大小
- 四川绵阳成立大中华区首个 IBM大数据分析竞争力中心
- 什么是 SRS 呢?在我们大部分的音频播放器里都内欠有这种音效。
- 《2019全球仓储自动化50强企业排行榜》
- 免费范文网复制内容-百味书屋
- WMS仓储系统能给企业带来哪些帮助?
- 实测百度如流:精致又豪横! AI协同办公应有的样貌
- Part1---3.数据库编程与完整性
- 【基础框架-SSM】Maven_进阶