domingo, 28 de abril de 2013

Detección por contornos: Solución final


Como se comentó en entradas anteriores, nuestro objetivo era detectar las siluetas de las monedas combinando el reconocimiento por color y el procesado Canny. Sin embargo, y tras varias pruebas, hemos realizado un algoritmo de detección basado únicamente en el procesado Canny y otros procedimientos que se detallarán más adelante. De este modo, se evitan las complicaciones asociadas al color (brillos, sombras y zonas de colores similares que provocan detecciones falsas).

Tras el pre-procesado de la imagen, se le aplica el algoritmo Canny para obtener una imagen binaria con los contornos definidos, que se almacenan en una lista de puntos. La imagen en este momento tiene el siguiente aspecto:

Figura 1: Contornos detectados.

Como se puede observar en la imagen, aparecen muchos contornos que no tienen que ver con las monedas en sí, por lo que se hace imprescindible aplicar una serie de condiciones a todos los contornos de la imagen para que puedan pasar a formar parte de la lista de contornos definitivos. Dichas condiciones se detallan a continuación:

- Si el contorno está formado por un número reducido de puntos, se elimina de la lista. Con esta condición se quitaran de la imagen todos los contornos pequeños.

- Se dibuja una elipse que contenga a los puntos, si el eje mayor o el menor son mayores que un número grande de puntos, se elimina el contorno asociado a la elipse. Esta condición permite eliminar elipses que se salgan del plano de la cámara, ya que no serán monedas sino detecciones falsas debido a los contornos.

- Si la relación axial (eje mayor/eje menor) de la elipse es menor o mayor que unos determinados umbrales, se elimina. Esto se debe a que normalmente las monedas tendrán una relación axial cercana a la unidad que se correspondería con una circunferencia, y por mucho que se incline la cámara dicha relación no superará nunca los umbrales mencionados.

- Finalmente, se dibuja el contorno (en blanco) sobre una imagen con fondo azul y la elipse asociada al mismo (en blanco) sobre una imagen con fondo negro. Se comparan las dos imágenes con el operador lógico AND, que devolverá una matriz con los puntos que coinciden entre la elipse y su contorno. Si el número de puntos coincidentes es menor que un umbral, es porque en realidad no se trataba de una moneda, sino una falsa detección.

La imagen resultante es la que se muestra a continuación: 

Figura 2: Imagen resultante RGB


Notas:

• Los números y umbrales comentados anteriormente se han calculado a partir de numerosas pruebas experimentales. 

• El algoritmo Canny, requiere dos umbrales (superior e inferior), que se fueron modificando mediante dos "seekbar" introducidas en la aplicación con este propósito y a través de las cuales se pudo concretar cuáles eran sus valores óptimos. En las siguientes imágenes se muestran tres ejemplos con distintos umbrales:

Figura 3: Imagen con demasiados contornos

Figura 4: Imagen con los umbrales seleccionados

Figura 5: El contorno de una moneda se pierde

Hay que tener en cuenta que las condiciones anteriores se aplican sobre cada contorno de la imagen, por lo que cuantos más contornos aparezcan en ella, mayor será el tiempo necesario para procesar la imagen. Por lo tanto, se tuvo que hacer también un balance entre tiempo de procesado y precisión del detector para identificar el valor de los umbrales.

Para ilustrar este hecho, se han representado en el siguiente gráfico el número de contornos obtenidos de una imagen con tres monedas sobre fondo blanco frente al tiempo de ejecución (se ha desarrollado así para mantener lo más constantes posibles el resto de las variables que influyen en la detección de los contornos y, por lo tanto, en el tiempo de ejecución).

Figura 6: Comparativa de tiempos

Se puede ver que el tiempo de ejecución aumenta exponencialmente con el número de contornos detectados en la imagen, por lo que se hace necesario elegir unos umbrales que generen el mínimo número de contornos posible sin perder los contornos necesarios para identificar a las monedas.

No hay comentarios:

Publicar un comentario