visión tiempo reconocimiento real procesamiento objetos momentos momento los imagenes imagen fotografias figuras con artificial image-processing artificial-intelligence pattern-recognition data-analysis

image processing - tiempo - ¿Cuál es el mejor enfoque para reconocer patrones en los datos y cuál es la mejor manera de aprender más sobre el tema?



reconocimiento figuras matlab (12)

Un desarrollador con el que estoy trabajando está desarrollando un programa que analiza imágenes de pavimento para encontrar grietas en el pavimento. Por cada grieta que encuentra su programa, produce una entrada en un archivo que me dice qué píxeles forman esa grieta en particular. Sin embargo, hay dos problemas con su software:

1) Produce varios falsos positivos.

2) Si encuentra una grieta, solo encuentra pequeñas secciones y denota esas secciones como grietas separadas.

Mi trabajo es escribir software que lea estos datos, los analice y diga la diferencia entre falsos positivos y grietas reales. También necesito determinar cómo agrupar todas las pequeñas secciones de una grieta como una.

He intentado varias formas de filtrar los datos para eliminar los falsos positivos, y he estado utilizando redes neuronales con un grado limitado de éxito para agrupar grietas. Entiendo que habrá un error, pero a partir de ahora, hay demasiado error. ¿Alguien tiene alguna idea para un experto que no sea AI en cuanto a la mejor manera de cumplir mi tarea u obtener más información al respecto? ¿Qué clase de libros debo leer o qué clases de clases debo tomar?

EDITAR Mi pregunta es más acerca de cómo detectar patrones en los datos de mi compañero de trabajo e identificar esos patrones como grietas reales. Lo que me preocupa es la lógica de nivel superior, no tanto la lógica de bajo nivel.

EDITAR En toda la actualidad, se necesitarían AL MENOS 20 imágenes de muestra para proporcionar una representación precisa de los datos con los que estoy trabajando. Varía mucho. Pero tengo una muestra here , here y here . Estas imágenes ya han sido procesadas por el proceso de mi compañero de trabajo. Los datos rojo, azul y verde son los que tengo que clasificar (rojo significa grieta oscura, azul significa grieta clara y verde significa grieta ancha / sellada).


¿Cuál es el mejor enfoque para reconocer patrones en los datos y cuál es la mejor manera de aprender más sobre el tema?

El mejor enfoque es estudiar el reconocimiento de patrones y el aprendizaje automático. Comenzaría con la Clasificación de patrones de Duda y utilizaría el Reconocimiento de patrones y el Aprendizaje automático de Bishop. Tomaría un buen tiempo para que el material se hundiera, pero obtener el sentido básico del reconocimiento de patrones y los principales enfoques del problema de clasificación debería darle la dirección. Puedo sentarme aquí y hacer algunas suposiciones acerca de sus datos, pero honestamente, probablemente tenga la mejor idea sobre el conjunto de datos, ya que ha estado tratando con ellos más que nadie. Algunas de las técnicas útiles, por ejemplo, podrían ser la máquina de vectores de soporte y la boosting .

Edición : una aplicación interesante de refuerzo es la detección de rostros en tiempo real. Vea la Detección rápida de objetos de Viola / Jones utilizando una Cascada de características simples (pdf). Además, mirando las imágenes de muestra, diría que debería intentar mejorar un poco la detección de bordes. Tal vez alisar la imagen con Gauss y ejecutar una detección de bordes más agresiva puede aumentar la detección de grietas más pequeñas.


Además de los comentarios útiles sobre el procesamiento de imágenes, también parece que se trata de un problema de agrupación .

Los algoritmos de agrupamiento provienen de la literatura de aprendizaje automático , específicamente el aprendizaje no supervisado . Como su nombre lo indica, la idea básica es tratar de identificar grupos naturales de puntos de datos dentro de un gran conjunto de datos.

Por ejemplo, la imagen a continuación muestra cómo un algoritmo de agrupación puede agrupar un grupo de puntos en 7 grupos (indicado por círculos y color):

k-means http://natekohl.net/media/k-means.png

En su caso, un algoritmo de agrupación intentaría fusionar repetidamente pequeñas grietas para formar grietas más grandes, hasta que se cumplan algunos criterios de detención. El resultado final sería un conjunto más pequeño de grietas unidas. Por supuesto, las grietas son un poco diferentes a los puntos bidimensionales: parte del truco para lograr que un algoritmo de agrupación funcione aquí será definir una métrica de distancia útil entre dos grietas.

Los algoritmos populares de agrupación en clúster incluyen k-means clustering ( demo ) y agrupación jerárquica . Ese segundo enlace también tiene una buena explicación paso a paso de cómo funciona k-means.

EDITAR : Este documento de algunos ingenieros de Phillips parece relevante para lo que está tratando de hacer:

  • Chenn-Jung Huang, Chua-Chin Wang, Chi-Feng Wu, " Técnicas de procesamiento de imágenes para la identificación de grupos de defectos de obleas ", Diseño y prueba de computadoras IEEE, vol. 19, no. 2, pp. 44-48, marzo / abril, 2002.

Están haciendo una inspección visual para detectar defectos en las obleas de silicio, y usan un filtro mediano para eliminar el ruido antes de usar un algoritmo de agrupación del vecino más cercano para detectar los defectos.

Aquí hay algunos artículos / libros relacionados que citan que podrían ser útiles:

  • M. Taubenlatt y J. Batchelder, " Inspección de obleas con patrón utilizando filtrado espacial para el entorno de clúster ", Applied Optics, vol. 31, no. 17 de junio de 1992, pp. 3354-3362.
  • FLORIDA. Chen y S.-F. Liu, “ Un enfoque de red neuronal para reconocer patrones espaciales de defectos en la fabricación de semiconductores.IEEE Trans. Fabricación de semiconductores, vol. 13, no. 3, agosto de 2000, pp. 366-373.
  • G. Earl, R. Johnsonbaugh y S. Jost, Reconocimiento de patrones y análisis de imágenes , Prentice Hall, Upper Saddle River, NJ, 1996.

Debes leer acerca de la minería de datos , especialmente la minería de patrones .

La minería de datos es el proceso de extracción de patrones de datos. A medida que se recopilan más datos, con la cantidad de datos que se duplica cada tres años, la extracción de datos se está convirtiendo en una herramienta cada vez más importante para transformar estos datos en información. Se usa comúnmente en una amplia gama de prácticas de creación de perfiles, como marketing, vigilancia, detección de fraudes y descubrimiento científico.

Un buen libro sobre el tema es Minería de datos: herramientas y técnicas prácticas de aprendizaje automático.

La minería de datos se puede comprar en Amazon. http://www.cs.waikato.ac.nz/~ml/images/BOOK2ED.JPG

Básicamente, lo que debe hacer es aplicar herramientas y metodologías estadísticas a sus conjuntos de datos. Las metodologías de comparación más utilizadas son la prueba t de Student y la prueba Chi cuadrado , para ver si dos variables no relacionadas están relacionadas con cierta confianza.


Este es un problema de procesamiento de imágenes. Hay muchos libros escritos sobre el tema, y ​​gran parte del material de estos libros irá más allá de un problema de detección de líneas como este. Aquí está el esquema de una técnica que funcionaría para el problema.

  1. Cuando encuentras una grieta, encuentras algunos píxeles que forman la grieta. Los filtros de detección de bordes u otros métodos de detección de bordes pueden utilizarse para esto.

  2. Comience con un (cualquier) píxel en una grieta, luego "sígalo" para hacer una línea multipunto fuera de la grieta, guarde los puntos que forman la línea. Puede eliminar algunos puntos intermedios si se encuentran cerca de una línea recta. Haz esto con todos los píxeles del crack. Si tienes una grieta en forma de estrella, no te preocupes por eso. Simplemente siga los píxeles en una (o dos) direcciones para formar una línea, luego elimine estos píxeles del conjunto de píxeles de crack. Las otras patas de la estrella se reconocerán como líneas separadas (por ahora).

  3. Puede realizar un poco de adelgazamiento en los píxeles de la grieta antes del paso 1. En otras palabras, verifique los vecinos de los píxeles, y si hay demasiados, ignore ese píxel. (Esto es una simplificación, puede encontrar varios algoritmos para esto). Otro paso de preprocesamiento podría ser eliminar todas las líneas que son demasiado finas o dos débiles. Esto podría ayudar con los falsos positivos.

  4. Ahora tienes un montón de líneas cortas, multipunto. Para los puntos finales de cada línea, encuentre la línea más cercana. Si las líneas están dentro de una tolerancia, entonces "conecte" las líneas, vincúlelas o agréguelas a la misma estructura o matriz. De esta manera, puede conectar las grietas cercanas, que probablemente serían las mismas grietas en el concreto.

Parece que sin importar el algoritmo, será necesario algún ajuste de parámetros para un buen desempeño. Escríbalo para que sea fácil hacer cambios menores en cosas como umbrales de intensidad, grosor mínimo y máximo, etc.

Dependiendo del entorno de uso, es posible que desee que el criterio del usuario determine los casos cuestionables y / o permita que un usuario revise todas las grietas y haga clic para combinar, dividir o eliminar las grietas detectadas.


Estoy un poco confundido por la forma en que has elegido para solucionar el problema. Si su compañero de trabajo no está identificando grietas completas, y esa es la especificación, entonces ese es su problema. Pero si logras unir todas las grietas y evitar sus falsos positivos, ¿no acabas de hacer su trabajo?

Aparte de eso, creo que este es un problema de detección de bordes en lugar de un problema de clasificación. Si el detector de bordes es bueno, entonces sus problemas desaparecen.

Si aún está establecido en la clasificación, entonces necesitará un conjunto de entrenamiento con respuestas conocidas, ya que necesita una forma de cuantificar qué diferencia a un falso positivo de un crack real. Sin embargo, sigo pensando que es poco probable que su clasificador sea capaz de conectar las grietas, ya que éstas son específicas para cada losa individual.


Hay algunas respuestas muy buenas aquí. Pero si no puede resolver el problema, puede considerar Mechanical Turk. En algunos casos, puede ser muy rentable para problemas persistentes. Conozco personas que lo utilizan para todo tipo de cosas como esta (verificación de que un ser humano puede hacer fácilmente pero resulta difícil de codificar).

https://www.mturk.com/mturk/welcome



No soy un experto de ninguna manera, pero trate de mirar Cascadas Haar . También es posible que desee experimentar con el kit de herramientas OpenCV. Estas dos cosas juntas hacen la detección de caras y otras tareas de detección de objetos.

Puede que tenga que hacer "entrenamiento" para desarrollar una cascada Haar para grietas en el pavimento.


Su problema cae en el amplio campo de clasificación de imágenes. Estos tipos de problemas pueden ser muy difíciles, y al final del día, resolverlos es un arte. Debe explotar cada conocimiento que tenga sobre el dominio del problema para que sea manejable.

Un tema fundamental es la normalización. Desea que los objetos clasificados de manera similar sean lo más similares posible en su representación de datos. Por ejemplo, si tiene una imagen de las grietas, ¿todas las imágenes tienen la misma orientación? Si no, la rotación de la imagen puede ayudar en su clasificación. Del mismo modo, escalado y traducción (refiérase a this )

También desea eliminar la mayor cantidad de datos irrelevantes posible de sus conjuntos de entrenamiento. En lugar de trabajar directamente en la imagen, quizás podría usar la extracción de bordes (por ejemplo, la detección de bordes Canny). Esto eliminará todo el ''ruido'' de la imagen, dejando solo los bordes. El ejercicio se reduce entonces a identificar qué bordes son las grietas y cuáles son el pavimento natural.

Si desea obtener una solución rápida, le sugiero que pruebe primero su suerte con una red neuronal convolucional , que puede realizar una clasificación de imagen bastante buena con un mínimo de preprocesamiento y noramlización. Es bastante conocido en reconocimiento de escritura, y podría ser justo para lo que estás haciendo.


Suena un poco como un problema que existe en Rock Mechanics, donde hay juntas en una masa de roca y estas deben agruparse en ''conjuntos'' por orientación, longitud y otras propiedades. En este caso, un método que funciona bien es el agrupamiento, aunque parece que los medios K clásicos tienen algunos problemas que he abordado en el pasado utilizando un algoritmo genético para ejecutar la solución interactiva.

En este caso, sospecho que podría no funcionar de la misma manera. En este caso, sospecho que necesita crear sus grupos para comenzar con, por ejemplo, longitudinales, transversales, etc., y definir exactamente cuál es el comportamiento de cada grupo, es decir, si una sola grieta longitudinal se puede separar a lo largo de su longitud, y si hace lo que hace Que hacen a su clasificación.

Una vez que tenga eso para cada grieta, generaría una grieta aleatoria o un patrón de grietas basado en la clasificación que haya creado. Luego puede usar un enfoque de mínimos cuadrados para ver qué tan cerca se ajusta la grieta que está comparando con las grietas aleatorias que ha generado. Puede repetir este análisis muchas veces a la manera de un análisis de Monte-Carlo para identificar cuál de las grietas / grietas generadas aleatoriamente se ajusta mejor a la que está verificando.

Para lidiar con los falsos positivos, deberá crear un patrón para cada uno de los diferentes tipos de falsos positivos, es decir, el borde de un bordillo es una línea recta. Entonces podrá ejecutar el análisis seleccionando cuál es el grupo más probable para cada crack que analice.

Finalmente, deberá ''modificar'' la definición de los diferentes tipos de grietas para intentar obtener un mejor resultado. Supongo que esto podría utilizar un enfoque automatizado o un enfoque manual dependiendo de cómo defina sus diferentes tipos de grietas.

Otra modificación que a veces ayuda cuando hago problemas como este es tener un grupo aleatorio. Al ajustar la sensibilidad de un grupo aleatorio, es decir, la probabilidad de que se incluya una grieta en el grupo aleatorio, a veces se puede ajustar la sensibilidad del modelo a patrones complejos que realmente no encajan en ningún lado.

Buena suerte, me parece que tienes un verdadero desafío.


Tengo que estar de acuerdo con ire_and_curses, una vez que te sumerges en el campo de la detección de bordes para parchear la detección de grietas de tus desarrolladores y eliminar sus falsos positivos, parece como si estuvieras haciendo su trabajo. Si puede parchear lo que su software no detectó y eliminar sus falsos positivos en torno a lo que le ha dado. Parece que podrías hacer esto por la imagen completa.

Si la especificación es que él detecte las grietas y usted las clasifique, entonces es su trabajo hacer la detección de bordes y eliminar los falsos positivos. Y su trabajo es tomar lo que él le ha dado y clasificar qué tipo de crack es. Si tiene que hacer la detección de bordes para hacer eso, entonces parece que no está lejos de dejar a su co-desarrollador fuera del trabajo.


Tienes una muy buena respuesta, esp. @ Nate''s, y todos los enlaces y libros sugeridos valen la pena. Sin embargo, me sorprende que nadie haya sugerido el único libro que hubiera sido mi primera elección: la Inteligencia Programadora Colectiva de O''Reilly. Puede que el título no parezca pertinente a su pregunta, pero, créanme, los contenidos son : una de las coberturas más prácticas y orientadas a los programadores de la extracción de datos y el "aprendizaje automático" que he visto. ¡Dale una vuelta! -)