2011-01-18 11 views
9

Continuando con este tema:Continuación - Detección de la matrícula del vehículo

What are good algorithms for vehicle license plate detection?

he desarrollado mis técnicas de manipulación de imágenes para enfatizar la matrícula tanto como sea posible, y en general estoy contento con él, aquí hay dos muestras.

alt text

alt text

Ahora viene la parte más difícil, en realidad la detección de la placa de matrícula. Sé que hay algunos métodos de detección de bordes, pero mi matemática es bastante pobre, así que no puedo traducir algunas de las fórmulas complejas en código.

Mi idea hasta ahora es recorrer cada píxel dentro de la imagen (para loop basado en el ancho de img & height) De esto comparar cada pixel contra una lista de colores, de esto se verifica un algoritmo para ver si los colores mantienen diferenciando entre la matrícula blanca y el negro del texto. Si esto sucede, estos píxeles se integran en un nuevo mapa de bits dentro de la memoria, luego se realiza un escaneo de OCR una vez que este patrón ha dejado de detectarse.

Agradecería algo de información sobre esto ya que podría ser una idea errónea, demasiado lenta o intensiva.

Gracias

+3

¿Me va a dar una multa cuando manejo en una de sus máquinas? – DOK

+0

hah, nah, este es solo un proyecto de uni, afortunadamente, tengo que elegir las imágenes que pruebo :) – Ash

Respuesta

5

Su método de "ver si los colores siguen diferenciando entre la matrícula blanca y el negro del texto" está básicamente buscando áreas donde la intensidad del píxel cambia de negro a blanco y viceversa muchas veces. La detección de bordes puede lograr esencialmente lo mismo. Sin embargo, implementar sus propios métodos es una buena idea porque aprenderá mucho en el proceso. Diablos, ¿por qué no hacer ambas cosas y comparar la salida de su método con la de algún algoritmo de detección de bordes ya hecho?

En algún momento deseará tener una imagen binaria, por ejemplo con los píxeles negros correspondientes a la etiqueta "no un carácter", y los píxeles blancos correspondientes a la etiqueta "is-a-character". Quizás la forma más simple de hacerlo es usar una función de umbralización. Pero eso solo funcionará si los personajes ya han sido enfatizados de alguna manera.

Como alguien ha mencionado en su otro hilo, que puede hacer que el uso del operador de sombrero negro, lo que resulta en algo como esto:

image after black hat operation

Si umbral de la imagen de arriba con, por ejemplo, el método de Otsu (que determina automáticamente un nivel de umbral global), se obtiene lo siguiente:

alt text

Hay varias maneras de limpiar esa imagen. Por ejemplo, se pueden encontrar los componentes conectados y tirar los que son demasiado pequeño, demasiado grande, demasiado grande o demasiado alto para ser un personaje:

alt text

Desde los personajes de su imagen son relativamente grandes y totalmente conectado este método funciona bien.

A continuación, puede filtrar los componentes restantes en función de las propiedades de los vecinos hasta que tenga el número deseado de componentes (= número de caracteres). Si desea reconocer el personaje, puede calcular las características para cada personaje e ingresarlas a un clasificador, que generalmente está construido con aprendizaje supervisado.

Todos los pasos anteriores son solo una forma de hacerlo, por supuesto.

Por cierto, generé las imágenes de arriba usando OpenCV + Python, que es una gran combinación para visión artificial.

+0

Gracias por su respuesta, realmente lo aprecio. OpenCV se ve increíble, pero prefiero quitar algo de esto en lugar de llamar a un par de funciones de la biblioteca, je. Me has dado algo de confianza para realmente intentarlo. Simplemente invertir mi imagen también produce muy buenos resultados, así que me puedo ir una vez que haya terminado con estos métodos de manipulación de imágenes :). – Ash

3

color, tanto como se ve bien, presentarán bastantes problemas con las condiciones de sombra y luz. Depende realmente de cuánto quieras que sea robusto, pero los casos del mundo real tienen que lidiar con estos problemas.

He hecho una investigación sobre material de archivo (vea mi página de perfil y mire aquí sample) y descubrí que el material de la carretera es extremadamente ruidoso en términos de condiciones de luz y sus colores pueden cambiar de marrón a blanco para una placa de numeración de espalda amarilla.

La mayoría de los algoritmos usan la detección de línea y tratan de encontrar una caja con una relación de aspecto dentro de un rango aceptable.

Le sugiero que haga una revisión de la literatura sobre el tema, pero esto se logró en 1993 (si mal no recuerdo), por lo que habrá miles de artículos.

Este es un dominio bastante científico, por lo que solo un algoritmo no lo resolverá y necesitará numerosos pasos de procesamiento previos y posteriores.

En resumen, mi sugerencia es utilizar Hough transform para buscar líneas y luego tratar de buscar rectángulos que puedan crear una relación de aspecto aceptable.

La detección de funciones de Harris podría proporcionar bordes importantes, pero si el automóvil es de color claro, esto no funcionará.

+0

Saludos por la respuesta, todavía podría dar un intento a mi método descrito anteriormente, ya que no puedo encontrar ningún pseudo código relacionado con Método de transformación Hough. ¡Gracias de todos modos! – Ash

+0

No tiene que ir para implementarlo usted mismo: use OpenCV, aunque una vez lo hice para una tarea. Creo que si necesitas hacer una Visión por Computadora seria, tienes que pensar en usar OpenCV, es muy fácil de usar e implementa Hough, y muchas otras cosas útiles y es muy rápido. – Aliostad

+0

Sí, quería evitar las bibliotecas, pero supongo que no tengo muchas opciones. – Ash

1

Si tiene muchas muestras, puede intentar comprobar el método de detección de rostros desarrollado por Paul Viola y Michael Jones. Es bueno para la detección de rostros, tal vez le irá bien con la detección de matrículas (especialmente si se combina con algún otro método)

+0

No entiendo por qué esto fue downvoted, básicamente Tomasz tiene razón, hay un buen artículo para un sistema que se implementa usando detección de objetos viola y jones [Reconocimiento de matrícula en tiempo real en DSP-Platform integrada] (http: // www.icg.tu-graz.ac.at/publications/pdf/arth_-_real-time_license_plate_recognition_ecw07.pdf). Ejemplo en opencv [aquí] (http://docs.opencv.org/trunk/doc/py_tutorials/py_objdetect/py_face_detection/py_face_detection.html) – Mantas

Cuestiones relacionadas