三维测量与建模笔记 - 7.2 点云滤波

ops/2024/12/18 10:13:08/

        逐点计算法向量,需要对每一个点拟合出它的切平面,一般使用邻域点信息来查找切平面。

        选取要计算的点和它周围一定范围内的点可以拟合出一个平面,最基本的方法是通过最小二乘法取对这些点到平面的距离进行优化(计算量很大)。可以通过计算协方差矩阵来实现切平面的查找。

        上面说的C的主分量,直观理解就是这些点在三个正交方向上的分量系数。比如下图:

        对于上述所有点,计算协方差矩阵的特征值后,三个特征向量分别代表图中红绿蓝三个轴向上的分量大小。上图中,绿色方向拉伸程度最大,红色次之,蓝色最小。对于一个切平面来说,所有点的分散程度在法向量方向上一定最小。因此只要通过SVD分解得到C矩阵的特征向量,并且找到特征值最小的特征向量,在几何上这个特征向量与表面估计法向量共线(但需要注意该向量方向上可能与法向量相同或相反)。

        对于局部最优投影采样,可以简单理解为将X均匀投影到P上,对X投影主要有两个要求:1. X要能投影到表面上(吸引力,吸引X的点到P上);2.X要能均匀地分散到表面上(排斥力,让X内部分散开)。

        下图是LOP算法示意图:

        左上图中,绿色点是原始点云P,红点是要投影点的集合X。最初投影结果如右上所示,红色点投影到了比较集中的一个小范围中,然后通过迭代优化,红点之间相互排斥,但排斥的距离不会超过绿点约束的范围,因为绿点对红点有吸引力。左下图是经过几轮迭代后,红点逐渐散开到整个表面,右下图是经过多次迭代后得到的较为理想的均匀分布的情况。最后使用点云Q来计算法向量,此时计算的法向量精度更高。

        WLOP改进了LOP,主要是加入了一项基于点云密度的局部权重项,并且初始的X可以理解为是原有点云的一个下采样的点云。WLOP和LOP的效果对比如下:

         2012年,Huang又提出了对于边界敏感的点云重采样算法。2019年Wang Yifan提出基于patch的3D点云上采样算法。


http://www.ppmy.cn/ops/142878.html

相关文章

Java集合类 HashMap 深度解读(含源码解析)

目录 HashMap基本概念 什么是HashMap HashMap的特点 HashMap类的继承和实现关系 深入了解HashMap前需要知道 hashCode()和equals()方法的关系 重写hashCode()方法的基本规则 HashMap的底层数据结构 JDK 1.8后采用数组 链表 红黑树 负载因子与扩容机制 为什么默认负…

【算法day16】二叉树:搜索二叉树的修剪与构建

题目引用 修剪二叉搜索树将有序数组转换为二叉搜索树把二叉搜索树转换为累加树 1. 修剪二叉搜索树 给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在[low, high]中。修剪树 不应该 改变保留在…

如何使用 Python 读取和写入 CSV 文件?

在Python中,处理CSV文件是一项常见的任务,通常用于数据交换和数据存储。 Python的标准库csv模块提供了一种方便的方式来读取和写入CSV文件。 下面我将详细介绍如何使用Python的csv模块来读取和写入CSV文件,并提供一些实际开发中的建议和注意…

React Native安卓模拟器闪退问题1

今天遇到一个奇葩问题 问题描述:真机执行开发调试正常,使用Android模拟器的时候发现app启动时闪退,在logcat里的error信息如下 Fatal signal 6 (SIGABRT), code 0 (SI_USER) in tid 22732 (FlipperEventBas), pid 22700 通义灵码的解释是有…

Python `__slots__` 进阶指南:不止于节省内存,从原理到实践

相信不少 Python 开发者都听说过 __slots__,知道它可以帮助节省内存。但你是否思考过它背后的原理,以及在实际开发中的其他妙用?让我们一起深入探讨。 从一个性能问题说起 假设你的一个系统需要处理大量的订单对象: class Orde…

安装 telnet

参考链接 https://www.python100.com/html/80855.html Linux telnet 命令安装_failed to start telnet.service: unit not found.-CSDN博客 解决启动的问题,出问题优先看这个 安装telnet服务,以及遇到的一些坑_unit telnet.service could not be fou…

leetcode简单题数组和技巧题

数组是一种基础数据结构,可以用来处理常见的排序和二分搜索问题,典型的处理技巧包括对撞指针、滑动窗口等。 面试中的算法问题,有很多并不需要复杂的数据结构支撑,就是用数组,就能考察出很多东西。 题型1:…

6.1 初探MapReduce

MapReduce是一种分布式计算框架,用于处理大规模数据集。其核心思想是“分而治之”,通过Map阶段将任务分解为多个简单任务并行处理,然后在Reduce阶段汇总结果。MapReduce编程模型包括Map和Reduce两个阶段,数据来源和结果存储通常在…