La coincidencia de plantillas no suele ser robusta para este tipo de aplicaciones debido a inconsistencias en la iluminación, cambios de orientación, cambios de escala, etc. La forma típica de resolver este problema es incorporar el aprendizaje automático. Lo que intenta hacer formando a su propio clasificador de potencia es un posible enfoque. Sin embargo, no creo que estés entrenando correctamente. ¿Mencionó que le dio 1 logo como una imagen de entrenamiento positiva y 5 otras imágenes que no contienen el logotipo como ejemplos negativos? En general, necesita muestras de capacitación en el orden de cientos o miles o más. No se puede entrenar con 6 muestras de entrenamiento y esperar que funcione.
Si no está familiarizado con el aprendizaje de máquina, aquí es más o menos lo que debe hacer:
1) Usted necesita recoger muchos muestras positivas de formación (de cien en adelante, pero en general, cuantos más mejor) de el objeto que intentas detectar Si está intentando detectar caracteres individuales en la imagen, obtenga imágenes recortadas de caracteres individuales. Puede comenzar con la base de datos MNIST para esto. Mejor aún, para entrenar al clasificador para su problema particular, obtenga muchas imágenes recortadas de los personajes en el bus de las fotos. Si está intentando detectar todo el panel rectangular de la placa LED, entonces use imágenes de ellos como muestras de entrenamiento positivas.
2) Necesitará recolectar muchas muestras de entrenamiento negativo. Su número debe estar en el mismo orden que la cantidad de muestras de entrenamiento positivas que tenga.Estas podrían ser imágenes de otros objetos que aparecen en las imágenes en las que ejecutará su detector. Por ejemplo, puede recortar imágenes de la parte delantera del autobús, superficies de carreteras, árboles a lo largo de la carretera, etc. y utilizarlas como ejemplos negativos. Esto es para ayudar al clasificador a descartar estos objetos en la imagen en la que ejecuta su detector. Por lo tanto, los ejemplos negativos son y no cualquier imagen que contenga objetos que no desee detectar. Deben ser objetos que puedan confundirse con el objeto que intenta detectar en las imágenes en las que ejecuta el detector (al menos en su caso).
Véase el siguiente enlace sobre cómo entrenar a la cascada de clasificador y producir el archivo de modelo XML: http://note.sonots.com/SciSoftware/haartraining.html
A pesar de que usted ha mencionado solo deseas para detectar los caracteres individuales en lugar de todo el panel de LED en el autobús, Recomiendo primero detectar el panel LED para localizar la región que contiene los caracteres de interés. Después de eso, realice la coincidencia de plantillas dentro de esta región más pequeña o ejecute un clasificador capacitado para reconocer caracteres individuales en parches de píxeles en esta región obtenidos utilizando el enfoque de ventana deslizante, y posiblemente a escala múltiple. (Nota: el clasificador de aumento de haarcascade que mencionó anteriormente detectará caracteres pero no le dirá qué carácter detectó a menos que solo lo entrene para detectar ese personaje en particular ...) Detectar caracteres en esta región de una manera deslizante dará usted el orden en que aparecen los caracteres para que pueda encadenarlos en palabras, etc.
Espero que esto ayude.
EDIT:
que sucedió al azar en este antiguo puesto de la mina después de descubrir separado del módulo de texto escena en OpenCV 3 mencionado por @KaolinFire.
Para aquellos que tienen curiosidad, este es el resultado de ejecutar ese detector en la imagen de muestra dada por el OP. Tenga en cuenta que el detector puede localizar la región de texto, aunque devuelva más de un cuadro delimitador.
Tenga en cuenta que este método no es infalible (al menos esta implementación en OpenCV con los parámetros por defecto). Tiende a generar falsos positivos, especialmente cuando la imagen de entrada contiene muchos "distractores". Aquí están más ejemplos obtenidos utilizando este detector de texto OpenCV 3 en el Google Street View conjunto de datos:
cuenta de que tiene una tendencia a encontrar "texto" entre las líneas paralelas (por ejemplo, , ventanas, paredes, etc.). Como es probable que la imagen de entrada del OP contenga escenas exteriores, esto será un problema, especialmente si no restringe la región de interés a una región más pequeña alrededor de los letreros LED.
Parece que si puede localizar una región "rugosa" que contenga solo el texto (por ejemplo, solo el letrero LED en la imagen de muestra del OP), ejecutar este algoritmo puede ayudarle a obtener un cuadro delimitador más ajustado. Sin embargo, tendrá que lidiar con los falsos positivos (tal vez descartando regiones pequeñas o eligiendo entre los cuadros delimitadores superpuestos usando una heurística basada en el conocimiento sobre la forma en que las letras aparecen en los letreros LED).
Aquí hay más recursos (discusión + código + conjuntos de datos) sobre detección de texto.
Código
Conjuntos de datos
Encontrará los Google vista calle y MSRA conjuntos de datos aquí. Aunque las imágenes en estos conjuntos de datos no son exactamente las mismas que las de los letreros LED en los autobuses, pueden ser útiles para escoger el "mejor" algoritmo de entre varios algoritmos competidores, o para entrenar un algoritmo de aprendizaje automático desde cero.
http://www.iapr-tc11.org/mediawiki/index.php/Datasets_List
pero la posición de dígitos en la imagen pueden variar, así que no se puede comparar a determinada posición de la imagen. La imagen comparada no está clara, entonces ¿cómo obtendré el dígito particular de la imagen? – asifkt
@asifkt, luego edite su pregunta para dar más detalles sobre su aplicación. ¿Qué sabes sobre las letras (fuentes, tamaños, perspectiva) de la fuente de la imagen (video, escáner, etc.) y más? Esto ayudará a enfocarse en posibles soluciones. –
Desarrollé la aplicación de detección de rostros. En realidad, el archivo en cascada haarcascade_frontalface_alt.xml se proporciona con opencv. Para el reconocimiento de letras, necesito crear un archivo xml.Así que usé opencv_createsamples.exe, archivos opencv_haartraining.exe para crear este archivo. Di un logotipo como imagen positiva y otras 5 imágenes que no contienen el logotipo como imágenes negativas. No recibí ningún archivo xml entrenando. Oí que tomará al menos 3 días para el entrenamiento del haar. ¿¿Es verdad?? Para obtener un xml intermedio, necesito usar el archivo convert_cascade.exe. Si lo uso, ¿obtendré el mejor resultado? – asifkt