¿Cuáles son los buenos algoritmos para la detección de matrículas de vehículos?


Fondo

Para mi proyecto final en la universidad, estoy desarrollando una aplicación de detección de matrículas de vehículos. Me considero un programador intermedio, sin embargo, mi conocimiento de matemáticas carece de algo por encima de la escuela secundaria, lo que hace que la producción de las fórmulas correctas más difícil de lo que probablemente debería ser.

He pasado una buena cantidad de tiempo buscando trabajos académicos como:

Cuando se trata de las matemáticas, estoy perdido. Debido a esta prueba, varias imágenes gráficas resultaron productivas, por ejemplo:

texto alt

A

texto alt

Sin embargo, este enfoque solo funcionó para esa imagen en particular, y si las técnicas se aplicaron a diferentes imágenes, estoy seguro de que una conversión más pobre ocurriría. He leído sobre una fórmula llamada "transformación de morfología de sombrero inferior", que hace lo siguiente:

Básicamente, la trans - formación mantiene todos los detalles oscuros de la imagen, y elimina todo lo demás (incluidas las regiones oscuras más grandes y las regiones claras).

No puedo encontrar mucha información sobre esto, sin embargo, la imagen dentro de la documentación cerca del final del informe muestra su efectividad.

Otras restricciones

  • Desarrollo en C #
  • Confinando el proyecto solo a las placas de matrícula del Reino Unido
  • Puedo elegir las imágenes para convertir como una demostración

Pregunta

Necesito consejo sobre qué técnicas de transformación debería enfocarme en desarrollar y qué algoritmos pueden ayudarme.

EDITAR: Nueva información presente en Continua-Detección de Matrículas de Vehículos

Author: Community, 2011-01-16

11 answers

Hay una serie de enfoques que puede tomar, pero la primera estrategia que viene a la mente es:

  • Descubrimiento/investigación: Identifique el conjunto de colores y fuentes que puede necesitar identificar. Si su imagen de muestra es representativa de la mayoría de las placas británicas, entonces su trabajo se hace más fácil. Por ejemplo, fuente simple, singular y letras negras sobre un fondo blanco
  • Código: Intenta identificar una región rectangular de una imagen donde los colores son predominantemente blanco y negro. Este no es un problema terriblemente matemático y debería darle la región de la matrícula para concentrarse.
  • Código: Haga un poco de limpieza en su subregión, como la conversión a blanco y negro puro (monocromo) y tal vez la escala/cambio en un rectángulo bonito y apretado.
  • Use API: A continuación, emplee un algoritmo OCR (reconocimiento óptico de caracteres) existente en su región de imagen sub-seleccionada para ver si puede leer el texto.

Como dije, esta es una estrategia de muchas pero se trata de mente como uno que requiere la menor cantidad de matemáticas pesadas... eso es si puede encontrar una implementación de OCR que funcione para usted.

 13
Author: Paul Sasik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-16 19:54:38

Puede echar un vistazo a uno de los ejemplos de emgucv que le muestran un mundo real ejemplos de trabajo de detección de placas de vehículos utilizando OCR

Http://www.emgu.com/wiki/index.php/License_Plate_Recognition_in_CSharp

 8
Author: Luca Del Tongo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-17 00:20:27

Hice un proyecto similar hace unos años en Java, primero apliqué el operador Sobel y luego enmascaré toda la imagen con una imagen de una placa (con el operador Sobel aplicado también). La región de máxima coincidencia es donde está la placa. Luego aplique un OCR a la región seleccionada para obtener el número.

 3
Author: rodrigoap,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-16 20:01:16

Así es como te sugiero que hagas esta tarea. Lea mi respuesta detallada aquí .

  1. Convertir a escala de grises.
  2. Desenfoque gaussiano con filtro 3x3 o 5x5.
  3. Aplique el filtro Sobel para encontrar bordes verticales.

    Sobel(gray, dst, -1, 1, 0)

  4. Umbral de la imagen resultante para obtener una imagen binaria.
  5. Aplique una operación de cierre morfológico utilizando un elemento de estructuración adecuado.
  6. Encuentra los contornos de la imagen resultante.
  7. Encuentra minAreaRect de cada contorno. Seleccione rectángulos basados en la relación de aspecto y el área mínima y máxima.
  8. Para cada contorno seleccionado, busque la densidad del borde. Establezca un umbral para la densidad del borde y elija los rectángulos que rompan ese umbral como posibles regiones de la placa.
  9. Pocos rectángulos permanecerán después de esto. Puede filtrarlos según la orientación o cualquier criterio que considere adecuado.
  10. Recorta estas porciones rectangulares detectadas de una imagen después de adaptiveThreshold de la imagen original (escala de grises) y aplica OCR.
 2
Author: Abdul Fatir,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:47:35

Este es claramente un tipo de problema de visión artificial. Echa un vistazo a OpenCV . Está en C++, pero probablemente podrás interactuar con él de alguna manera.

 1
Author: 9000,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-16 19:54:52

El Reino Unido ya tiene un sistema que hace eso. Recuerdo haber visto un programa de televisión en el que demostraron que pueden encontrar un coche dentro de Londres en 10 minutos (suponiendo que saben el número y el coche está conduciendo alrededor) Solo leer Wikipedia te da los consejos que necesitas para empezar a pensar en el tema: http://en.wikipedia.org/wiki/Automatic_number_plate_recognition

 1
Author: Mircea,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-16 21:58:18

Te dice exactamente cómo calcular la transformación de sombrero inferior(algo así como una transformada de umbral graduado invertida para mí).

Lo primero que hay que hacer es implementar las dos funciones morfológicas dilatación y erosión.

Para hacer esto necesita su f y b, luego calcula la función sobre una pequeña región de la imagen en un punto manteniendo el valor más grande encontrado.

(f ⊕ b)(s, t) = max{f (s − x, t − y) + b(x, y)
|(s − x), (t − y) ∈ Df ; (x, y)∈Db}

Lo que esto dice es, tomar el máximo de la expresión sobre todos los puntos en la región de dominio(como un pequeño rectángulo centrado en su punto (s, t).

El pseudo código simple sería

max = -infinity // for the point (s,t) on the image, must compute this for all points
for(x = -5 to 5)
for(y = -5 to 5)
max = Max(max, f(s - x, t - y) + b(x,y))

Efectivamente ahora tenemos una nueva imagen de los valores máximos.

En realidad es bastante simple,así que no lo hagas más difícil de lo que es(simplemente estamos agregando b(x, y) a cada punto de la región y averiguando cuál da el valor máximo).

Usted hace lo mismo para la erosión(muy similar a la anterior)

Ahora la apertura y el cierre es la composición de los dos

Puedes piense en ello primero como la realización de una dilatación y luego una erosión para una abertura.

Dice finalmente restar el cierre de la imagen original y usted debe tener su transformación.

 1
Author: AbstractDissonance,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-17 01:10:51

Si está interesado en el problema de detectar la presencia de una matrícula (en lugar de reconocerla), probablemente debería mirar la detección de texto en las imágenes, ya que está relacionada con lo que está haciendo.

Esta pregunta está relacionada con la suya: Algoritmo para detectar la presencia de texto en la imagen

 1
Author: carlosdc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 10:29:57

Puede usar la detección de rectángulos en opencv o entrene características similares a haar para detectar placas que también están presentes en opencv

 1
Author: mrgloom,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-08-10 09:32:08

También puede referirse a Biblioteca de Reconocimiento Automático de Matrículas & esta consulta . Esto también le dará alguna idea sobre cómo abordar las cosas y cómo son las soluciones existentes.

Pero como respondió Paul, primero debe tratar de encontrar la placa de número rectangular de la imagen completa y luego binarizarla y luego usar las bibliotecas de OCR disponibles (se recomendaría Tesseract)

Puede consultar este enlace que le ayudará a encontrar el placa rectangular. Necesita usar bibliotecas OpenCV, por lo que no necesitará mucha matemática, pero sí una comprensión básica de lo que está sucediendo detrás de escena puede ayudarlo a resolver el problema de una mejor manera.

 1
Author: Mayank,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:55:16

Es posible que desee comprobar hacia fuera www.openalpr.com como punto de partida. Utiliza una serie de técnicas para encontrar y analizar la matrícula.

 0
Author: Derrick Johnson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-17 22:45:04