C++ 如何检测两个3D点云之间的差异?
我有两个三维点云使用。一个是参考点云(我们称之为A),另一个是畸形点云(我们称之为B)。这两个点云都是从对象中获取的,这些对象在表面上除了边缘之外没有任何或非常微小的特征。这些点云A和B也对齐C++ 如何检测两个3D点云之间的差异?,c++,algorithm,computer-vision,point-cloud-library,C++,Algorithm,Computer Vision,Point Cloud Library,我有两个三维点云使用。一个是参考点云(我们称之为A),另一个是畸形点云(我们称之为B)。这两个点云都是从对象中获取的,这些对象在表面上除了边缘之外没有任何或非常微小的特征。这些点云A和B也对齐 我想知道是否有任何算法可以从B中检测到缺失的云 如何构建B缺失部分的高分辨率三维图像 谢谢你的帮助 我不是这些方面的专家,所以这些大多是想法,而不是解决方案,我可能是错的 但我的天真方法是基于两个网格的布尔运算(另请参见)。如果计算A-B,则得到的网格包含A中的所有内容,但不包含B中的所有内容-或者换
- 我想知道是否有任何算法可以从B中检测到缺失的云
- 如何构建B缺失部分的高分辨率三维图像李>
谢谢你的帮助 我不是这些方面的专家,所以这些大多是想法,而不是解决方案,我可能是错的 但我的天真方法是基于两个网格的布尔运算(另请参见)。如果计算
A-B
,则得到的网格包含A中的所有内容,但不包含B中的所有内容-或者换句话说:B中缺少的部分
不过,这种方法存在两个问题:
要创建网格的图像,只需使用OpenGL或DirectX进行渲染。只要两个云都已组织好(您是从Kinect获得的,后者由AFAIK生成组织为规则点网格的云),就可以将它们转换为深度图像。只要你相信云是正确对齐的(你的Kinect是静止的,看着同一个场景),那么你就可以对深度图像使用通常的图像处理技术,包括获取两个图像之间的差异,平滑,使用一些阈值从差异图像创建遮罩图像。获得遮罩图像后,将其应用于B云,将遮罩外的所有点设置为NaNs(如此处)和voila,即B中与A不同的零件的3d图像 虽然我知道这种方法正在使用,但我自己从未使用过,也从未使用过Kinect。我猜,由于噪音和地面振动小,制作的遮罩可能也太吵了,尤其是在场景的边缘和“轮廓”点,这是应用于深度遮罩的图像处理工具来拯救的地方。PCL提供了一些“空间变化检测”解决方案 看看这个链接:
它使用八叉树结构(从点云构建)并比较两个八叉树的差异。该库提供关于点云的哪些数据/属性?隐式函数、体素、网格?感谢您的快速回复。我从Kinect获得了点云,这些是网格。