2012-07-29 25 views
9

Estoy trabajando, usando OpenCV/C++ framework, en un programa que básicamente cuenta objetos elípticos que pueden superponerse.Cómo filtrar contornos formados por círculos superpuestos en OpenCV

Después umbral de la imagen y encontrar los contornos de todos los objetos

Mi siguiente paso consiste en excluir objeto que no están hechos de elipses superpuestas (lo haré segmento de los restantes más adelante).

que terminan en marcha con objetos tales como éstos:

enter image description here

En esta imagen de ejemplo, todos los objetos de la derecha son negativos, mientras que los de la izquierda son válidos.

Mi filtro actual excluye el objeto principalmente en el terreno de su isoperimetric quotient. Sin embargo, como tengo objetos con diferentes tamaños y ruido, no siempre estoy satisfecho con este enfoque.

Idealmente, me gustaría tener una métrica adicional para aumentar la eficiencia de mi filtro actual.

Como tengo que repetir este análisis en muchos contornos, no debería ser costoso.

He pensado en enfoques tales como:

  • algo basado en un histograma del valor del ángulo entre todos los tripletes de puntos sucesivos en el contorno?
  • Ajustando matemáticamente una "poli-elipse" (no tengo idea de cómo hacerlo)?
  • ¿Cadenas de hombres libres?

Pero estoy convencido de que me perdí algo obvio que es más eficiente y menos complicado. ¿Tiene alguna sugerencia, Gracias :),

EDIT: Como sugirió con razón Regis, de cualquier forma, de hecho, podría estar hecho de un número suficiente de círculos. Por lo tanto, con el fin de hacer que mi problema soluble, que se sumarán los siguientes supuestos:

  1. no más de 16 puntos suspensivos/objeto.
  2. Las elipses no pueden ser plana: Eje mayor/eje menor < 3.
  3. Dentro de un objeto, el área más grande de la elipse sobre el área de la más pequeña debe ser inferior a 10.

Respuesta

2

Una posibilidad sería intentar:

  1. Extraer contornos de los objetos
  2. puntos de muestra a separación regular a lo largo del contorno
  3. utilizar estos puntos para determinar la dirección con un espaciamiento regular (fuere sea ​​mejor usar un número complejo para expresar esta dirección para evitar problemas de envolvente)
  4. Use estas instrucciones para calcular la curvatura a intervalos regulares
  5. Base una medida en esta curvatura, p. buscar objetos que tengan más del 80% de las muestras de curvatura en el rango correcto.

El gráfico que espera ver para la curvatura es una serie de valores constantes (o varía lentamente si la forma es una elipse en lugar de un círculo), con discontinuidades repentinas donde cambia de un círculo a otro.

Si su imagen es ruidosa, es posible que desee pasar primero los valores de curvatura bajos.

Las formas hechas de círculos/elipses tendrán principalmente una curvatura significativa en todo el perímetro, mientras que las formas hechas de bordes rectos tendrán partes de baja curvatura.

+0

Que usted, trataré de entenderlo. ¿Tienes algún enlace con el que comenzar? –

0

Sospecho que cualquier forma se puede crear a partir de un conjunto suficientemente grande de elipses superpuestas y que tiene un problema mal definido en sus manos. A menos que malinterprete su declaración del problema.

+0

Gracias, tienes razón, una cantidad suficiente de pequeños círculos/elipses podría definir cualquier forma. Debería haber indicado suposiciones adicionales (que son justas para mi problema) tales como: 1) Es muy poco probable que observe más de 10 círculos superpuestos. 2) Dentro de la misma forma, el área de la elipse más pequeña no será inferior a la décima parte del área de la más grande. –

0

¿Has mirado en Hough-Transformations para círculos y elipses? Incluso hay un OpenCV implementation para círculos disponibles. Estas transformaciones deben aplicarse a los contornos de tus objetos.

+0

gracias, lo he intentado de hecho, gracias: D. Para mí, funcionó mal en objetos sujetos ... Ahora estoy investigando el siguiente enfoque: 1) Hacer una biblioteca de muestras positivas frente a negativas. 2) Cálculo de características de las imágenes binarias. 3) Usar técnicas de aprendizaje automático para entrenar un clasificador ... –

Cuestiones relacionadas