如何识别形状轮廓中的关节?
Posted
技术标签:
【中文标题】如何识别形状轮廓中的关节?【英文标题】:How to identify joints in the profile of a shape? 【发布时间】:2021-08-21 22:08:50 【问题描述】:我正在开发一个系统来自动获取组件的 2D 轮廓并将它们组装成 3D 形状。
想象一下这些片段:
你想做这个形状:
我将突出显示其中一个组件以显示它们如何组合在一起。
我愿意接受有关如何执行此操作的任何建议,但我正在尝试的当前方法首先通过查看 2D 轮廓找到可能组合在一起的关节。
如何从折线轮廓中识别“标签”?
同样的技术也应该适用于这样的程序集:
【问题讨论】:
【参考方案1】:见How to compare two shapes?
所以你基本上试图在以极坐标增量格式(转角,线长)编码的折线中找到“相同”序列,然后检查匹配序列的相对位置是否在两种形状中相同......
请注意,锁在连接的形状之间可能有一些间隙,以确保可以组装......在相同的情况下,间隙可能甚至是负数(重叠)取决于材料和功能,因此您需要比较序列并留出一些余量...
此外,我会将每个形状分成其侧面以加快过程,因为锁很可能不会交叉侧面...
【讨论】:
【参考方案2】:您可以为标签定义“代码”。例如:
3,C,5,C,3
表示:三个单位长度,然后逆时针转动 90º,然后 5 个单位长度,然后逆时针转动 90º,然后 3 个单位长度。
当然可以使用比C
更多的标识符,用于不同的角度等等。
另一部分中的标签与第一部分的标签具有相同(或非常相似)3,C,5,C,3
代码
因此,在两部分中找到相同的代码可能是合适的。检查两个部分中的相邻代码是否也适合,您就完成了。
请注意,碎片可以旋转。这种情况不会改变代码,但可能会改变相邻代码的顺序。
【讨论】:
以上是关于如何识别形状轮廓中的关节?的主要内容,如果未能解决你的问题,请参考以下文章
书法字识别基于matlab余弦形状相似度书法字识别含Matlab源码 1356期