最远点采样(Farthest Point Sampling)介绍

最远点采样(Farthest Point Sampling,FPS)算法详解 FPS算法详解 阅读详情
AI摘要

最远点采样(FPS)是均匀采样的关键算法,常见于3D点云处理如PointNet++、VoteNet和PVN3D。FPS通过迭代选择离现有采样点最远的点,确保采样均匀。初始点可随机选择或取点云重心,距离度量通常用欧氏距离或测地距离。本文还提供了算法实测分析和测试样例。

最远点采样(Farthest Point Sampling)是一种非常常用的采样算法,由于能够保证对样本的均匀采样,被广泛使用,像3D点云深度学习框架中的PointNet++对样本点进行FPS采样再聚类作为感受野,3D目标检测网络VoteNet对投票得到的散乱点进行FPS采样再进行聚类,6D位姿估计算法PVN3D中用于选择物体的8个特征点进行投票并计算位姿。

对于FPS算法的原理,两篇博文:PointNet++的pytorch实现代码阅读,以及 PointNet++详解与代码
已经介绍的非常详细了,一句话概括就是不断迭代地选择距离已有采样点集合的最远点。这里再介绍一遍,并实测分析一下;

FPS算法原理:

  1. 输入点云有N个点,从点云中选取一个点P0作为起始点,得到采样点集合S={P0};
  2. 计算所有点到P0的距离,构成N维数组L,从中选择最大值对应的点作为P1,更新采样点集合S={P0,P1};
  3. 计算所有点到P1的距离,对于每一个点Pi,其距离P1的距离如果小于L[i],则更新L[i] = d(Pi, P1),因此,数组L中存储的一直是每一个点到采样点集合S的最近距离;
  4. 选取L中最大值对应的点作为P2,更新采样点集合S={P0,P1,P2};
  5. 重复2-4步,一直采样到N’个目标采样点为止。

有两个问题,一个是初始点选择,一个是采用的距离度量;

  • 初始点选择:
    • 随机选择一个点,每次结果不同;
    • 选择距离点云重心的最远点,每次结果相同,一般位于局部极值点,具有刻画能力;
  • 距离度量
    • 欧氏距离:主要对于点云,在3D体空间均匀采样;
    • 测地距离:主要对于三角网格,在三角网格面上进行均匀采样;

下面给出测试样例,也来自上面两篇博文:

from __future__ import print_function
import torch
from torch.autograd import Variable

def farthest_point_sample(xyz, npoint): 

    """
    Input:
        xyz: pointcloud data, [B, N, 3]
        npoint: number of samples
    Return:
        centroids: sampled pointcloud index, [B, npoint]
    """

    xyz = xyz.transpose(2,1)
    device = xyz.device
    B, N, C = xyz.shape
    
    centroids = torch.zeros(B, npoint, dtype=torch.long).to(device)     # 采样点矩阵(B, npoint)
    distance = torch.ones(B, N).to(device) * 1e10                       # 采样点到所有点距离(B, N)

    batch_indices = torch.arange(B, dtype=torch.long).to(device)        # batch_size 数组

    #farthest = torch.randint(0, N, (B,), dtype=torch.long).to(device)  # 初始时随机选择一点
    
    barycenter = torch.sum((xyz), 1)                                    #计算重心坐标 及 距离重心最远的点
    barycenter = barycenter/xyz.shape[1]
    barycenter = barycenter.view(B, 1, 3)

    dist = torch.sum((xyz - barycenter) ** 2, -1)
    farthest = torch.max(dist,1)[1]                                     #将距离重心最远的点作为第一个点

    for i in range(npoint):
        print("-------------------------------------------------------")
        
FPS(最远点采样算法)原理与代码详解 最远点采样的原理说明与代码解析 阅读详情

相关推荐

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

另一个描述:https://www.it610.com/article/1279200974338015232.htm 我自己描述的算法 每一次都选最远的点加入进来,这样能够使得所选的点足够分散并覆盖全部。 所以关键步骤在于每次都要选最远的点。 1. 第一个点可以随便初始化 2. 第二点选最远的点 3. 第三个点该怎么选呢? 当然也是要选离第一个和第二个点都最远的点。我们可以让剩余的每个点都与 第一个点和第二个点计算距离,这会有两个距离值,选择最短的那个距离表示他们与这两个点的距离...

qq_36265860的博客 7345

通俗图解:最远点采样法FPS(Farthest Point Sampling)的原理与优化实践

本文深入解析最远点采样法FPS(Farthest Point Sampling)的原理与优化实践,通过通俗易懂的图解和实际案例,展示FPS在3D点云处理、医疗影像等领域的应用。文章详细介绍了FPS的基础算法、性能优化技巧及工程实践中的解决方案,帮助读者高效掌握这一关键技术。

weixin_30836759的博客 400

最远点采样 — D-FPS与F-FPS

点云最远点采样FPS(FarthestPointSampling)方法的优势是可以尽可能多地覆盖到全部点云,但是需要多次计算全部距离,因而属于复杂度较高的、耗时较多的采样方法。

叶子的博客 6911

PCL 最远点采样 (Farthest Point Sampling)

本文介绍了最远点采样算法(FPS)在点云处理中的应用。通过选择距离已选点集最远的点,FPS 可以构建具有均匀分布的离散点集。我们提供了 Python 实现的示例代码,并演示了如何在输入的点云数据集上应用 FPS 算法。希望本文对您理解和使用最远点采样算法有所帮助。

DevGlider的博客 794

matlab 点云最远点采样(Farthest Point Sampling,FPS)

matlab 点云最远点采样(Farthest Point Sampling,FPS)

baidu_39506033的博客 509

点云处理中的最远点采样算法

最远点采样(Farthest Point Sampling)是一种常用的点云处理算法,用于选择具有最大间距的点集,以便在点云数据中进行均匀采样或者减少数据量。在本文中,我将介绍如何使用CloudCompare和PCL(Point Cloud Library)库来实现最远点采样算法,并提供相应的源代码。通过使用CloudCompare和PCL库,我们可以轻松实现最远点采样算法,并在点云处理任务中应用该算法。最远点采样算法的原理是通过迭代选择与已选点之间的最大距离的点,逐步构建具有最大间距的点集。

JbPatch的博客 813

【PCL常用滤波器】Farthest Point Sampling滤波器

FPS(最远点采样)是一种点云采样方法,通过迭代选择距离已选点集最远的点,实现空间均匀分布。算法流程包括:1)随机初始化;2)维护点到已选集的最近距离数组;3)迭代选择最远点并更新距离。PCL库提供了FPS实现,可通过设置采样点数快速处理点云数据。实例演示了从原始点云中采样10000个点,并通过可视化对比效果。算法核心优势是确保采样点具有最大空间覆盖度,适用于点云降采样等任务。

yijiujiusan的博客 233

基于单片机智能家居控制系统设计

*单片机设计介绍,基于单片机智能家居控制系统设计。

QQ2193276455的博客 1715

Remote ID的调制解调FPGA实现

Remote ID源于航空安全需求,例如在无人机密集区域实现设备跟踪和防碰撞。它类似于航空领域的ADS-B系统,但针对低空飞行器。Remote ID系统通常工作在特定频段(如2.4 GHz或5.8 GHz),通过无线链路广播数据包,包含设备ID、经纬度、高度和速度等信息。调制解调过程确保这些数据在噪声环境中可靠传输。例如,标准如ASTM F3411定义了Remote ID的协议框架,其中调制解调是关键物理层组件。

yulongfenghu的博客 1506

可变形卷积(Deformable Conv)原理解析与torch代码实现

图6为可变形卷积示意图。图1所示为普通卷积在输入特征图上进行卷积计算的过程,卷积核大小为3*3,在输入特征图尺寸为7*7上进行卷积,将卷积核权重与输入特征图对应位置元素相乘并求和得到输出特征图元素,按一定方式滑动窗口就能计算得到整张输出特征图。图6所示,在input feature map上普通卷积操作对应卷积采样区域是一个卷积核大小的正方形(绿框),而可变形卷积对应的卷积采样区域为一些蓝框表示的点,这就是可变形卷积与普通卷积的区别。先来一张图感受一下,图3为标准卷积与可变形卷积的卷积示例。

panghuzhenbang的博客 5万+

暗黑破坏神2重制版 mod制作教程(一)

暗黑2重制版mod修改教程

hhhh2312的博客 7452

FP7195升降压恒流驱动IC:从AC/DC 12~24V输入到稳定输出的高效电源设计实战

本文详细解析FP7195升降压恒流驱动IC的工作原理与应用实战。该芯片支持4.5V-32V宽输入范围,能自动切换升降压模式并保持输出恒定,特别适用于车载LED照明、工业电源等电压波动场景。通过实际案例分享PCB布局、元件选型及调试技巧,帮助工程师实现高效稳定的电源设计。

vodka的博客 955

信贷系统学习总结(6)—— 贷前、贷中、贷后全流程核心模型解析

本文系统解析了金融风控模型的技术演进与应用实践。从贷前、贷中到贷后全流程,详细介绍了A卡、B卡、C卡三类核心评分模型,以及反欺诈、动态监控、催收优化等关键技术的实现路径。重点阐述了特征工程设计、模型验证指标、联邦学习等创新应用,并提供了多个实战案例数据。同时提出了算法选择的"黄金三角"原则和分阶段技术演进路线,强调数据治理、模型全生命周期管理和复合型团队建设的重要性。文章指出未来风控将向决策智能化、数据无感化和风险预知化方向发展,需要平衡技术创新与合规要求。

科技D人生 1220

Matlab之App Designer 如何进行三维图形绘制教程

基于Matlab中的App Designer设计可视化界面并进行数据导入及3D绘图,可以直观的在可视化界面上展示分析结果,方便用户进行图形的操作。本文采用案例讲解的方式,详细介绍了如何采用Matlab App Designer建立数据3D绘图的GUI可视化界面的方法和详细的过程步骤,并介绍了导入数据进行计算时需要注意的相关事项,同时提供了详细的代码,以便读者进行学习和操作。

m0_59012156的博客 2066

【突变检验方法一】MATLAB实现Pettitt突变检验

MATLAB实现Pettitt突变检验及贝叶斯突变检测等

WW、forever的博客 1万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

上一篇: 物体6D位姿的含义
Guoguang Du
博客等级 码龄16年 599粉丝 15原创
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值