2011-12-27 7 views
5

Recibí la tarea escolar de nuevo. Esta vez, mi maestra me dio la tarea de crear un algoritmo para contar cuántos patos en la imagen.Objeto de recuento en el algoritmo de imagen

La imagen es similar a éste:

Creo que debería utilizar el reconocimiento de patrones para buscar cómo muchos patos en él. Pero no sé qué coincidencia de patrón para cada pato.

+3

Su profesor debería haberle dicho cómo completar esta tarea durante las lecciones. Si no tienes idea, ¡probablemente deberías haber estado prestando más atención! Si tiene una pregunta de programación específica, edite la pregunta para que haga esa pregunta.De lo contrario, tal vez deberías preguntarle a tu profesor. – Polynomial

+0

El maestro no dio ninguna pista. Tengo que salir solo. Creo que debería usar el reconocimiento de patrones. Pero no sé qué parte de la imagen puede ser patrón para cada pato. No necesito el código fuente. solo algoritmo o tal vez pseudo código. – justmyfreak

+3

'http: // www.DuckOverflow.com /' –

Respuesta

2

He aquí una manera:

transformada de Hough para los círculos:

  • inicializar una matriz acumulador indexado por (x, y, radio)
  • Para cada píxel:
    • calcular un borde (Por ejemplo, el operador de Sobel proporcionará tanto la magnitud como la dirección), si la magnitud excede cierto umbral, entonces:
      • Valor mínimo de cada acumulador para que este borde podría prestar evidencia (sólo el (x, y) en la dirección del borde, solamente radios entre min_duck_radius y max_duck_radius)
  • Ahora lisa y el umbral de la matriz acumulador y las coordenadas de los acumuladores más altos te muestran dónde están las cabezas. El umbral puede saltar hacia usted si realiza un histograma de los valores en los acumuladores (puede haber una clara diferencia entre "mucha evidencia" y "ruido").

Así que eso es muy escueto, pero puede comenzar.

+0

gracias por su respuesta: D – justmyfreak

2

Podría ser solo porque estoy trabajando con SIFT en este momento, pero a mí me parece que podría ser bueno para su problema.

Es un algoritmo que coincide con el mismo objeto en dos imágenes diferentes, donde los objetos pueden tener diferentes orientaciones, escalas y ser visto desde diferentes perspectivas en las dos imágenes. También puede funcionar cuando un objeto está parcialmente oculto (como tus patos) por otro objeto.

me gustaría sugerir la búsqueda de una buena imagen clara de un patito de goma (: D) y luego usan alguna aplicación SIFT (VLFeat - C library with SIFT but no visualization, SIFT++ - based on VLFeat, but in C++, Rob Hess in C with OpenCV ...).

Debe tener en cuenta que emparejar con SIFT (y cualquier otra cosa) no es perfecto, por lo que es posible que no obtenga el número exacto de los patitos de goma en la imagen.

+0

Hola, gracias por la respuesta. Pero creo que mi imagen apenas será detectada si usa SIFT. Como hay un pato que tiene cara de torpe. – justmyfreak

+0

hm, eso es cierto ... pero dado que el SIFT es (hasta cierto punto) invariante bajo los cambios de perspectiva, podría ser suficiente usar unas pocas (2-3) fotografías de aprendizaje (pato hacia adelante, hacia atrás, quizás desde un lado) . y también, como ya mencioné, no existe un método universal y perfecto que reconozca cualquier objeto en cualquier posición/orientación – penelope

+0

¿Qué tal si primero utiliza SIFT para reconocer los patos que miran hacia adelante y hacia los lados? Una vez que los tenga, ponga en blanco esas áreas (llene su cuadro delimitador con 255 o algo así). Luego usa SIFT para obtener el pato que mira hacia atrás, que básicamente es capaz de reconocer una forma de bola amarilla. Los enlaces que figuran en la respuesta son geniales, aquí hay otro por si acaso (usando OpenCV): http://www.aishack.in/2010/07/implementing-sift-in-opencv/ – AruniRC

6

Creo que puede resolver este problema segmentando los picos de los patos y contando el número de connected components en la imagen binaria.

Para segmentar los picos de los patos, primero convierta la imagen a HSV color space y luego realice una binarización utilizando el componente hue. Tenga en cuenta que el tono de los picos de los patos es diferente de otras partes de la imagen.

+0

Creo que esto podría tener el mismo problema como mi idea SIFT - ¿qué hay del pato mirando hacia atrás? No beaks:/ – penelope

+0

Eso es correcto. Solo obtendrás un número aproximado con este método. –

+1

Supongo que un método exacto es muy difícil, si no imposible, de encontrar para este problema. Su método tiene una ventaja contra SIFT de una manera que es mucho más fácil de implementar, al tiempo que proporciona una aproximación igualmente buena :) – penelope

Cuestiones relacionadas