Hola CV / Comunidad de reconocimiento de patrones,
Tengo un problema serio con respecto a la segmentación de una imagen. El escenario es una atmósfera dentro de un horno que me vuelve loca. Y necesito detectar contornos de objetos de diferentes materiales (vidrio, cerámica, Al, Ir, ..) en un corto período de tiempo (<10 segundos) y no solo para un caso especial. También necesito el contorno en una fila secuencial de píxeles para el código. Por lo tanto, también se necesita un código de cadena o llamado seguimiento de borde / contorno, por lo que los agujeros abiertos no son buenos. En el fondo hay ruidos no lineales, aproximadamente de polvo, partículas o algo más, que aparecen de vez en cuando.
Las sugerencias de Matlab u OpenCV son bienvenidas.
Para hacerlo más claro, publiqué otra imagen de mi objetivo y un objeto semitransparente, que también necesita ser detectado. También otros ejemplos que deben ser conscientes.
Como puede ver en la Imagen # 1, hay partículas en la parte derecha de la imagen y cerca del contorno exterior de la estrella, que es el objeto. Además, el contraste general no es muy bueno. El objeto en sí se encuentra en un subsuelo, lo que no es relevante para la detección del contorno. La imagen # 2 muestra un objeto medio transparente, que también es posible.
Quiero encontrar el contorno / perímetro de ese objeto, como en la siguiente pantalla (línea roja). Los dos rectángulos (amarillo) marcan el inicio (izquierda) y el punto final (derecha). La línea azul es ignorable.
Al principio pensé que podría resolver el problema de esa atmósfera sucia con solo filtros. Pero después de una cantidad honorable de tiempo de inversión, me acabo de dar cuenta de que tengo que eliminar o reducir los ruidos significativamente para aumentar el contraste de primer plano y fondo. Probé muchos métodos, como ecualización de histograma, ecualización adaptativa de Otsu, filtros lineales (p. Ej., Gauss), filtros no lineales (mediana, difusión), contornos activos, k-medias, fuzzy-c-medias y también Canny para puro Detección de bordes en combinación con operadores morfológicos.
- Canny: Las partículas y la atmósfera están causando agujeros, pero necesito un contorno completo del objeto. Aún con el cierre, la dilatación de los operadores morfológicos no es lo suficientemente bueno. Canny todavía tiene los mejores resultados de todos los métodos que he estudiado debido a la histéresis.
- Contornos activos: también funcionan en bordes / gradientes, actúan completamente locos después de inicializarse dentro del objeto, lo que tal vez sea causado por el mapa de bordes que resulta en el objeto 'abierto'. Hasta donde yo sé, el contorno tiene que estar cerrado. Probé con diferentes derivados (GVF / VFC / Classic Snake).
- k-medias: los resultados incluyen la atmósfera del horno, debido al fondo brumoso. Lo mismo para fuzzy-c-means. Elegí dos grupos, debido a que separaba el objeto del fondo. Más grupos conducen a resultados más débiles.
- Histograma / Otsu: debido a las intensidades grises muy cercanas (¡imho!), Está fusionando el objeto con el fondo. Probado con métodos locales y globales.
- Filtros: especialmente GLPF u otro LPF están manchando los bordes, lo que no es tan bueno y ni siquiera reduce la atmósfera brumosa.
- Los filtros no lineales preservan los bordes. La mayoría de ellos tardan demasiado en calcular las imágenes grandes. Tomó un filtro bilateral rápido por ahora. Los resultados se muestran a continuación.
Por lo tanto, ni un solo método es lo suficientemente bueno para los pasos de postprocesamiento, porque los resultados obtenidos del segmento de objeto compiten mal con un algoritmo existente. Ese algoritmo existente es muy local y, por lo tanto, funciona para este escenario muy especial.
Entonces, le pregunto si me he perdido algo por completo ... No tengo más idea de cómo procesar y cómo debería obtener buenos resultados de contorno, sin tener huecos o agujeros ... ¿Es posible sin hacer muchos cambios en el CCD y el entorno físico? ¡Gracias por adelantado!
Último enfoque hasta ahora (después de una larga noche de experimentos con MO):
- Filtro bilateral (preservación de bordes, pero suaviza áreas homogéneas)
- Canny (Sigma = 2, Umbral = [0.04 0.08])
- Morfológica de Operaciones (MO):
bwareopen
,closing
,remove
ybridge
bwlabel
para seleccionar solo el perímetro del contorno, lo que elimina los ruidos no deseados. Todavía no hay capturas de pantalla actualizadas, pero funciona para la estrella. el vidrio tiene un contorno interno que está conectado al contorno externo, que también se puede ver en la captura de pantalla a continuación.
Así que me temo que necesito un algoritmo especial para atravesar el contorno exterior. Será una búsqueda de vecindario en sentido horario / antihorario. Ese paso en sentido horario / antihorario puede cambiar, si hay un punto de esquina. Si hay un espacio, aumente el radio y vuelva a mirar. Si hay dos o más puntos de seguimiento posibles, tome el que obtuvo la misma dirección que el anterior. ¿Crees que el algoritmo de seguimiento de contornos tiene sentido?