求助帖:这个最远点采样是不是有问题

我对最远点采样的理解如下如下:

  1. 初始点选择:从点云中随机选择一个初始点作为第一个采样点。
  2. 距离计算:对于每一个新采样点,计算其与所有未采样点之间的距离。
  3. 选择最远点:在每一步中,选择所有未采样点与当前采样点集最远的点作为新的采样点。
  4. 重复步骤2和3:直到采样到所需数量的点。
def farthest_point_sample_error(point, npoint):
    """
    最远点采样算法

    Args:
        point: 点云数据,形状为[N, D]
        npoint: 采样点的数量
    Returns:
        centroids: 采样点的索引,形状为[npoint, D]
    """


    N, D = point.shape  # 获取点云数据的形状
    xyz = point[:, :3]  # 获取点云数据的前三列,即坐标信息
    centroids = np.zeros((npoint,))  # 初始化采样点索引
    distance = np.ones((N,)) * 1e10  # 初始化距离数组,所有值为无穷大
    farthest = np.random.randint(0, N)  # 随机选择一个初始点

    for i in range(npoint):
        centroids[i] = farthest  # 将当前点加入采样点集合
        centroid = xyz[farthest, :]  # 获取当前点的坐标
        over = (xyz - centroid)**2
        dist = np.sum(over, -1)  # 计算所有点到当前点的距离
        mask = dist < distance  # 找到 当前点到各个点之间的距离 小于 上一个点到各个点之间的距离 的点
        distance[mask] = dist[mask]  # 更新距离数组
        farthest = np.argmax(distance, -1)  # 选择距离最远的点作为新的最远点

    point = point[centroids.astype(np.int32)]  # 根据索引选择采样点
    return point  # 返回采样后的点云数据

如果对于A,B,C,D这样四个点,坐标如下

 [0, 3], [1, 3], [4, 0], [0, 0]或者 [0, 3, 0], [1, 3, 0], [4, 0, 0], [0, 0, 0]

若是,从A点开始采样3个点

····按照上面的算法····

初始距离数组=[+∞,+∞,+∞,+∞]

A_toABCD=[0,1,5,3],距离数组==[0,1,5,3],所以第二采样点是C

C_toABCD=[5,eq?%5Csqrt%7B18%7D;0;eq?%5Csqrt%7B16%7D],距离数组==[0,1,0,3],所以第三采样点是D

····按照我的理解····

A_toA=0;A_toB=1;A_toC=5,A_toD=3;所以第二采样点是C

C_toA为重复;C_toB=eq?%5Csqrt%7B18%7D;C_toC=0;C_toD=eq?%5Csqrt%7B16%7D,第三采样点应该是B

所以是我的理解错了吗

还请不吝赐教留下评论,在此甚是感谢!!!

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值