点云重建总结

news2024/12/23 18:08:01

几何处理和三维视觉

几何处理:是一种计算的方法研究世界中的物理对象,通过硬件扫描生成物理对象的三维模型然后做各种处理和分析。

三维视觉:传统的3D视觉是指从图像中恢复底层的三维结构。

1 几何重建

1.1几何重建的基本流程

  • 扫描:从不同视角观察获取深度信息。(shape from X)、激光雷达等。
  • 配准:将不同视角观察同一事物获得的多个点云合并到一起。
  • 重建:根据点云数据构建网格模型。

从点云重建网格模型的关键是从离散点构造出拓扑连接关系,常见分为两种:

  • 基于计算几何学的显式方法:

认为输入点云中的每个点都是重构网格的顶点,计算输入点云的Delaunay图或其对偶的Voronoi图,利用这些图结构构造出点云中的拓扑关系。

可以最大程度地保持重建网格和输入点云的几何特征一致性。

很依赖输入点云的质量,若点云含有噪声则需要去噪后再重构。

  • 基于隐式曲面的隐式方法:认为输入点云是三维空间在隐式函数零水平集的采样。先根据点云位置拟合出光滑的隐式函数再构造轮廓面。最后将隐式函数的零水平集离散为三角网格。

2、Delaunay算法

以Delaunay2D为例:

1、定义:假设V是二维点集,边e是由V中的点作为端点构成的封闭线段,E为e的集合

三角剖分:给定平面点集生成三角形集合的过程。

在这里插入图片描述

给定点集的三角剖分并不唯一,评价一个三角剖分的好坏有以下标准:

  • 最小角:所有三角形的内角中最小的角。
    在这里插入图片描述

  • 纵横比:三角形最短边和最长边的比例。

  • 半径比:三角形内接圆和外接圆半径的比例。

  • 空圆特性:对于边e(a,b)若存在一个圆经过a,b两点,且圆内不含V中的其他任何点。则e是Delaunay边。

在这里插入图片描述

Delaunay三角剖分:所有三角形的外接圆均满足空圆性质。

2、Delaunay三角剖分的构造算法

是通过逐点插入来实现的。如Bowyer-Watson算法。

  • 构造一个包含所有点的三角形,放入三角形链表。
  • 将点集中的点依次插入,在三角形链表中找出插入点的影响三角形:三角形外接圆包含插入点。删除影响三角形的公共边,将插入点与影响三角形的全部顶点连接起来。
  • 对局部形成的三角形进行优化,将形成的三角形加入三角形链表。
    在这里插入图片描述

3、相关实现

matlab可直接调用delaunay;

python:

from scipy.spatial import Delaunay
def create_delauney(points):
    # create a Delauney object using (x, y)
    tri = Delaunay(points)

c++可以使用第三方库如vtk、CGAL库。

相关软件:CloudCompare:Edit->Mesh->Delaunay 2.5D。

3 基于隐式曲面的隐式方法

主要分为以下两步:

  • 从点云构建隐函数的定义;
  • 从隐函数零水平集抽取等值面、重建网格模型;

3.1 Marching Cubes

1.1 对每个数据点拟合切平面

  • 切平面以中心点 o o o 和法线方向 n ⃗ \vec n n 来表示,选取采样点附近的 k 个点 x i x_i xi,则 o o o 取这 k 个点的重心 o = 1 k ∑ i = 1 k x i o=\frac{1}{k}\sum_{i=1}^{k}x_i o=k1i=1kxi n ⃗ \vec n n 取协方差矩阵 ∑ i = 1 k ( x i − o ) ( x i − o ) T \sum_{i=1}^{k}(x_i-o)(x_i-o)^T i=1k(xio)(xio)T 最小特征值对应的特征向量;详细见:

1.2 让拟合出的切平面在局部的朝向尽量一致

  • 构建欧式最小生成树连接各切平面中心,再连接各切平面中心的k近邻向EMST加入一些新的边得到黎曼图。
  • 选择一个法线最接近于Z轴的切平面,以此法线为朝向根据最小生成树将法线方向传播到黎曼图中的邻近平面。如果两个邻近平面的法线夹角大于180°则暂时反转法线朝向。

1.3 根据切平面生成距离函数f

  • 输入点云数据的采样密度ρ,噪声量级 δ \delta δ.找到距离p最近的切平面中心 o i o_i oi,计算p在该切平面的投影点z,如果z与所有切平面中心之间的最小距离大于 ρ + δ ρ+\delta ρ+δ,则 f ( p ) = ( p − o i ) ⋅ n i ⃗ f(p)=(p-o_i)\cdot\vec{n_i} f(p)=(poi)ni ,否则认为f§是未定义的。

2、抽取等值面,重建网格模型

  • 定义一个空间的立方体划分,每个立方体的边长小于 ρ + δ ρ+\delta ρ+δ(小立方体称为体素);
  • 对于每个立方体计算顶点处有符号距离函数f的值;
  • 对于每条边,如果连接的两个顶点f符号不同则在这边上插值计算插值为0的位置,放置顶点;

根据顶点处的f取值的正负共有256种情况,去除旋转映射后重合的情形共有15种基本情形。

在这里插入图片描述

所有体素处理完成后就得到网格模型。

实现:c++可使用pcl库

3.2 滚球法

https://vgc.poly.edu/~csilva/papers/tvcg99.pdf

Ball-Pivoting Algorithm (BPA) 对给定的点云插值得到一个三角形网格。

  • 想象在点云“表面”上滚动一个半径为p(p应该比点之间的平均距离略大)的小球,当球接触到三个点时,这三个点将形成种子三角形。从这个种子三角形开始,球与端点保持接触围绕其中一个边进行旋转直到触及另一个点,形成新的三角形。持续该过程直到所有可到达的边都尝试过。继续从另一个种子三角形开始直到所有的点都被考虑到。

  • 最后可以使用半径更大的球重复上述过程。
    在这里插入图片描述

  • 球半径如何选择:半径是根据输入点云的大小和比例凭经验获得的。理论上,球的直径应该略大于点之间的平均距离。

  • 如上图b,当采样密度较低时导致会有一些边不会被创建,存在孔洞。

  • 如上图c,当存在曲率较大时会导致球旋转时不会经过一些点会丢失一些特征。

实现:软件meshlab

c++可使用vcglib库。

3.3 贪心投影三角化法

对原始点云进行快速三角化的算法,该算法假设曲面光滑,点云密度变化均匀,不能在三角化的同时对曲面进行平滑和孔洞修复。

1、定义
贪婪投影算法(Greedy Projection Algorithm)是M. Gopi等人[1]于2003年提出的点云表面重建算法。该算法从一个数据点R开始,找到与R相邻的一组数据点,连接R与该组数据点,就可得到数据点R的所有邻接三角形(顶点中包含R的三角形)。然后以广度优先搜索的形式,遍历中的数据点,找到这些数据点的邻接三角形,直到遍历完所有数据点。该算法的重点在于如何连接数据点R和以生成高质量三角形(避免小角度),并保证三角形不会交叠。算法通过投影的方式,将三维数据点投影至二维,在二维平面内连接数据点,以获取不交叠三角形;通过贪婪的方式,当有多个数据点可连成三角形时,尽可能生成角度大的三角形。

2、算法流程

  • 首先以R为中心,长为μ*m的正方体初步筛选相邻数据点。其中μ为用户定义的常量,表示相邻区域的范围;m为R与最近点的距离。然后计算数据点到R的距离,准确筛选出半径以内的数据点。在PCL中,是通过设置常量(mu_),搜索半径(search_radius_),最大搜索数目(nnn_)来确定相邻数据点。首先搜索最近的nnn_个数据点,然后选出距离小于 m u ∗ m mu*m mum和search_radius_的数据点作为相邻点集 C R C_R CR。_
  • 局部区域三维数据点连线问题可以简化至二维平面:我们可以沿着数据点R的法向量进行投影,R的投影R_为投影平面的坐标原点, C R C_R CR的投影结果定义为 C P R C_P^{R} CPR
  • 按角度排序 C P R C_P^{R} CPR:投影点与坐标原点R_可连成向量,根据这些向量到X轴的角度排序。按照该排序依次连接中的数据点就可以形成不交叠的三角形。但是 C P R C_P^{R} CPR中可能有部分点已经生成过三角形,所以要删除部分数据点以避免与原三角形交叠。

3、根据可见度删除数据点(Pruning by Visibility)

在这里插入图片描述

  • 如图1中R与数据点V的连线会与已有三角形相交,应删除数据点V。
  • 删除数据点R的边界边之间的数据点。定义数据点R的边界边之间区域为R的不可见区域,如图1黑色点,当R与这些黑色点相连时会与现有三角形交叠,所以应删除这些黑色点。
  • 删除会被已有网格阻挡的数据点如图白色点。

4、根据角度删除数据点(Pruning by Angle Criterion)

根据可见度删除数据点后,依次连接相邻点就可形成不交叠的三角形,但是这样很容易形成小角度三角形。最好的方式是直接连接和形成大角度三角形,按照如下方法来寻找所有可与线段RP连成三角形的数据点。其中按到R的距离从小到大排列相邻点得到 P s = N 1 , N 2 , N 5 , N 4 , N 3 P_s={N_1,N_2,N_5,N_4,N_3} Ps=N1,N2,N5,N4,N3;按角度排列相邻点 R s = N 1 , N 2 , N 3 , N 4 , N 5 R_s={N_1,N_2,N_3,N_4,N_5} Rs=N1,N2,N3,N4,N5

则执行算法后, N 1 , N 2 , N 3 N_1,N_2,N_3 N1,N2,N3可以跟RP形成三角形,再根据角度要求可形成 R P N 3 RPN_3 RPN3。再寻找可与 R N 3 RN_3 RN3连成三角形的数据点,仅有 N 4 N_4 N4符合要求,所以可连接 N 3 N 4 N_3N_4 N3N4
在这里插入图片描述
在这里插入图片描述

5、三角化

依次连接剩下的数据点就可连成三角形。若相邻数据点的角度过大(如大于120°),则不连成三角形。

6、参考文献
A Fast and Efficient Projection Based Approach for Surface Reconstruction.

实现:c++可使用pcl库。

3.4 泊松重建

泊松重建算法更适合水密性即模型是闭合的三维点云数据,而现实中自己所采用的数据并不会向官方数据集中的数据那样完美,所以在利用泊松重建的过程中就会出现大量的“假想”冗余平面。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/553742.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

宝塔PHP7.1版本37个扩展作用介绍

PATH_INFO:这个扩展可以让PHP获取到URL中的PATH_INFO信息,方便处理URL路由。 bt_safe:这个扩展可以帮助PHP防止一些常见的安全漏洞,比如SQL注入、XSS攻击等。 ionCube:这个扩展可以对PHP代码进行加密,保护…

Linux——线程7|线程池

线程池 线程池以空间换时间,预先申请一批线程,当有任务到来,直接指派线程。 由于这是类的成员函数,因此传参的时候会有一个this指针,我们如果想在传参的时候不传这个this指针,我们只需加上static。 这里只传一个参数,是因为我们的routine是这种类型的

苹果笔不用原装可以吗?apple pencil二代平替笔推荐

随着网络技术的飞速发展,移动电话、平板电脑、笔记本等移动设备正在逐渐走进人们的生活。就好比如我们现在用的是电容笔。我认为,如果我们可以运用它来学习记笔记,做笔记,或其他一些很简单的事情,我们将不必为一支原装…

[CTF/网络安全] 攻防世界 php_rce 解题详析

[CTF/网络安全] 攻防世界 php_rce 解题详析 PHP RECThinkPHP V5漏洞Payload姿势总结 PHP REC PHP RCE 指的是通过远程代码执行漏洞(Remote Code Execution)来攻击 PHP 程序的一种方式。简单来说,由于PHP应用程序没有正确处理外部输入数据&am…

Python argparse的简单demo与详细使用说明

Python argparse的简单demo测试与使用说明 1. Python argparse是啥?2. demo说明2.1 程序主体结构2.2 demo说明 1. Python argparse是啥? argparse是python用于解析命令行参数的标准模块。我们很多时候,需要用到解析命令行参数的程序&#xf…

webmsxyw x-s分析

近期又更新了,先是改了x-s生成,然后又加上了a1校验。 后面可能会全参校验,比如再加上gid、deviceId、profileData、x-s-common、smidV2之类。 估计以后不能写了,大家且看且珍惜吧。之前相关的文章都被下架了 危! 文…

中小企业热衷于做网络营销的原因有哪些?

随着互联网的快速发展,网络营销已经成为了现代企业营销中不可或缺的一部分。在这个过程中,中小企业热衷于网络营销的原因也越来越多地被人们所关注。那么,中小企业为什么热衷于网络营销呢?下面就为大家详细阐述。 一、网络营销成本…

落地包体积监控,用Kotlin写一个APK差异分析CLI

引言 当谈到包体积优化时,网上不乏优秀的方案与文章,如 混淆、资源、ReDex、R8、SO 优化等等。 但聊到 包体积监控 时,总是感觉会缺乏落地性,或者总是会下意识认为这可能比较麻烦,需要其他部门连同配合。通常对于有A…

Spring的定义和创建,使用

前言: 我们常说的Spring就是Spring Framework(Spring框架),Spring支持广泛的应用场景,可以让Java企业级的应用程序开发起来更简单。 目录 一.Spring的定义: 1.1:IOC 1.2:DI 二:Spring的创建 三&…

【JavaEE进阶】第五节.第一个SpringBoot项目的创建

作者简介:大家好,我是未央; 博客首页:未央.303 系列专栏:JavaEE进阶 每日一句:人的一生,可以有所作为的时机只有一次,那就是现在!!! 文章目录 前…

赛宁首创革新赛制助力人才培养 | 第十六届全国大学生信息安全竞赛-创新实践能力赛全面启动!

​​为积极响应国家网络空间安全人才战略,加快攻防兼备创新人才培养步伐,实现以赛促学、以赛促教、以赛促用,推动网络空间安全人才培养和产学研用生态发展,由国防科技大学与中国科学技术大学联合承办的第十六届全国大学生信息安全…

你是不是在担心,ChatGPT写出的文字被其它AI识别?

文 / 高扬(微信公众号:量子论) 最近不少人问我一个道听途说的事情:听说已经有AI工具能够识别是不是ChatGPT写的文字了? 看来必要写篇文章,通过摆事实,为大家压压惊。 在赌场里,能抓老千的人一定…

2023年湖北中级工程师职称申请全流程,你知道吗?启程别告诉你!

2023年湖北中级工程师职称申请全流程,你知道吗?启程别告诉你! 中级职称评审其实是有几个阶段的,职称申请全过程,启程别告诉你,让你评职称少走弯路哟: 第一阶段:准备阶段 第二阶段&…

【JavaEE进阶】——第六节.SpringBoot配置文件介绍

作者简介:大家好,我是未央; 博客首页:未央.303 系列专栏:JavaEE进阶 每日一句:人的一生,可以有所作为的时机只有一次,那就是现在!!! 文章目录 前…

深度学习框架-Caffe:特点、架构、应用和未来发展趋势

引言 深度学习是一种新兴的技术,已经在许多领域中得到广泛的应用,如计算机视觉、自然语言处理、语音识别等。在深度学习中,深度学习框架扮演着重要的角色。Caffe是一种广泛使用的深度学习框架,它在许多方面都有所改进&#xff0c…

基于Android的运动健身减肥管理系统设计与实现

一、项目介绍​ Android客户端功能描述: 1:登录注册:第一次输入用户名密码之后,再次打开登录页面,页面上自动填充上次输入的用户名和密码,登录使用图形验证码验证,登录成功之后,再…

两种鲸鱼优化算法 (whale optimization algorithm, WOA)及仿真实验——附代码

目录 摘要: 算法设计: WOA总体流程图如下: 增强型WOA(E-WOA) 仿真运行效果: 完整程序: 摘要: 鲸鱼优化算法 (whale optimization algorithm,WOA)是 2016 年由澳大利亚格里菲斯…

PM861K01 3BSE018105R1协作机器人机械臂的每个轴上会安装扭矩传感器,用于测量轴电机和变速箱内的机械张力

​ PM861K01 3BSE018105R1协作机器人机械臂的每个轴上会安装扭矩传感器,用于测量轴电机和变速箱内的机械张力 机器人在工业领域已经存在了几十年的时间,但技术创新正在推动全新一轮的工厂自动化趋势。对于那些曾经负担不起(或者不需要&…

Spring 中 @NotEmpty、@NotBlank、@NotNull,傻傻分不清楚!

1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.0.5.RELEASE</version> </dependency>NotEmpty、NotBlank、NotNull 包的位置&#xff1…

智驾芯片市场要“变天”,这家中国厂商如何成为“量产先锋”?

中国智能驾驶芯片的量产之战&#xff0c;正在高歌猛进。 5月19日&#xff0c;黑芝麻智能宣布获得一汽红旗下一代FEEA3.0电子架构平台项目量产智驾芯片定点。据了解&#xff0c;基于黑芝麻智能华山二号A1000L系列芯片&#xff0c;一汽红旗将打造非分时复用的高性价比行泊一体自…