Necesito encontrar todos los contornos en una imagen recuperada de la cámara. Así que primero uso el detector de bordes astutos para encontrar los bordes y luego encontrar los contornos. Bastante simple.
Sin embargo, mis contornos se "fusionan". Por ejemplo, en la imagen a continuación, claramente tengo 4 objetos diferentes. Sin embargo, los bordes se tocan ligeramente en algunos puntos, por lo que obtengo un gran contorno en lugar de cuatro separados. Traté de cambiar alrededor de los umbrales, erosión, operaciones de morfología y cosas similares, pero los bordes se siguen tocando ligeramente. ¿Alguien tiene alguna sugerencia sobre cómo obtener contornos separados en imágenes similares a la de abajo? (La imagen a continuación es obviamente solo un ejemplo, mis imágenes reales son mucho más complejas, pero tienen el mismo problema básico).
fuente
Respuestas:
Detectando diferentes componentes:
Si está tratando de detectar los diferentes componentes, probablemente haya otros enfoques para hacerlos que no sean detectar los contornos. Aquí hay un ejemplo en Mathematica. Se utiliza una erosión seguida de dilatación para cerrar la brecha en el segundo componente antes de la detección (si no hace esto, no lo detectará).
La figura a la izquierda a continuación, muestra la detección de objetos imperfectos (sin cerrar el espacio) y a la derecha, muestra la detección correcta (ejecutando el código anterior).
Detectando los diferentes contornos:
Sin embargo, si realmente desea separar solo los contornos, aquí hay un ejemplo. La erosión y la dilatación se realizan como antes para cerrar la brecha y la imagen resultante se ejecuta a través de un detector de bordes Canny. He hecho explícitas las opciones predeterminadas, para que pueda ver lo que se está utilizando.
Esto le dará tanto el borde interior como el exterior (vea la figura a la izquierda a continuación), ya que el ancho del píxel es mayor que 1 en todos lados. No he tenido mucha suerte tratando de hacerlo más delgado, ya que el rendimiento se degrada (puede ser diferente para sus otras imágenes). Los contornos internos son los que desea, y el contorno exterior es solo el contorno combinado de los 4 componentes. Ahora todo lo que tenemos que hacer es soltar el más externo con:
que te da solo los contornos internos (ver abajo a la derecha). En otras palabras, solo selecciona aquellos contornos que están encerrados por al menos otro contorno, lo que descalifica automáticamente el más externo. No sé el equivalente de estos comandos / operaciones en openCV.
Tenga en cuenta que los saltos aparentes en la figura se deben a guardar en JPEG en un tamaño menor. No se ve así en mi pantalla.
fuente
Intente preprocesar sus imágenes con un filtro morfológico como la erosión . Esto permitirá separar contornos conmovedores. Después de detectar sus contornos, puede aplicar una operación de dilatación para completar las redes.
fuente
No es una respuesta a su pregunta, pero el análisis de contorno es propenso a errores. No puede hacer mucho al respecto y funciona solo en escenarios muy simples.
Si tiene problemas para usarlo, debe buscar un algoritmo completamente diferente. Hay formas más complejas y más robustas de resolver cosas, pero depende de lo que desee lograr (detección de objetos, seguimiento, etc.)
fuente
Los contornos no son necesariamente abiertos, considere que ha utilizado canny para detectarlos. Los problemas con Canny ya fueron discutidos aquí . La discusión sobre canny le da la idea básica de que todavía hay operaciones como el cierre y la dilatación que se requieren además de canny para evaluar los contornos cerrados.
Esto también depende de si estamos buscando contornos o segmentaciones (Canny versus métodos como Graphcuts ). Supongo que buscar una solución robusta depende de su aplicación final.
fuente