识别手写形状

11
我想识别手写形状并确定它可能在集合中属于哪种形状。简单来说,如果我画一个三角形,应用程序应该将其识别为三角形。
如何使用C#或Java实现这个功能,任何帮助都将不胜感激。
提前感谢。
这些是我需要识别的一些形状: enter image description here

你能发布形状的示例(截图)吗? - Theofanis Pantelides
我已经添加了一些屏幕截图。 - Thilina H
5个回答

2
如果你想自主开发,我建议遵循以下步骤:
首先,将图像进行细化处理(减少图像直到所有线条只有一个像素宽)。有很多方法可以实现这个过程,并且这是一个经过深入研究的问题。可以通过谷歌等搜索引擎获取更多信息。
接下来,从黑色像素开始,逐个像素追踪图像轮廓。将每个线段添加到轮廓线段列表中以描绘出形状(每个线段将是从一个像素到其相邻像素的简单线段)。现在你已经得到了该形状的轮廓作为一个多边形。
(在此时可能需要进行平滑处理,将每个顶点拉到其相邻顶点的平均值附近)
接下来,使用角点检测算法查找角点(参见此处:http://visual.ipan.sztaki.hu/corner/node7.html)。
以上步骤应该足以识别你列出的形状。
如果您想更聪明地识别,还可以确定两个角之间存在的边缘类型。如果两个角之间的线段在保持在一定阈值内的前提下,你将其视为“直线”边缘。否则,你将其视为曲线边缘。
通过角点+直线/曲线边缘,您很可能可以相当好地识别任何您正在寻找的形状。

2
您可以尝试使用 OpenCV 来实现。EmguCV 是 .net 中 OpenCV 的一个好的封装。请查看 ShapeDetection 演示(包含在 OpenCV 中)。

下载EmguCV二进制/源代码。演示应用程序(包括二进制和源代码)已随库一起提供。 - oddy

1

1

1

如果你正在寻找一个大图像中的特定形状,那么OpenCV是一个很好的选择。Emgu.CV是它的一个不错的.Net封装。可以参考我实现SURF算法的图片。同时也可以看看OpenCV中的其他选项,它有很多提供。需要注意的是,这种方法需要大量的处理能力。

如果您可以轻松地将您想要的形状识别为BLOB(即,仅给算法一个此形状的图片),则可以搜索“ANN OCR”(“人工神经网络”和“光学字符识别”)。许多(大多数?)ANN实现都附带有用于提供形状(字母)并识别最接近形状(手写字母)的示例代码。例如神经网络OCR。我相信这种方法可以解决您的问题。(旁注:我遇到并测试了许多可以做到这一点的库。这是神经网络101。)

如果您需要ANN-OCR OpenCV的BLOB算法,则可以提供此功能。

这两种方法都相当容易实现。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接