2011-04-24 34 views
5

Estoy usando OpenCV en el iPhone. Quiero encontrar un Sudoku en una foto. Empecé con algunos Desenfoque gaussiano, Umbral adaptativo, Invertir la imagen y Dilatar. Luego busqué FindContour y drawContour para aislar la grilla de Sudoku. Luego, he usado la Transformada Hough para encontrar líneas y lo que necesito hacer ahora es encontrar las esquinas de la cuadrícula. La foto de Sudoku puede tomarse en un ángulo, así que necesito encontrar las esquinas para poder recortar y deformar la imagen correctamente.OpenCV detectar esquinas

Así es como se ven dos fotos diferentes. Uno de ellos es bastante simple y una en un ángulo:

probabilístico Hough

http://img96.imageshack.us/i/skrmavbild20110424kl101.png/

http://img846.imageshack.us/i/skrmavbild20110424kl101.png/

(Estándar Hough viene en un comentario que no puedo publicar más de dos enlaces.)

Entonces, ¿cuál sería el mejor enfoque para encontrar esas esquinas? ¿Y cuál de las dos transformadas es más fácil de usar?

Saludos Linus

+0

estándar Hough: http://img269.imageshack.us/i/skrmavbild20110424kl101.png/ http: //img808.imageshack. us/i/skrmavbild20110424kl101.png/ – Linus

Respuesta

2

¿Por qué no utilizar la detección de esquina de OpenCV? Eche un vistazo a cvCornerHarris().

Como alternativa, eche un vistazo a cvGoodFeaturesToTrack(). Es la navaja suiza de detección de características y se puede configurar para usar el detector de esquina Harris (entre otros).

+0

El detector de esquina también encontrará esquinas en los dígitos que se encuentran dentro de las celdas – user502144

+0

En su lugar usé cvGoodFeaturesToTrack(). Ahora tengo valores X e Y para las cuatro esquinas (a veces encuentra más). Ahora necesito averiguar qué punto es topLeft, topRight, etc. ¿Alguna idea de cómo puedo hacer eso? Parece que simplemente itera todos los puntos y verifica los valores, pero fallo cuando la imagen no es recta ... ¿Ideas? – Linus

+0

Consulte /samples/c/squares.c en su distribución de OpenCV. Este ejemplo proporciona un detector cuadrado, y debería ser un buen comienzo. Es probable que deba extenderlo un poco para detectar los paralelogramos que resultan de ver un cuadrado bajo rotación. – Throwback1986

1

que sugieren el siguiente enfoque. Primero, encuentre todas las intersecciones de líneas. Es útil separar las líneas en "horisontal" y "vertical" por el ángulo (es decir, encontrar dos direcciones principales de las líneas). Luego encuentra el casco convexo de los puntos adquiridos. Ahora tienes esquinas y algunos puntos en los límites. Puede eliminar este último analizando el ángulo entre los puntos vecinos en el casco convexo. Las esquinas tendrán un ángulo de aproximadamente 90 grados y puntos en los límites, aproximadamente 180 grados.