pcl::random_sample
使用案例
算法原理
/** \brief @b RandomSample applies a random sampling with uniform probability.* Based off Algorithm A from the paper "Faster Methods for Random Sampling"* by Jeffrey Scott Vitter. The algorithm runs in O(N) and results in sorted* indices* http://www.ittc.ku.edu/~jsv/Papers/Vit84.sampling.pdf* \author Justin Rosen* \ingroup filters*/
主要是點云數量服從均勻分布而不是空間服從,實際用有很大風險
pcl::covariance_sampling
使用案例
算法原理
可以設置點數,算法復雜度太高,放棄
cartographer/sensor/voxel
Reservoir_sampling蓄水池抽樣算法
蓄水池抽樣算法(Reservoir Sampling) - 簡書
int[] reservoir = new int[m];// init
for (int i = 0; i < reservoir.length; i++)
{reservoir[i] = dataStream[i];
}for (int i = m; i < dataStream.length; i++)
{// 隨機獲得一個[0, i]內的隨機整數int d = rand.nextInt(i + 1);// 如果隨機整數落在[0, m-1]范圍內,則替換蓄水池中的元素if (d < m){reservoir[d] = dataStream[i];}
}
算法思路大致如下:
- 如果接收的數據量小于m,則依次放入蓄水池。
- 當接收到第i個數據時,i >= m,在[0, i]范圍內取以隨機數d,若d的落在[0, m-1]范圍內,則用接收到的第i個數據替換蓄水池中的第d個數據。
- 重復步驟2。