我使用Point Cloud Library有两个3D点云。一个是参考点云(我们称之为 A )而另一个是畸形(让我们称之为 B )。两个点云都取自物体,除了边缘之外,它们在某种程度上在表面上没有或具有非常微小的特征。 A 和 B 这些点云也是对齐的。
非常感谢。
答案 0 :(得分:3)
答案 1 :(得分:1)
我不是这些东西的专家,所以这些主要是想法,而不是解决方案,我可能错了。
但我的天真方法是基于两个网格的布尔运算/ constructive solid geometry(另请参阅this question at gamedev)。如果你计算A-B
,你得到的网格包含A中的所有内容,但不包含在B中 - 换句话说:B中缺少的部分。
但这种方法存在两个问题:
因此,差异网格将在实际缺失区域之外包含许多小“体积”。您可以通过在布尔操作期间向A添加某种公差半径或者对结果应用一些平滑或其他后处理来解决此问题。
另一种方法可能是不对网格进行布尔运算,而是对从点clounds创建的implicit functions进行布局操作(例如使用moving least squares),然后从结果隐式函数创建网格(例如与marching cubes)。这可能是一个更强大的解决方案。
要创建网格图像,只需使用OpenGL或DirectX渲染它。
答案 2 :(得分:0)
只要你的云都是有组织的(你从Kinect那里得到它们,AFAIK产生的云组织为常规点网格)你可以将它们变成深度图像。只要您相信云正确对齐(您的Kinect静止,查看同一场景),您就可以使用常用的图像处理技术和深度图像,包括获取两个图像之间的差异,平滑,创建蒙版图像从差异图像使用一些阈值。获得蒙版图像后,将其应用到B云,将蒙版外的所有点设置为NaN(如此https://stackoverflow.com/a/17282917/1027013),然后是B中与A不同的部分的三维图像。
虽然我知道这种方法正在使用,但我从未使用过它,也从未使用过Kinect。我想由于噪音和小的地面振动,所产生的面罩也可能太嘈杂,特别是在场景的边缘和“轮廓”点,这是应用于深度面罩的图像处理工具来拯救。