最远点采样-球查询-采样和分组-代码详解
专栏持续更新中!关注博主查看后续部分!
最远点采样、球查询等位于 pointnet2_utils.py 定义
点云坐标归一化
点云坐标归一化是一种预处理步骤,用于将点云数据标准化到一个统一的尺度,通常是在一个特定的范围内,比如 [-1, 1] 或 [0, 1]。这一步骤对于很多三维数据处理和分析任务来说是很重要的,比如三维重建、物体识别、点云分类等。归一化可以帮助改善算法的性能,因为它消除了数据在尺度上的差异,让算法能够更专注于数据的结构和形状特征。
# 归一化点云,以centroid为中心,球半径为1进行归一化 (将点云数据中心化并缩放至单位球内)
# pc 表示输入点云
欧几里得距离计算
# square_distance 用于在 ball query 过程中确定每一个点距离形心的距离
# 函数的输入时两组点, N 为 src 的个数, M 为 dst 的个数, C 为输入点的通道数(特征数)
# 函数的返回是两组点的欧几里得距离,即 N×M
# src: source points, [B, N, C]
# dst: target points, [B, M, C]
对应索引的坐标查询
输入点云集和索引,查询对应的坐标。
# 按照输入点云数据和索引返回索引的点云数据
# 例如 points 为 2×10×3 小批量点云集, idx 为 [[1, 2, 10], [5, 3, 2]] (2×3×3)
# 则返回 Batch1 中第 1, 2, 10 和 Batch2 中第 5, 3, 2 组成的 2×3×3 的点云集
最远点采样
最远点采样(Farthest Point Sampling, FPS)是一种在点云数据中进行子采样的方法,常用于三维计算机视觉和图形处理中。这种方法的目标是从原始点云中选择一组代表性的点,这组点能够尽可能覆盖原始点云的整个形状。最远点采样特别适用于那些需要减少计算量和内存消耗,同时尽量保留几何信息的场景。
# FPS 最远点采样
# 输入: xyz 表示点云数据集合 (B×N×3), npoint 表示采样点的个数(对每个batch来说)
# 输出: centroids (B×npoint) 即每个 batch 采样点的索引