c# - para - Detectando ruedas de camión
neumaticos bridgestone para camiones (3)
En esta respuesta, describo un enfoque que se probó con éxito con las siguientes imágenes:
La interconexión de procesamiento de imágenes comienza downsampling la downsampling la imagen de entrada o realizando una operación de reducción de color para disminuir la cantidad de datos (colores) en la imagen. Esto crea grupos de píxeles más pequeños para trabajar. Yo elegí disminuir la resolución :
La segunda etapa de la tubería realiza un desenfoque gaussiano para suavizar / desenfocar las imágenes:
A continuación, las imágenes están listas para su valorización, es decir, binarizadas:
La cuarta etapa requiere la ejecución de Hough Circles en la imagen binarizada para ubicar las ruedas:
La etapa final de la tubería sería dibujar los círculos que se encontraron sobre la imagen original:
Este enfoque no es una solución robusta. Solo pretende inspirarte a continuar buscando respuestas.
No hago C #, lo siento. ¡Buena suerte!
Actualmente estoy trabajando en un proyecto en el que tenemos un conjunto de fotos de camiones que pasan por una cámara. Necesito detectar qué tipo de camión es (cuántas ruedas tiene). Así que estoy usando EMGU para tratar de detectar esto.
El problema que tengo es que parece que no puedo detectar las ruedas usando la detección HoughCircle de EMGU, no detecta todas las ruedas y también detecta círculos al azar en el follaje.
Así que no sé qué debo intentar a continuación, traté de implementar SURF algo para hacer coincidir las ruedas entre ellos, pero esto tampoco parece funcionar, ya que no son exactamente iguales, ¿hay alguna manera de implementar un "loose"? SURF algo?
Esto es con lo que empiezo.
Esto es lo que obtengo después de la detección de Hough Circle. Muchas detecciones erróneas, algunas ni siquiera están cerca de tener un círculo y las ruedas traseras se detectan como una sola por alguna razón.
¿Sería posible confirmar que el círculo detectado es en realidad ruedas utilizando SURF y unirlas entre sí? Estoy un poco perdido en lo que debo hacer a continuación, cualquier ayuda sería muy apreciada.
(lo siento por el mal inglés)
ACTUALIZAR
Aquí esta lo que hice. Usé blob tracking para poder encontrar el blob en mi conjunto de fotos. Con esto, efectivamente puedo ubicar el camión en movimiento. Luego, dividí el rectángulo del blob en dos y tomé la mitad inferior de allí. Sé que obtengo la zona que debe contener las ruedas, lo que aumenta enormemente la detección. Luego ejecutaré un control suelto de intensidad ligera sobre las ruedas que obtengo. Como en general son más negros, debería obtener un valor bastante bajo para aquellos y puedo descartar cualquier cosa que sea demasiado blanca, 180/255 o superior. También sé que el radio de mis círculos no puede ser mayor que la mitad de la zona de detección dividida por la mitad.
Primero, las proyecciones de las ruedas son elipses y no círculos. En segundo lugar, algunos gradientes de fondo pueden producir fácilmente objetos tipo círculo, por lo que no debería sorprendernos. El problema con las elipses, por supuesto, es que tienen 5 DOF y no 3DOF como círculos. Tenga en cuenta que el espacio dimensional de cinco dimensiones se vuelve poco práctico. Algunas transformaciones de Hough generalizadas probablemente puedan resolver el problema de la elipse a expensas de muchos círculos adicionales de falsa alarma (FA). Para contrarrestar FA debes verificar que realmente son ruedas que pertenecen a un camión y nada más.
Probablemente necesite comenzar especificando su problema en términos de objetos y fondos en lugar de detectar las ruedas. Esto es importante ya que los objetos crearían un contexto visual para detectar ruedas y el análisis de fondo mostrará cuán fácil sería segmentar un camión (objeto) en primer lugar. Si la cámara es estática, puede usar el movimiento para detectar el fondo. Si el fondo es relativamente uniforme, los modelos de mezcla gaussiana de sus colores pueden ayudar a eliminar gran parte de él.
Recomiendo usar: http://cvlabwww.epfl.ch/~lepetit/papers/hinterstoisser_pami11.pdf
y la implementación de C #: https://github.com/dajuric/accord-net-extensions
(Eche un vistazo a las muestras)
Este algoritmo puede lograr un rendimiento en tiempo real mediante el uso de más de 2000 plantillas (20-30 fps), por lo que puede cubrir casos de elipse (proyección) y forma de círculo. Puede modificar la muestra de seguimiento de la mano (FastTemplateMatchingDemo)
poniendo sus propias plantillas binarias (hacerlas en Paint :-))
PD: Para suprimir falsos positivos, también se incorpora algún tipo de seguimiento. El enlace a la biblioteca que publiqué también contiene algunos algoritmos de seguimiento como: Filtro discreto de Kalman y Filtro de partículas, ¡todo con muestras!
Esta biblioteca aún está en desarrollo, por lo que existe la posibilidad de que algo no funcione. Por favor no dudes en enviarme un mensaje.