通俗描述,带图,最远点采样法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)。

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值