识别手写的形状

时间:2011-05-26 13:52:23

标签: c# java algorithm image-processing

我想识别手写形状并找出它可能在集合中的形状。简单地说,如果我绘制一个三角形,应用程序应该将其识别为三角形。 如何使用C#或java执行此操作,我们非常感谢您的帮助。

提前致谢。

这些是我需要识别的一些形状 enter image description here

5 个答案:

答案 0 :(得分:2)

您可以尝试使用OpenCVEmguCV是OpenCV for .net的好包装器。观察ShapeDetection演示(包含在OpenCV中)

答案 1 :(得分:2)

如果您想“自己动手”,我建议您执行以下步骤:

首先,镂空(缩小图像,直到所有线都是一个像素厚)。有很多方法可以做到这一点,这是一个研究得很好的问题。谷歌了解更多信息。

现在,从一个黑色像素开始,遍历并追踪图像的轮廓,一次一个像素。您可以将这些段中的每一个添加到概述形状的段列表中(每个段将是从一个像素到其相邻像素的简单线)。现在,您将形状轮廓视为多边形多边形。

(此时可能的步骤:通过将每个顶点拉近其邻居的平均值来平滑轮廓)

现在,您使用角点检测算法查找角点(请点击此处查看:http://visual.ipan.sztaki.hu/corner/node7.html)。

这足以识别您列出的形状。

如果您想变得更聪明,还可以识别角落之间存在的边缘类型。如果两个角之间的线段保持在它们之间的直线的某个阈值内,则将其视为“直线”边缘。如果没有,则将其视为弯曲边缘。

对于角落+直线/弯曲边缘,您可能会检测到您正在寻找的任何形状。

答案 2 :(得分:1)

我建议使用neural network

你可以教它形状是什么样的。

这是一个库,例如:

<强> Neural Networks on C#

答案 3 :(得分:1)

如果您在较大的图像中寻找特定的形状,那么OpenCV是一个很好的选择。 Emgu.CV是一个很好的.Net包装器。有关此信息,请参阅my picture of a SURF implementation。另见other options in OpenCV,它有很多可供选择。请注意,这种方法需要很多处理能力。

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

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

这两种方法都很容易实现。

答案 4 :(得分:1)

在形状识别方面确实存在着巨大的研究树 如果您的形状确实是可预测的并且是基本几何形状,则 最直接的方法是找到边缘并应用霍夫变换。

一些可管理的阅读材料供您开始, [1] Google Scholar for Hough Transform Shape Detection http://scholar.google.com/scholar?q=hough+transform+shape+recognition&hl=en&as_sdt=0&as_vis=1&oi=scholart [2] Hough Transform @ Wiki http://en.wikipedia.org/wiki/Hough_transform