2010-04-01 40 views
7

Mi programa está trabajando con documentos de fax almacenados como mapas de bits separados
Me pregunto si hay una manera de detectar automáticamente la orientación de la página (vertical u horizontal) para mostrar la vista previa de la imagen para el usuario en el orden correcto (Significó rotar si es necesario)Cómo detectar orientación de la imagen (texto)

¡Todos los consejos muy apreciados!

EDIT: Aclaración:
Cuando faxmachine recibe documento de varias páginas se guarda cada página como un archivo TIFF separada.
Mi aplicación tiene un visor incorporado que muestra esos archivos. Todos los archivos se escalan a formato A4 y se guardan en formato TIFF (por lo que no hay ningún cambio para detectar la orientación por los parámetros de anchura altura /)
Mi visor muestra las imágenes en modo vertical por defecto

Lo que me gustaría hacer es automágicamente detectar la situación cuando el documento org se imprimió en modo horizontal (por ejemplo, tablas de Excel anchas) y me gustaría mostrar la vista previa girada para el usuario final para acelerar el proceso de vista previa

Obviamente hay 4 posibles diseños de orientación de retrato/paisaje x 2 tipos de rotaciones.

estoy aún solución simplificada interesa detectar cuando doc org era horizontal o vertical (Me he dado cuenta de la mayor parte de documentos paisaje necesita ser girado en sentido horario)

Edit2: Idea
yo creo que puede ser alguna idea:
Si pudiera dibujar líneas horizontales y verticales y comprobar si la línea no corta ningún punto (negro). Entonces podemos comparar qué son más tipos de líneas (horizontales o verticales) y su decisión sobre la orientación de la página.
¿Qué opinas?

+0

Por favor, aclare. ¿Quiere decir que tiene un conjunto de imágenes de una combinación de páginas de texto vertical y horizontal, y desea analizar la imagen para determinar cómo debe girarse para que el texto se muestre correctamente? Es de suponer que en realidad hay 4 orientaciones posibles, dado que los originales pueden haber sido escaneados "al revés". – e100

Respuesta

2

Necesitará OCR para eso. Hacer rodar su propio OCR sería un poco difícil, pero puede que haya una biblioteca o algo que valga la pena investigar. Además, incluso con un buen OCR, no es una solución 100% confiable.

+0

Lo he seguido. He usado Teseract .NET free OCR lib para C#. Documento girado siempre que obtenga la mejor proporción de porcentaje. – Maciej

2

Me pregunto si hay algunas propiedades de texto que podría utilizar para ayudarle a hacer esto.

Por ejemplo, en base a un vistazo rápido, hay muchas más líneas verticales en el texto (l, j, k, m, n, etc.) que las horizontales, así que tal vez podría comenzar con esto.

Pero incluso detectar estos no es sencillo, necesitarías usar algún tipo de filtro como Sobel o Prewitt. Ambos tienen versiones horizontales y verticales, see here para más información.

Por supuesto, las líneas verticales/horizontales de una hoja de cálculo de Excel serían las más fuertes, por lo que tendría que ignorarlas y mirar solo el texto.

Alternativa: ¿No se puede simplemente dar al usuario una manera fácil de rotar las imágenes, como las flechas en el visor de imágenes de Windows o simplemente mostrar 4 vistas previas en miniatura que pueden hacer clic en. Es posible que necesite almacenar en caché las 4 versiones (si está girando) por lo que es rápido, pero solo si la velocidad resulta ser un problema.

3

Puede realizar una Transformada rápida de Fourier (FFT) para convertir su imagen espacial en una representación de frecuencia/ángulo. Luego encuentra el ángulo con la frecuencia más prominente.Suena complicado, pero no es tan difícil, es bastante eficiente y, de hecho, prueba todos los ángulos posibles a la vez, en lugar de ser un truco codificado que solo funciona para ángulos específicos. Busque una implementación de muestra con términos de búsqueda como Recetas numéricas y FFT.

2

Aquí hay un documento titulado "Combined Script and Page Orientation Estimation using the Tesseract OCR engine" [pdf]

no he sido capaz de encontrar una aplicación de su trabajo, pero el enfoque se ve bien para mí:

La idea básica detrás de el enfoque propuesto es simple.

Un clasificador de formas está entrenado en caracteres (clases) de todos los guiones de interés. En tiempo de ejecución, el clasificador se ejecuta independientemente en cada componente conectado (CC) en la imagen y el proceso se repite después de rotar cada CC en otras tres orientaciones candidatas (90 °, 180 ° y 270 ° desde la orientación de entrada).

El algoritmo realiza un seguimiento del número estimado de caracteres en cada secuencia de comandos para una orientación determinada, y la puntuación de confianza del clasificador acumulada en todas las orientaciones de los candidatos. La estimación de la orientación de la página se elige como la que tiene la puntuación de confianza acumulada más alta, y la estimación de la secuencia de comandos se elige como la que tiene el mayor número de caracteres en esa secuencia de comandos para obtener la mejor estimación de orientación.

+0

Similar a Catdirt aconsejado – Maciej

Cuestiones relacionadas