通俗描述,带图,最远点采样法FPS(Farthest Point Sampling)

2023-10-28 17:10

本文主要是介绍通俗描述,带图,最远点采样法FPS(Farthest Point Sampling),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

另一个描述: https://www.it610.com/article/1279200974338015232.htm  

我自己对算法的描述:

每一次都选最远的点加入进来,这样能够使得所选的点足够分散并覆盖全部。  
所以关键在于每次都要选最远的点。  
1. 第一个点可以随便初始化  
2. 第二点选最远的点  
3. 第三个点该怎么选呢? 当然也是要选离第一个和第二个点都最远的点。我们可以让剩余的每个点都与 第一个点和第二个点计算距离,这会有两个距离值,选择最短的那个距离表示他们与这两个点的距离,因为这表示的就是剩下的这些点分别到已经被选的两个点的距离,从这些距离里面选距离值最大的点,也就是最远的那个点,这就能满足我们每次都选最远点的目的了。
4. 后续的点也按照第三步的方式进行,让剩余的点与之前选过的点都进行距离计算,然后选择距离最小的那个作为他们到已选点集的距离,最后再从这些距离值里面选择最大的那个,也就是最远的那个点,就可以了。
5. 重复上面的步骤,直到达到期望的采样点个数即可结束。

 

算法设计改进

在第三步和第四步中,每一次选择下一个点都需要计算剩下的点到已选的点的距离(剩下的点与所有已选点的距离中最小的那个距离),随着已选点数的增加,计算量会增长非常多,具体增长方式按照多项式O(n*(n-k))方式增长,在选取第n/2个采样点时计算量达到最大即(n^2)/2。但实际上,每次都要更新的那些剩下的点到已选点的最小的距离的主要原因是上一次添加的新的已选点,因为这个新点的加入使得所有的未选点的距离都需要更新,但是很明显这个更新不需要每次都那么"兴师动众"对所有已选点集合和未选点集合里面的任意两个点都算一遍,只需要在每次加入新点之后,让这个新点与剩下的所有点进行距离计算,如果这个距离相较新点之前时保存的距离值更小,那么更新这个剩下点所对应的距离值即可,如果并没有更小,那么就保持不变。这样就能够使得计算量大幅降低,使得在目前常用的点云数量上的采点速度得到提升,能够降低到O(kn),但如果数据量很大,选点很多,实际上还是O(n^2)。

这篇关于通俗描述,带图,最远点采样法FPS(Farthest Point Sampling)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/294687

相关文章

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

如何通俗理解注意力机制?

1、注意力机制(Attention Mechanism)是机器学习和深度学习中一种模拟人类注意力的方法,用于提高模型在处理大量信息时的效率和效果。通俗地理解,它就像是在一堆信息中找到最重要的部分,把注意力集中在这些关键点上,从而更好地完成任务。以下是几个简单的比喻来帮助理解注意力机制: 2、寻找重点:想象一下,你在阅读一篇文章的时候,有些段落特别重要,你会特别注意这些段落,反复阅读,而对其他部分

zblog自定义关键词和描述,zblog做seo优化必备插件

zblog自定义关键词和描述,zblog做seo优化必备插件     首先说下用到的一款插件:CustomMeta自定义数据字段 ,我们这里用到的版本是1.1,1.1+版增加了列表页标签支持!     插件介绍:文章,分类等添加自定义数据字段。1.1+版适用于 Z-Blog 2.0 B2以上版本。     在zblog2.0beta1里面,这个插件是集成到了程序里面,beta2里面默认没有了

时间序列|change point detection

change point detection 被称为变点检测,其基本定义是在一个序列或过程中,当某个统计特性(分布类型、分布参数)在某时间点受系统性因素而非偶然因素影响发生变化,我们就称该时间点为变点。变点识别即利用统计量或统计方法或机器学习方法将该变点位置估计出来。 Change Point Detection的类型 online 指连续观察某一随机过程,监测到变点时停止检验,不运用到

Mysql 安装的步骤详解,安装流程图详文(每步都 带图 详解)

Mysql的安装流程----详细安装步骤,带图详细。 MySQL5.0版本的安装图解教程是给新手学习的,当前mysql5.0.96是最新的稳定版本。 mysql 下载地址 http://www.jb51.net/softs/2193.html 下面的是MySQL安装的图解,用的可执行文件安装的,详细说明了一下!打开下载的mysql安装文件mysql-5.0.27-win32.zip,双

【C++学习(28)】通俗一点讲解:std::bind 回调技术

std::bind 是 C++11 标准库中的一个功能,它允许你“绑定”某些参数到一个函数、成员函数或可调用对象上,从而生成一个新的可调用对象。这种新的可调用对象可以稍后被调用,而且其中一些参数已经被预先设置好了。这在回调函数和异步编程中特别有用。 下面我用一个通俗的例子来解释 std::bind 是如何工作的。 假设场景 假设你有一个家庭厨师,他有一个技能叫做“做饭”。做饭需要两个参数:一

COD论文笔记 ECCV2024 Just a Hint: Point-Supervised Camouflaged Object Detection

这篇论文的主要动机、现有方法的不足、拟解决的问题、主要贡献和创新点: 1. 动机 伪装物体检测(Camouflaged Object Detection, COD)旨在检测隐藏在环境中的伪装物体,这是一个具有挑战性的任务。由于伪装物体与背景的细微差别和模糊的边界,手动标注像素级的物体非常耗时,例如每张图片可能需要 60 分钟来标注。因此,作者希望通过减少标注负担,提出了一种仅依赖“点标注”的弱

【软件测试】软件测试-----什么是Bug?Bug是如何分级的?Bug的生命周期是怎样的?如何描述一个Bug?

博客目录 一.软件测试的生命周期二.BUG的定义和级别2.1 bug的概念.2.2 如何描述一个bug.2.3bug的级别2.3.1 bug分级的意义.2.3.2 bug的四种级别. 三.BUG的生命周期.四.当与开发人员发生冲突该如何处理(高频面试)五.总结 一.软件测试的生命周期 软件测试贯穿于软件的整个生命周期,针对这句话我们一起来看一下软件测试是如何贯穿软件的整个生命周

Leetcode刷题笔记:多数元素(摩尔投票算法最通俗的理解)

关键点: 给定的数组总是存在多数元素。出现次数大于 ⌊ n / 2 ⌋ \lfloor n/2\rfloor ⌊n/2⌋ 说明下面这种情况不会出现在测试用例中: [3,3,3,2,2,2,4] 或 [3,3,3,2,2,2] 也就是刚好有2个频率等于 ⌊ n / 2 ⌋ \lfloor n/2\rfloor ⌊n/2⌋ 的元素 按照进阶要求,设计一个时间复杂度为 O(n)、空

FPGA编程基础(二)--常用行为仿真描述

1、常用的行为仿真描述语句 利用循环完成遍历 for、while语句常用于完成遍历测试。当设计代码包含了多个工作模式,那么就需要对各种模式都机型遍历测试,如果手动完成每种模式的测试,则将造成非常大的工作量。利用for循环,通过循环下标来传递各种模式的配置,不仅可以有效减少工作量,还能保证验证的完备性,不会漏掉任何一种模式。 (1) for循环仿真 可综合文件: module sign