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 enfoque diferente en la detección de ir bordo
  • Usando get () y put () para acceder a valores de píxeles en OpenCV para Java
  • La cámara no está abierta - Inicialización estática en OpenCV Android
  • Gradle android build para diferentes arquitecturas de procesador
  • Referencia indefinida a 'cv :: initModule_nonfree ()' En Android
  • No se pudo cargar la biblioteca libopencv_java.so
  • Detección de color verde Android de OpenCV
  • Detección de números y texto posible con opencv android mientras captura de video?
  • Cómo configurar la resolución de la cámara en Android con OpenCV?
  • Animar la imagen de la cara - usando deformación?
  • No se puede vincular la biblioteca nativa en la muestra de Android de OpenCV
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.