2011-05-26 7 views
10

Quiero reconocer la forma de escritura a mano y averiguar qué forma es probable que esté en el conjunto. Simplemente diciendo, si dibujo un triángulo, la aplicación debería reconocerlo como un triángulo. ¿Cómo puedo hacer esto usando C# o java? Se agradece cualquier ayuda.Reconocimiento de formas escritas a mano

Gracias de antemano.

Estas son algunas de las formas que necesito para identificar enter image description here

+0

Podría publicar ejemplos (screenshots) de las formas? –

+0

He agregado algunas capturas de pantalla –

Respuesta

2

Usted puede tratar de utilizar OpenCV para eso. EmguCV es un buen contenedor para OpenCV para .net. Mire la demostración de ShapeDetection (incluida en OpenCV)

+0

¿Dónde puedo obtener esta DEMO? –

+0

Descargar binarios/fuentes de EmguCV. Las aplicaciones de demostración (tanto binarias como fuentes) se envían con la biblioteca. – oddy

+0

Muchas gracias –

1

Si busca formas particulares dentro de una imagen más grande, entonces OpenCV es una excelente alternativa. Emgu.CV es un buen .Net envoltorio para ello. Ver my picture of a SURF implementation para esto. También vea other options in OpenCV, tiene mucho que ofrecer. Tenga en cuenta que este enfoque requiere una gran cantidad de potencia de procesamiento.

Si puede identificar fácilmente la forma que desea como BLOB (es decir, darle al algoritmo una imagen de solo esta forma), puede buscar "ANN OCR" ("Redes neuronales artificiales" y "Carácter óptico" Reconocimiento"). Muchas (¿la mayoría?) Implementaciones de ANN vienen con código de ejemplo para alimentarlo con formas (letras) y reconocer la forma más cercana (letras escritas a mano). Por ejemplo Neural Network OCR. Creo que este enfoque resolvería tu problema. (Nota: he encontrado y probado numerosas librerías que pueden hacer esto. Es redes neuronales 101.)

Si necesita algoritmos BLOB para el ANN-OCR OpenCV puede proporcionar esto.

Ambos enfoques son muy fáciles de implementar.

2

Si desea "hágalo usted mismo" que sugeriría los siguientes pasos:

En primer lugar, esqueletizar (adelgaza la imagen hasta que todas las líneas son un píxel de grosor). Hay muchas maneras de hacer esto, y es un problema bien estudiado. Google para más información.

Ahora, comenzando en un píxel negro, recorra y trace el contorno de la imagen, un píxel cada vez. Usted agrega cada uno de estos segmentos a una lista de segmentos que delinean la forma (cada segmento será una línea simple de un píxel a su píxel adyacente). Ahora tiene el contorno de su forma como un polígono de muchos lados.

(paso posible en este punto: suavizar el contorno tirando cada vértice más cercano al promedio de sus vecinos)

Ahora, se utiliza un algoritmo de detección de esquina para encontrar las esquinas (echar un vistazo aquí: http: //visual.ipan.sztaki.hu/corner/node7.html).

Esto debería ser suficiente para identificar las formas que ha enumerado.

Si quiere ser más inteligente, también puede identificar los tipos de bordes que existen entre las esquinas. Si el segmento entre dos esquinas se mantiene dentro de un umbral de la línea recta entre ellos, lo trata como un borde de "línea recta". Si no lo hace, lo trata como un borde curvo.

Con las esquinas + borde recto/curvo, es probable que pueda detectar cualquiera de las formas que está buscando bastante bien.

1

De hecho, existe un vasto árbol de investigación en reconocimiento de formas.
Si sus formas son de hecho algo predecible y son de geometría básica,
la manera más directa es encontrar los bordes y aplicar la transformación Hough.

Algunos materiales de lectura manejables para que usted pueda empezar, [1] Google Académico para la transformada de Hough detección Forma http://scholar.google.com/scholar?q=hough+transform+shape+recognition&hl=en&as_sdt=0&as_vis=1&oi=scholart [2] transformada de Hough @ Wiki http://en.wikipedia.org/wiki/Hough_transform

Cuestiones relacionadas