pitón

35

lo que yo quiero hacer es un reconocimiento de imágenes para una aplicación sencilla:pitón

  1. imagen dada (500 x 500) pxs (fondo 1 color)
  2. la imagen tendrá sólo 1 figura geométrica (triángulo o cuadrado o smaleyface :)) de (50x50) pxs.
  3. pitón hará el reconocimiento de la figura y mostrar lo que es figura geométrica.

los enlaces? alguna indirecta? cualquier API? thxs :)

Respuesta

30

Una herramienta típica pitón cadena sería:

En cuanto a diferenciando las formas, obtendría su silueta observando la forma del fondo. Entonces detectaría el número de esquinas usando un algoritmo corner detection (por ejemplo, Harris). Un triángulo tiene 3 esquinas, un cuadrado 4 y un emoticón ninguno. Aquí hay una pitón implementation of the Harris corner detection with Scipy.

Editar:

Como se menciona en los comentarios, el blog no presentó la función que produce un núcleo gaussiano necesaria en el algoritmo. He aquí un ejemplo de una tal función de la Scipy Cookbook (gran recurso por cierto):

def gauss_kern(size, sizey=None): 
    """ Returns a normalized 2D gauss kernel array for convolutions """ 
     size = int(size) 
     if not sizey: 
      sizey = size 
     else: 
      sizey = int(sizey) 
     x, y = mgrid[-size:size+1, -sizey:sizey+1] 
     g = exp(-(x**2/float(size)+y**2/float(sizey))) 
     return g/g.sum() 
+0

1, buen toque, Scipy parece ser otra de las claves, im ejecutar el ejemplo Harris :) – panchicore

+0

no, no puedo ejecutar este ejemplo Harris, el código parece ser incompleta :( – panchicore

+0

la línea de código: gauss = filtertools.gauss_kernel (3) ... def gauss_kernel no existe :( – panchicore

2

Si conoce la Statespace de sus datos, puede utilizar el análisis de componentes principales. Con PCA, todos los objetos deben estar posados ​​(en el centro de la pantalla). PCA no hará la detección, pero separará los objetos en capas únicas en las que puede identificarse como un triángulo, etc. También tenga en cuenta que esto no es invariante de escala o rotación.

[No puedo recordar cómo se llama esta técnica, pero es similar a cómo la oficina escribe a mano rec] Si solo puede manejar curvas no curvadas, puede hacer detección de bordes y luego hacer muestreos en intersecciones para obtener una aproximación de similitud.

+0

bien, pero ... la figura geométrica no será solo centrada :) – panchicore

10

OpenCV tiene herramientas de análisis de blob, se le dará métricas sobre la forma que se puede alimentar para su algoritmo de reconocimiento de patrones favorito :) Ej. rectángulo tiene una relación de 1,0 para el área/(altura * ancho), cuando la relación del círculo es de aproximadamente 0,78.

+0

+1, buena pista, openCv parece ser la clave, estoy buscando en Google para un ejemplo práctico ... – panchicore

+2

Una proporción de 0,78 no siempre garantiza que será un círculo Podría haber muchos otros patrones que cumplirían con el valor 0.78. – monksy

+1

Eso es cierto, hay que seleccionar el conjunto de características que son más significativo para el conjunto de los objetos que está tratando de reconocer. La relación de relleno es solo una característica. – Harriv

3

señalarle la figura geométrica es de 50x50 píxeles. Si tamaño y orientación de las figuras geométricas son fijo, tiene un problema de coincidencia de plantilla clásico, adecuado para correlation method. Puede aplicar la coincidencia de plantilla en la imagen original o en una salida de detección de borde.

De lo contrario, si el tamaño (escala) y/o la orientación son arbitrarios, se pueden aplicar descripciones de Fourier. Estos descriptores son rotaciones e invariantes de escala.

Todos estos métodos se pueden codificar utilizando OpenCV, NumPy o SciPy.