Empecé a jugar con OpenCV para un proyecto en el que estoy trabajando.
Para este proyecto estoy cultivando plantas en macetas. Las imágenes estáticas de diferentes etapas de desarrollo se toman desde arriba (vea la figura a continuación).Enfoque óptimo para detectar formas similares a hojas en opencv
La meta es detectar y medir en última instancia (es decir, tamaño) de las hojas de las plantas en crecimiento durante las diferentes etapas de desarrollo.
Intenté un enfoque ingenuo de usar Detección de bordes Canny, sin embargo, no funcionó tan bien (ver la figura a continuación) porque también detecta pequeños bordes en el suelo (no importa qué tipo de umbral utilicé).
creo que el mejor enfoque consiste en primer segmento de la imagen por el color y luego usar algún algoritmo de detección de bordes para detectar las hojas.
¿Hay una mejor manera de hacerlo?
La estructura de la hoja se conoce de antemano. ¿Podría usar el algoritmo de aprendizaje/clasificación de máquinas para obtener resultados aún mejores?
¿También no he pensado en cómo medir el tamaño de las hojas? ¿Hay algún patrón común para medir el tamaño y otros descriptores? (¿Tal vez tenga un objeto de referencia con un tamaño conocido en la imagen?).
Finalmente, también tengo que ocuparme de la oclusión en cierta medida. Esto no es visible en las imágenes, pero en etapas de desarrollo posteriores podría tener que lidiar con hojas superpuestas. ¿Hay algún enfoque para lidiar con eso?
no puedo sesgo de la imagen en mi favor (es decir, negando el acceso a la tierra, etc.) ya que puede haber miles de plantas que tienen que ser procesados.
Para resumir mis preguntas:
- Cuál es el mejor método para detectar hojas en un suelo (ver figuras)?
- ¿Puede el algoritmo de aprendizaje automático mejorar la detección?
- ¿Cómo puedo medir el tamaño de las hojas?
- ¿Cómo tratar las hojas de oclusión/superposición?
Estaría muy agradecido por algunos consejos o ideas.
actualización (basado en los comentarios Jeff7):
me encontré por primera vez la segmentación media de cambio de color junto con un algoritmo de FloodFill y terminó con esta imagen:
Cuando ahora ejecuta la detección de borde astuto + findcontours en esa imagen los resultados son mucho mejores:
gracias por los comentarios. Tienes razón, tengo control sobre las condiciones y también pensé en "ennegrecer" el suelo. Lamentablemente, no es posible ya que tengo que ocuparme no solo de una planta, sino también de que miles de veces y el ennegrecer el suelo consumen demasiado tiempo. Para medir el tamaño de la hoja, tiene razón. Esto puedo controlar de hecho ya que la imagen está tomando siempre desde la misma posición y las macetas tienen el mismo tamaño. –
Perdón por la confusión. Actualicé las preguntas originales para aclararlo un poco.Solo estaba mostrando una planta como ejemplo, sin embargo, normalmente tengo 36 de esas ollas en una bandeja. –
No, no he pensado en eso, pero estas son buenas sugerencias. Gracias. Lo investigaré. ¿Puede recomendar algún algoritmo o enfoque que funcione mejor en esa configuración (donde no puedo polarizar la imagen y tener este tipo de distribución de color)? –