Métodos de preprocesamiento sugeridos para OCR en imágenes circulares

8

Hola, esta es mi imagen de muestra. Voy a hacer una detección de personajes en tiempo real en imágenes como esa.

Probé SURF, SIFT, MSER y la coincidencia de plantillas en la imagen original sin ningún preprocesamiento. Puedo detectar caracteres, pero cuando la imagen cambia, los métodos de detección de esta característica no funcionan porque no hay muchos puntos de interés en los caracteres de la imagen. No estoy exactamente seguro de qué tipo de preprocesamiento debo hacer para una mayor precisión.

así que mi pregunta es qué métodos me pueden sugerir que haga para la detección de personajes con mayor precisión.

gracias por adelantado.

ingrese la descripción de la imagen aquí

Anar Bayramov
fuente

Respuestas:

8

Esto es lo que hice por un cliente (lo que estás preguntando es lo mismo).

Suponiendo que tiene acceso a cierto tipo de patrón en la imagen (o en el centro del agujero), siempre puede detectar la plantilla para obtener la ubicación de una posible deformación:

La coincidencia de patrones

Tenga en cuenta que en la imagen transformada, se definen dos regiones de intereses y la región dentro de la cual nos gustaría leer los caracteres es el toro que se encuentra entre dos círculos. Usando esta información, podríamos deformar esta imagen usando una transformación polar inversa para obtener:

inverse_polar_transform

También proporciono el código MATLAB para esta transformación en esta publicación de intercambio de archivos .

En el siguiente paso, gracias a la coincidencia de plantillas, los caracteres a leer siempre se encuentran en la región local definida en la imagen de arriba. Ahora, si tiene la iluminación adecuada, la segmentación de caracteres no es más que un conjunto trivial de operaciones de procesamiento de imágenes:

segmentación de personajes

Los componentes conectados obtenidos finalmente se alimentan a una red neuronal o un SVM, primero para entrenar y luego para clasificar. Esta parte se compone solo de una tarea básica de aprendizaje automático, que no detallaré aquí.

No olvide cuidar bien la iluminación, ya que casi está resolviendo el problema a la mitad.

Tolga Birdal
fuente
¡gracias por la respuesta! ¿Te importaría compartir la función polar inversa para obtener una imagen lineal?
Anar Bayramov
1
Publiqué una implementación de muestra en MATLAB FileExchange. Puede encontrarlo aquí: mathworks.com/matlabcentral/fileexchange/48911
Tolga Birdal
@TolgaBirdal ¿Puede explicar cómo implementó la segmentación de caracteres?
ahasbini
Bueno, respectivamente, se compone de umbral local + análisis de componentes conectados + filtrado de tamaño + programación dinámica para dividir la región restante de interés en caracteres individuales. Creo que cada paso es autodescriptivo
:)
1
Sí, lo conectaría. Entonces uno podría buscar sobre los posibles puntos de división y dividir el texto 'pend' horizontalmente en partes disjuntas. Esto dará como resultado 'p', 'e', ​​'n' y 'd'. Para decidir dónde cortarlo, se pueden usar muchas técnicas, incluida alguna forma de programación dinámica para satisfacer las restricciones de forma global. No entraré en detalles de esto ahora. Un enfoque simple y codicioso simplemente cortaría el texto de un punto donde el ancho de los caracteres es lo suficientemente grande y el punto de contacto es de unos pocos píxeles.
Tolga Birdal