如何生成密集点云的稀疏版本

时间:2014-04-10 02:10:12

标签: matlab graphics 3d computer-vision game-engine

我的每一行都有一个大型的3D点云文件,其格式为

x(1)y(1)z(1)g(1)

...

...

x(n)y(n)z(n)g(n)

现在由于cpu功率限制我无法显示所有3D点并且只想选择它的子集。只说五分之一。

如果我执行以下操作

while (){
if x(i) % 5 == 0 keep the 3d point
}

结果得到zibera模式,所以看起来不太好看。您建议选择哪种算法来形成点子集以形成与原始密集点云最相似的子3D点云?

谢谢

语言并不重要(matlab,java c等)重要的是我们如何制作原始版本的稀疏版本。

2 个答案:

答案 0 :(得分:2)

作为第一个答案中提到的随机子采样的替代方法,您可以尝试这样做:

  1. 计算边界框的点云(轴对齐或定向边界框),
  2. 选择单元格大小(边界框现在包含此尺寸的W x H x D单元格),
  3. 将点云的所有点散列到各自的单元网格中,每个单元格最多只保留N个点(N> = 1),或者更简单,只需删除或保留每个第N个点。

答案 1 :(得分:0)

随机子采样有什么问题吗?

f = fractionOfDataToKeep(); // between 0 (0%) and 1 (100%)
while() {
  r = rng(1.0); // pseudorandom number between 0 and 1
  if (r < f) keepThe3DPoint()
}