2012-07-13 12 views
11

¿Cuál es el mejor conjunto de operaciones de preprocesamiento de imágenes para aplicar a imágenes para reconocimiento de texto en EmguCV?Preprocesamiento de imágenes para reconocimiento de texto

He incluido dos imágenes de muestra here.

La aplicación de un filtro de pase bajo o alto no será adecuado, ya que el texto puede ser de cualquier tamaño. Probé filtros medianos y bilaterales, pero no parecen afectar mucho la imagen.

El resultado ideal sería una imagen binaria con todo el texto en blanco, y la mayor parte del resto en negro. Esta imagen se enviaría luego al motor de OCR.

Gracias

+1

¿podría usted por favor cargar esas imágenes de muestra aquí? enlace da 403 prohibido – Alupotha

Respuesta

16

No hay nada como el mejor conjunto. Tenga en cuenta que las imágenes digitales pueden ser adquiridas por diferentes dispositivos de captura y cada dispositivo puede incorporar su propio sistema de preprocesamiento (filtros) y otras características que pueden cambiar drásticamente la imagen e incluso agregarles ruidos. Entonces, cada caso debería tratarse (preprocesarse) de manera diferente.

Sin embargo, dan lugar a intervenciones commmon que se pueden utilizar para mejorar la detección, por ejemplo, una muy básica sería la de convertir la imagen a escala de grises y aplicar una threshold a binarizar la imagen. Otra técnica que he usado anteriormente es the bounding box, que le permite detectar la región de texto. Para eliminar los ruidos de las imágenes, puede que le interesen las operaciones erosionar/dilatar. Demuestro algunas de estas operaciones en this post.

Además, hay otros mensajes interesantes acerca de OCR y OpenCV que usted debe tomar un vistazo:

Ahora, sólo para mostrar un enfoque simple que puede ser utilizado con su imagen de muestra, esto es el resultado de invertir el color y aplicar un umbral:

cv::Mat new_img = cv::imread(argv[1]); 
cv::bitwise_not(new_img, new_img); 

double thres = 100; 
double color = 255; 
cv::threshold(new_img, new_img, thres, color, CV_THRESH_BINARY); 

cv::imwrite("inv_thres.png", new_img); 
+0

Supongo que tendré que encontrar el conjunto correcto de operaciones de erosión/dilatación para cada imagen. En este momento, no puedo encontrar una combinación que funcione razonablemente bien para todas las imágenes. Sin embargo, el ejemplo de cuenca funciona mejor. – Osiris

+0

¿Hay alguna otra forma de detectar texto en imágenes? – Maystro

+1

El segundo enlace de OpenCV está muerto, aquí hay una alternativa: https://github.com/damiles/basicOCR – yurez

2

Pruebe el procesamiento morfológico de imágenes. Eche un vistazo al this. Sin embargo, solo funciona en imágenes binarias, por lo que tendrá que binarizar la imagen (¿umbral?). Aunque es simple, depende del tamaño de la fuente, por lo que un elemento de estructura no funcionará para todos los tamaños de fuente. Si desea una solución genérica, hay una serie de documentos para la detección de texto en imágenes: una búsqueda de este término en Google Scholar debería proporcionarle algunas publicaciones útiles.

+0

Gracias, ese documento va a ser realmente útil. Miré las operaciones morfológicas, pero, como dijiste, dependen del tamaño del texto. – Osiris

Cuestiones relacionadas