泊松盘采样
泊松盘采样(possion disk sampling)的特点是任何两个点的距离都不会隔得太近。
比如下图,左边是随机生成的点,右边是泊松盘采样生成的点。
具体流程如下:
1、设定好两个点之间最近的距离r,以及采样点所在空间的维度n,比如2维平面
2、在空间里生成足够多的网格,保证不接触的两个网格之间的点的距离大于r,并且网格数量足够多保证每个网格至多只需装一个采样点就能满足采样数量。为了最优化,一般取网格边长为r/sqrt{n}。
3、随机生成一个点,再创建两个数组,第一个是处理数组,第二个是结果数组,即最终的输出数组。把这个点放进处理数组中和结果数组中。
4、如果处理数组非空,从中随机选择一个点,如下图的红点,并把这个点从处理数组中删除。如果处理数组是空的,直接输出结果数组并结束算法。
5、设定最小距离minr,比如r,最大距离maxr,比如2*r。以红点为中心生成一个圆环,如下图灰色圆环,在这个圆环中生成一个采样点,如下图蓝点。
#include < pcl/surface/poisson.h >
//泊松重建
cout < < "begin poisson reconstruction" < < endl;
Poisson< PointXYZRGBNormal > poisson;
//poisson.setDegree(2);
poisson.setDepth(8);
poisson.setSolverDivide (6);
poisson.setIsoDivide (6);
poisson.setConfidence(false);
poisson.setManifold(false);
poisson.setOutputPolygons(false);
poisson.setInputCloud(cloud_smoothed_normals);
PolygonMesh mesh;
poisson.reconstruct(mesh);
全部0条评论
快来发表一下你的评论吧 !