以下任务:假设您已获得一组连接的a)2D点和b)3D点。任务是找到点集中n个“最弱”的连接。也就是说,我们想要他们的位置和力量。弱连接是在分离线/面积较小的地方,即最小直径的几个部分中物体的分离。
示例:假设您有两个3D对象(例如,通过“手臂”将montior连接到其上的机器)。我现在希望能够找到这种“手臂连接”,能够说出它的弱点在哪里以及它有多强。
图中给出了另一个例子:
我们看到一个3D点云,我用红线标记了两个“弱连接” - 基本上是点云中最薄的连接。
2D示例可能如下所示:
我再次将所需的连接标记为红色。
您如何有效地搜索这些连接?
我能做的是考虑每个点的x个最近邻居。如果你把x足够大,那么在这些薄连接处,到这些邻居的平均距离将非常大。然而,我不认为这将是一个非常快速和稳定的方式。你能想到一个更好的选择吗?
答案 0 :(得分:0)
我要做的是迭代地缩小数据集(缩小意味着删除具有不属于对象本身的邻居(水平或垂直)的点)。想象一下,就像剥洋葱一样。每次洋葱都变小了。
现在重要的是,弱连接将首先变薄(仅一个像素宽)。因此,您必须检查这种迭代收缩是否突然出现薄连接,即两个部分之间的桥接。这是通过顺时针转动像素并检查从对象更改为非对象的频率来在2D中完成的。如果您在四处走动时多次使用非物体,则像素就是一座桥梁。
另外,对于3D,我会进一步缩小并寻找分离的区域,因为缩小对象会在最弱的连接处分开。如何检测分裂?通过填写。使用任何填充算法。
如何在Matlab中执行此操作?我现在无法制作完整的算法,但您可以按照上面的想法进行操作,我可以为Matlab推荐免费的Diplib。我知道它已经缩小了内置的二进制区域,虽然也没有它并不太难。