2011-11-13 19 views
10

tengo una imagen que se parece a esto:MATLAB procesamiento de imágenes de pequeños círculos

Bottle

tengo una tarea en la que debería rodear todas las botellas en torno a su apertura. Creé un algoritmo simple y comencé a trabajarlo. Mi algoritmo de la siguiente manera:

  • Umbral de la imagen original
  • Haga un poco de apertura morfológica en ella
  • Rellenar los huecos vacíos
  • separar la parte de la imagen utilizando los apoyos región de tal manera que sólo el área equivalente a la se selecciona la boca de las botellas.
  • Encuentra el centroide para cada uno y dibuja un círculo alrededor de cada botella.

Lo hice de acuerdo con el algoritmo de arriba y pero tengo una parte de la imagen alrededor de la cual hago un círculo. Esto se debe a que he seleccionado el área desde el área de la boca de la botella y el ruido que queda es casi el mismo. Y entonces obtuve una figura como esta.

El tratamiento aplicado en la imagen se vea así:

Enter image description here

Y mi imagen final después de trazar el círculo sobre la imagen original es de esta manera:

Enter image description here

pienso Puedo lidiar con el círculo extra, es decir, debido a que queda algo de parte blanca de la imagen, como se muestra en la figura 2 a continuación. Esto puede filtrarse usando regionproping para excentricity. ¿Es una buena idea o hay otros enfoques para esto? ¿Cómo lidiaría con otras botellas detrás del vidrio y las seleccionaría?

+1

Otra idea es usar [Hough transform] (http://en.wikipedia.org/wiki/Hough_transform) para [detectar círculos] (http://www.cis.rit.edu/class/simg782/lectures /lecture_10/lec782_05_10.pdf) – Amro

+0

posible duplicado de [El mejor algoritmo de ajuste de círculo] (http://stackoverflow.com/questions/4387488/the-best-circle-fitting-algorithm) – abcd

+1

Hay varias implementaciones de MATLAB disponibles de forma gratuita la [circular Hough transform] (http://www.mathworks.com/matlabcentral/fileexchange/?term=hough+transform+circle) en MATLAB Central File Exchange. –

Respuesta

5

¡Bonitas imágenes de muestra que responde a su pregunta!

Una cosa que puede usar para detectar las botellas restantes (si las hay) es la estructura bien definida de la colocación de las botellas. La cuadrícula de 4 por 5 de la botella debe ser relativamente fácil de ubicar, y cuando la rejilla está ubicada, puede probar si se detecta una botella en cada ubicación esperada de la botella.

Con respecto a la botella detectado adicionales, puede utilizar las características de la forma como

  • excentricidad,
  • el primer momento Hu
  • una relación entre la longitud del perímetro cuadrado sobre la zona (que se reduce al mínimo para un círculo) details here

Si usted es capaz de detectar la red, debería ser fácil de lo ubicó como un valor atípico (lejos de ser una botella Locati esperado encendido) y descartar en consecuencia.

¡Buena suerte con su proyecto!

2

He utilizado el mismo enfoque que tercera sugerencia de midtiby utilizando la relación entre el área y el perímetro llamada factor de forma:

4π * Área/perímetro^2

para detectar círculos de una imagen de contorno trazado (desde la imagen de umbral) a gran éxito;

http://www.empix.com/NE%20HELP/functions/glossary/morphometric_param.htm

En cuanto a las 4 botellas no encontrados, esto es bastante difícil sin algún conocimiento a priori de lo que sea que está mirando (como se discute el uso de la cuadrícula de 4 x 5, a continuación, mirando desde el centro de cada celda). Pensé que de la lista de contornos, la mayoría serían las tapas de las botellas (que puedes probar usando el factor de forma), sin embargo, una sería de un rectángulo grande. Si pudieras encontrar los extremos del rectángulo (del contorno más grande en términos de área) y luego eliminarlo de la tercera imagen, te quedarían círculos parciales. Si luego sigue el contorno de esos círculos parciales y utiliza una mezcla de detección de factor de forma/curva, etc., puede ayudar? Y sí, ¡buena suerte otra vez!

Cuestiones relacionadas