Aquí hay una pregunta para expertos en procesamiento de imágenes.
Estoy trabajando en un problema difícil de visión por computadora. La tarea es contar los estomas (marcados a continuación) en imágenes de microscopía DIC. Estas imágenes son resistentes a la mayoría de las técnicas de procesamiento de imágenes superficiales, como las operaciones morfológicas y la detección de bordes. También es diferente de otras tareas de conteo celular.
Estoy usando OpenCV. Mi plan es revisar las características potencialmente útiles para la discriminación de estomas.
- Clasificadores de textura
- DCT (transformada discreta del coseno / análisis de dominio de frecuencia)
- LBP (patrones binarios locales)
- HOG (histograma de gradientes orientados)
- Detectores de características robustas (soy escéptico)
- Esquinas de Harris
- SIFT, SURF, STAR, etc.
- Clasificador de cascada Haar / características de Viola-Jones
Y posiblemente diseñe un nuevo descriptor de características. Estoy dejando de lado la selección de un clasificador por ahora.
¿Qué me he perdido? Como resolverias esto? Las soluciones para problemas similares de detección de objetos serían muy útiles.
Imágenes de muestra aquí .
Después del filtro de paso de banda:
La detección de bordes no es prometedora. Algunas áreas de imagen están desenfocadas:
fuente
Respuestas:
Lo siento, no conozco OpenCV, y este es más un paso de preprocesamiento que una respuesta completa:
Primero, no quieres un detector de bordes. Un detector de bordes convierte las transiciones (como esta de oscuro a claro):
en crestas (líneas brillantes en la oscuridad) así
Realiza una diferenciación, en otras palabras.
Pero en sus imágenes, hay una luz que brilla desde una dirección, lo que nos muestra el alivio de la superficie 3D. Percibimos esto como líneas y bordes, porque estamos acostumbrados a ver cosas en 3D, pero en realidad no lo son, por eso los detectores de bordes no funcionan, y la coincidencia de plantillas no funcionará fácilmente con imágenes rotadas (un perfecto la coincidencia a 0 grados de rotación en realidad se cancelaría completamente a 180 grados, porque la luz y la oscuridad se alinearían entre sí
Si la altura de una de estas líneas mazy se ve así desde el lado:
entonces la función de brillo cuando se ilumina desde un lado se verá así:
Esto es lo que ves en tus imágenes. La superficie frontal se vuelve más brillante y la superficie posterior se vuelve más oscura. Entonces no quieres diferenciar. Debe integrar la imagen a lo largo de la dirección de la iluminación, y le dará el mapa de altura original de la superficie (aproximadamente). Entonces será más fácil hacer coincidir cosas, ya sea a través de la transformación de Hough o la coincidencia de plantillas o lo que sea.
No estoy seguro de cómo automatizar la búsqueda de la dirección de la iluminación. Si es lo mismo para todas tus imágenes, genial. De lo contrario, tendría que encontrar la línea de contraste más grande y asumir que la luz es perpendicular a ella o algo así. Para mi ejemplo, roté la imagen manualmente a lo que pensé que era la dirección correcta, con luz proveniente de la izquierda:
Sin embargo, también debe eliminar todos los cambios de baja frecuencia en la imagen para resaltar solo las características similares a líneas que cambian rápidamente. Para evitar que suenen los artefactos, utilicé el desenfoque gaussiano en 2D y luego lo resté del original:
La integración (suma acumulativa) puede escaparse fácilmente, lo que produce rayas horizontales. Los eliminé con otro paso alto gaussiano, pero esta vez solo en dirección horizontal:
Ahora los estomas son elipses blancas, en lugar de blanco en algunos lugares y negro en otros.
Original:
Integrado:
La transformación de Hough se puede usar para detectar elipses de cresta como esta, hechas de "píxeles de borde", aunque es realmente costosa en computación y memoria, y no son elipses perfectas, por lo que tendría que ser un poco un detector "descuidado". Nunca lo he hecho, pero hay muchos resultados de Google para " detección de elipse hough ". Diría que si detecta una elipse dentro de la otra, dentro de un espacio de búsqueda de cierto tamaño, debe contarse como un estoma.
Ver también:
fuente
Lo primero que probaría es la coincidencia de plantillas, con plantillas rotadas para todos los ángulos con algún paso. Plantilla giratoria esencial aquí. Además, la elección de la plantilla podría no ser trivial, podría ser varias con diferentes luces, y podría ser borrosa para permitir diferencias en las formas.
http://en.wikipedia.org/wiki/Template_matching#Template-based_matching_and_convolution
Siguiente: HOG parece prometedor aquí. Otra solución podría ser usar un detector de esquinas fuerte como Moravec o Shi-Tomasi (con supresión no máxima) y buscar grupos de 2 esquinas o 3-4 esquinas en la misma línea que los candidatos. Después de encontrar candidatos, puede aplicar el contorno activo para la verificación (no estoy seguro de si realmente ayudaría, pero es posible)
http://en.wikipedia.org/wiki/Corner_detector
http://en.wikipedia.org/wiki/Active_contour
Otra posibilidad más es usar la transformación de Hough para elipses, posiblemente con no 2 sino 3-4 parámetros libres.
fuente
Respuesta parcial Encontrar candidatos con Mathematica:
fuente
Comenzaría usando un detector de borde sensible (por ejemplo, magnitud de gradiente con un umbral bajo), y luego usaría la transformación de Hough para tratar de encontrar las elipses. Canny podría funcionar igual de bien. Estoy seguro de que hay parámetros que puede ajustar para hacerlo más sensible y recoger los bordes borrosos.
fuente