点云中的遮挡点剔除

5
我有一个三维点云图像(见下图)。
我想剔除所有理论上在其他点后面的点(例如,背部周围的点将不可见,因为它被胸部和腹部周围的点所遮挡)。
如何解决这个问题?
我只需要前方视图中没有遮挡的点,以便我可以将其用于其他目的。
编辑:实际上并不是为了查看目的。我正在尝试隔离仅未受阻碍的顶点,以便稍后计算表面法线以提取深度图像特征。

为什么需要表面法线来提取深度? - JAre
不提取深度,而是使用表面法线作为深度图像的特征。这更多是计算机视觉方面的事情。我正在使用一些OBJ模型来临时模拟从Kinect获取的点云数据。由于它是深度传感器,因此只有物体的前部分被Kinect获取。 - sub_o
你可以将网格法线渲染为片段颜色(R G B),深度作为 alpha 值,然后将其纹理化并查找其中的随机点,或者应用包含 1 和 0 的掩码,并在其上乘以着色器输出,这样你就可以获得具有点而非实体表面的纹理。 - JAre
如果您需要提取法线和深度并将其放入纹理的示例,请搜索“延迟渲染”。 - JAre
2个回答

3

一个点没有任何维度,所以你无法用点来遮挡什么东西。

如果你有一个网格(也就是你知道哪些点“连接”在一起),那么你可以隐藏那些被网格遮挡的东西。

如果你没有网格,我知道的最简单的技巧是使用相关的z淡化效果 - 只需使后面的点变得更加模糊。


如果您考虑从您的视角到模型中某一点之间的一条线(射线),那么该线上的所有点都不会被最靠近相机模型的点所“遮挡”吗? - Rui Marques
@RuiMarques 只有当它们 恰好 在同一条线上时才会遮挡,但是一个点的大小为零,因此实际上无法遮挡任何东西。 - Alnitak
当然,我想OP的意思是被其他点定义的表面所遮挡的点。 - Rui Marques
因为如果你想要深度图像,你只对最靠近视点的表面感兴趣。想象一下一个避开障碍物的机器人,你希望它避开墙面,而不是下一个房间隔间里墙的另一端。 - Rui Marques

1

如何使用点的纹理来渲染多边形网格?另一种方法是将多边形网格渲染到z缓冲区(只需要深度),并使用它来丢弃(远处的点将无法通过z测试)在网格后面的点。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接