是否有任何算法或最好是代码片段来组织和分组由Kinect从点云图像生成的近乎放置的点(在半径或特定数量的邻居中组织)并将其转换为一个点。我想增加尺寸,从而减少点数。
答案 0 :(得分:4)
这是一个称为“聚类分析”的广泛主题。查看here了解更多信息。你应该用几种聚类方法做一些实验。
答案 1 :(得分:0)
一个简单的方法如下:
代码:
std::map<CellIndex, std::vector<P3d> > pmap;
for (int i=0,n=pts.size(); i<n; i++)
{
int ix = int(pts[i].x / eps);
int iy = int(pts[i].y / eps);
int iz = int(pts[i].z / eps);
pmap[CellIndex(ix, iy, iz)].push_back(pts[i]);
}
for (std::map<CellIndex, std::vector<P3d> >::iterator i=pmap.begin(),e=pmap.end();
i != e;
++i)
{
// get cluster center
int cx = i->first.ix;
int cy = i->first.iy;
int cz = i->first.iz;
// collect points from all 9 cluster with x index between cx-1 and cx+1
// between cy-1 and cy+1 and between cz-1 and cz+1 (inclusive).
// Not all clusters are guaranteed to be present in the map.
// You will be considering only points that are at most 1.5*sqrt(3)*eps from
// the center of the (cx, cy, cz) cell.
}
根据您需要进行的计算,有时可以执行一次通过 通过将中间结果保存在单元格本身而不是将点存储在单元格中。
答案 2 :(得分:0)
您是否考虑过使用 mean Shift ?