Imagen de limpieza para ayudar a tesseract en Android

Estoy tratando de extraer los dígitos de un tablero de sudoku. Después de detectar el tablero, sus esquinas y transformar, me quedo con una imagen bastante alineada de sólo el tablero. Ahora estoy tratando de reconocer los dígitos usando la implementación de Tesseract android, Tess-Two. Divido la imagen a 9 partes por

currentCell = undistortedThreshed.submat(rect); 

Donde rect es el rectángulo que rodea la imagen.

Ahora al reconocimiento de dígitos.

Algunos dígitos, como 4, reconocen perfectamente. Algunos, sobre todo 6,7,8 se reconocen como 0s o nada.

Quiero ayudar a tesseract tanto como puedo limpiando la imagen de currentCell . En este momento se parece a esto Invertido 6 . (También intentado sin el umbral invertido). Quiero deshacerme de las líneas blancas (las líneas de sudoku). He intentado algo como esto (tomado de aquí )

 Imgproc.Canny(currentCell, currentCell, 80, 90); Mat lines = new Mat(); int threshold = 50; int minLineSize = 5; int lineGap = 20; Imgproc.HoughLinesP(currentCell, lines, 1, Math.PI / 180, threshold, minLineSize, lineGap); for (int x = 0; x < lines.cols() && x < 1; x++) { double[] vec = lines.get(0, x); double x1 = vec[0], y1 = vec[1], x2 = vec[2], y2 = vec[3]; Point start = new Point(x1, y1); Point end = new Point(x2, y2); Core.line(currentCell, start, end, new Scalar(255), 10); } 

Pero no dibuja nada, he intentado jugar con el ancho de la línea y el color, pero todavía nada. Trate de dibujar la línea en la imagen grande, en la imagen unthreshed, nada funciona ..

¿Alguna sugerencia?

EDITAR

Por alguna razón, no parece encontrar líneas. Esto es lo que la imagen se ve después de aplicar canny a ella 6 después de canny Pero el HoughLines no detecta ninguna línea. Probado tanto HoughLines y HoughLinesP con diferentes valores, como se muestra en la documentación de OpenCV, pero nada funciona … Esas son líneas bastante obvias .. ¿Qué estoy haciendo mal? ¡Gracias!

Acabé haciendo algo diferente.

Utilicé findContours para obtener el contorno más grande, que es el dígito.

Tiene su caja boundingRect usando boundingRect .

Extraído esto usando submat y voilla. Tengo sólo el dígito.

Por desgracia, parece no hacer ninguna diferencia en absoluto. Tesseract todavía no puede reconocer los dígitos correctamente. A veces no da ningún resultado, a veces, después de dilatar los dígitos que reconoce el 6 como 0. Pero eso es un problema para otra pregunta.

Esta es una idea de la parte superior de mi cabeza:

Guarde el código que calcula las líneas de Hough en la imagen. Lo que significa que puede obtener las líneas correspondientes a la cuadrícula.

Ahora, simplemente dibuje esas líneas en la imagen original, pero ajuste el color a NEGRO.

La mayoría de las líneas blancas ahora estarían cubiertas con las líneas negras recién dibujadas. Como las posiciones de la línea de Hough no coinciden exactamente con las líneas reales, podrían quedar unos pocos puntos pequeños de blanco. Eliminarlos a través de componentes conectados (y descartar los componentes que son demasiado pequeños) o incluso algunas operaciones morfológicas – teniendo cuidado de que el dígito real permanece inalterado – podría manejar estas imperfecciones.

Prueba y házmelo saber. Espero que esto te ayude.

  • OpenCV Android - edición de color usando CameraBridgeViewBase
  • Reconocimiento de rostro inestable con OpenCV
  • ¿Es el cambio de contexto utilizando un tiempo significativo?
  • Convertir mapa de bits de Android a OpenCV Mat y hacia atrás
  • Números digitales en Tesseract OCR
  • Cómo agregar punto a MatOfPoint2f?
  • OpenCV Android - No se puede resolver la función JNI correspondiente
  • Eclipse da error al usar GaussianBlur con OpenCV para Android
  • OpenCV para Android - NativeCameraView todavía existe?
  • ¿Cómo reducir los partidos en el reconocimiento de patrones de OpenCV?
  • ¿Cuándo necesitamos el NDK para OpenCV Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.