我有一组简单的形状(见下图),我想识别手写形状并找出它可能在集合中的哪个形状。
有没有简单的算法来做到这一点?或者任何开源库?
顺便说一句,我的任务很简单,所以我不会使用像 OpenCV 这样过于复杂的库。
提前致谢!!
我有一组简单的形状(见下图),我想识别手写形状并找出它可能在集合中的哪个形状。
有没有简单的算法来做到这一点?或者任何开源库?
顺便说一句,我的任务很简单,所以我不会使用像 OpenCV 这样过于复杂的库。
提前致谢!!
我不知道如何在 C 或 C++ 中做到这一点,但算法很简单。请注意,成功率会随着形状中添加的每个角度而降低,因此它应该有助于识别您在上面给出的基本形状集,但其他方面则不然。
当然,完全准确的匹配是不可能的。我什至无法判断您的第二个示例形状是倾斜的平行四边形还是倾斜的正方形(或菱形或矩形)。
这本质上是线检测
它仅适用于具有直线的形状,并且绝不简单。
假设您的图形中有 k 个线段,使用 k-means 算法将点聚合成线。
首先将点随机分成簇。
对于这些集群中的每一个,计算点正在逼近的线。(一条到点的所有距离之和最小
的线)异常值(离线最远的点)应该重新分配给它们更适合的其他集群。
重复最后一步,直到达到某个阈值
如果您没有达到所需的阈值,那么您可以尝试不同的 K 值
如果您确实达到了一个,那么您可以计算这些线的交点并提取您需要将不规则形状与常规形状相匹配的其他属性。
你可以用这种方式区分三角形和正方形,以及正方形和平行四边形,但这非常复杂。
这种“算法”可以适用于波浪线、虚线或线条不相交的形状,因此它相当稳健