一、什么是FPS算法
Farthest Point Sampling(FPS)。它是一种常用的点云采样方法,用于在点云数据集中选择一部分代表性的点。FPS的主要思想是从点云中选择与已选择点之间最远的点,以确保选择的点在空间上尽可能分散,从而提高采样的效率和代表性。FPS通常用于点云处理、计算机图形学和计算机视觉等领域。
二、FPS算法的作用
FPS算法的主要作用是在点云数据中选择一部分代表性的点。这些代表性的点可以用来减少点云数据的复杂性,从而降低处理成本并加速后续的计算。FPS通常用于以下几个方面:
-
点云降采样:对于大型点云数据集,FPS可以帮助减少点的数量,从而降低处理和存储成本,同时保留足够的信息以保持数据的代表性。
-
特征提取:在点云中选择代表性点后,可以在这些点上计算特征,例如法向量、曲率等。这些特征可以用于点云分析、分类、配准等任务。
-
数据压缩:FPS可以用于对点云数据进行压缩,去除冗余信息并保留主要特征,以节省存储空间。
-
点云重建:在点云重建过程中,FPS可以用于选择一组代表性的点,以便在重建过程中更有效地表示原始对象的形状。
三、FPS算法的思想
假设有 n 个点进行FPS算法,采样出 k (k<n) 个点。现在有 A ,B 两个集合,A 表示选中的点形成的集合, B 表示未选中的点构成的集合。顾名思义,FPS做的事情是:每次从集合 B 里面选一个到集合 A 里面的点距离最大的点。
最初状态: A 为空, B 包括所有点。
选第一个点。可以对所有点shuffle(乱序)后,选第一个点即可。大部分实现也是这么做的。第一个点选完之后,将其移动到集合 A 中。此时,集合 A 包含 1 个点,集合 B 包含 n−1 个点。
选第二个点。分别计算出集合 B 里面的每个点到集合 A 中的一个点的距离,选距离最大的点,将其移动到集合 A中。此时,集合 A 包含 2 个点,集合 B 包含 n−2 个点。
选第三个点。此时,如何定义集合 B 里面的点,到集合 A 里面的点的距离?因为集合 A 里面不止有一个点。这是理解FPS的核心。假设点 是集合 A 里面的一个点,计算
的距离的方式如下:
- 分别计算出
到集合 A 中每个点的距离。此时集合 A 里面有两个点,所以可以计算出两个距离值。
- 从计算出来的距离值里面,取最小的距离值,作为点
到集合 A 的距离值。
对于集合 B 里面的每个点,都可以计算出一个距离值:{ }。选出最大的距离值对应的点,最为第3个点,移动集合 A 中。此时,集合 A 包含 3 个点,集合 B 包含 N−3 个点。
之后可以按照选第三个点的方式,直到选出 K 个点为止。