点云形状识别 [英] point clouds shape recognition

查看:161
本文介绍了点云形状识别的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个杂乱的点云,其坐标(x,y,z)。我的问题是如何在数据中找到特定的形状,例如球体,圆柱体。你可以给我一些建议,thnx

I have a cluttered point cloud with its coordinate (x,y,z).My problem is how to find a specific shape in the data,eg sphere,cylinder.Can you give me some advice ,thnx

推荐答案

对此没有通用解决方案,但是如果你有一个只有一个形状的点云,你可以尝试找到特定形状的参数,然后测试它是否是否适合你的云。



不幸的是,即使这是一个非常困难的问题,数学上:首先你必须写下描述表面类型的参数表达式。然后,您需要将该描述转换为优化问题,通过改变曲面公式的参数来最小化云点到曲面的距离。理论上,如果你有足够数量的点(至少和你有自由度一样多),这个问题就可以得到解决,但在实践中,要逃避各种数据陷阱是非常困难的,例如避免局部最小值,或确保您的优化实际上会收敛。



对于Spheres,它是可管理的,因为任何三个点都定义了一个你知道必须位于表面上的圆。此外,垂直于该圆心的线必须穿过球体的中心。因此,您只需要足够的点来找到两个非平行圆,然后通过它们的中心切割垂直线,找到球体的中心。从那里,很容易检查所有的云点是否实际上都位于该中心周围的球体上:只需检查它们的距离!



对于其他的二次曲线,它更加棘手,但是我怀疑对于圆柱体,甚至圆锥体,你可能能够提出类似于上述球体的构造算法。



几年前我寻找过这种algortihms,但我想出的只是两篇关于此事的科学论文。我们只是说他们使用的算法将是一个博士后复制和实现的东西:即使我自己是一名数学家(并且是一名经验丰富的程序员),我也不想尝试自己解决这个问题。



如果你的积分也包含杂乱,那么所有的赌注都是关闭的:如果你不知道要测试哪些点,那么你就无法验证或纠正曲面的位置和参数。在这种情况下,您需要以某种方式首先分离数据。显然,如果您知道哪些点属于哪个对象,那么您只能这样做。这在很大程度上取决于您对场景的了解以及用于获取点云的方法。



我能提供的唯一更一般的建议是将你的场景分成许多小的立方子区域,只​​看这个区域内的点,以确定它们是否适合一个简单的表面类型。显然它们需要足够大才能包含足够数量的点(你可能需要至少15-20才能做出可靠的拟合),但要小到足以使它们中至少有一些不包含外来点(来自其他物体或背景场景)。找到匹配后,您可以检查相邻的立方体以获得更多适合同一表面的点。当你完成后,你可以从适合你表面的云中删除所有点,然后继续分析其余的点。
There is no general solution for this, but if you have a point cloud of just one shape you can try to find the parameters for a specific kind of shape and then test if it fits your cloud or not.

Unfortunately even this is a very difficult problem, mathematically: first you have to write down a parametric expression describing the surface type. Then you need to turn that descrioption into an optimization problem that minimizes the distance of the cloud points to the surface by varying the parameters of the surface formula. In theory this problem can be solved if you have a sufficient number of points (at least as many as you have degrees of freedom), but in praxis it is extremely difficult to escape the various numerical traps, such as avoiding local minima, or ensuring that your optimization actually converges.

For Spheres it is managable, as any three points define a circle that you know must lie on the surface. Furthermore, the line vertical to the center of that circle must pass through the center of the sphere. So, all you need is enough points to find two non-parallel circles, then cut the vertical lines through their centers, to find the center of the sphere. From there, it's easy to check if all cloud points actually lie on a sphere around that center: just check their distance!

For other quadrics it's a lot trickier, but I suspect that for cylinders, or maybe even cones, you may be able to come up with a similar constructive algorithm as described above for spheres.

A few years ago I sought for algortihms of this kind, but all I came up with were two scientifical papers dealing with the matter. Let's just say the algorithms they used would be something for a post doctarate to copy and implement: even though I am a mathematician (and expereinced programmer) myself, I didn't feel like trying myself on the problem.

If your points contain clutter as well, then all bets are off: if you don't know which points to test, then you cannot verify or correct the position and parameters of your surface. In this case, you need to somehow separate the data first. Obviously you can only do that if you have an idea which of your points belong to what object. This very much depends on your knowledge of the scene and the method that is used to obtain the point cloud.

The only more general advice I can offer is to partition your scene into many small cubic subareas and only look at points within such an area to determine if they could fit one of your simple surface types. Obviously they need to be big enough to contain a suffiecient number of points (you'll probably need a 15-20 at least to make a reliable fitting), but small enough that at least some of them do not contain "foreign" points (from other objects or the background scene). Once you found a match, you can check neighboouring cubes for more points that fit the same surface. And when you're done, you can remove all points from the cloud that fit your surface, then continue to analyze the rest.


这篇关于点云形状识别的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆