2010-04-01 7 views
7

Il mio programma sta lavorando con documenti fax memorizzati come bitmap separati
Mi chiedo se c'è un modo per rilevare automaticamente l'orientamento della pagina (verticale o orizzontale) per mostrare l'anteprima dell'immagine per l'utente nell'ordine giusto (significato ruotare se necessario)Come rilevare l'orientamento dell'immagine (testo)

Qualsiasi consiglio molto apprezzato!

EDIT: Precisazione:
Quando Faxmachine riceve documento di più pagine consente di risparmiare ogni pagina come file TIFF separato.
La mia app ha un visualizzatore incorporato che mostra quei file. Tutti i file vengono scalati in formato A4 e salvate in formato TIFF (quindi non c'è nessun cambiamento di rilevare l'orientamento con altezza/parametri di larghezza)
mio visualizzatore mostra le immagini in modalità di default

Quello che mi piacerebbe fare è automagically rilevare la situazione quando il documento org è stato stampato in modalità orizzontale (ad es. ampie tabelle Excel) quindi mi piacerebbe mostrare l'anteprima ruotata per l'utente finale per accelerare il processo di anteprima

Ovviamente ci sono 4 possibili orientamento del fax verticale/orizzontale x 2 tipi di rotazioni.

Sono persino soluzione semplificata interessa rilevare quando doc org era orizzontale o verticale (ho notato la maggior parte dei documenti del paesaggio deve essere ruotato in senso orario)

EDIT2: Idea
penso che potrebbe essere qualche idea:
Se potessi disegnare linee orizzontali e verticali e controllare se la linea non taglia alcun punto (nero). Quindi possiamo confrontare quali sono più tipi di linee (orizzontali o verticali) e decide sull'orientamento della pagina.
Cosa ne pensi?

+0

Si prega di chiarire. Vuoi dire che hai una serie di immagini di un mix di pagine di testo verticali e orizzontali e vuoi analizzare l'immagine per determinare come deve essere ruotata in modo che il testo possa essere visualizzato correttamente? Presumibilmente ci sono in realtà 4 possibili orientamenti, dato che gli originali potrebbero essere stati scansionati "capovolti". – e100

risposta

2

Avresti bisogno di OCR per questo. Fare il proprio OCR sarebbe un po 'difficile, ma potrebbe esserci una biblioteca o qualcosa che merita di essere esaminata? Inoltre, anche con un buon OCR, non è una soluzione affidabile al 100%.

+0

Ho seguito quella strada. Ho usato la lib di OCR gratuita di Teseract .NET per C#. Documento ruotato purché abbia ottenuto il miglior rapporto%. – Maciej

2

Mi chiedo se ci siano alcune proprietà del testo che è possibile utilizzare per aiutarti a farlo.

Ad esempio, in base a una rapida occhiata, ci sono molte più linee verticali nel testo (l, j, k, m, n ecc.) Di quelle orizzontali, quindi forse potresti iniziare con questo.

Ma anche rilevare questi non è semplice, è necessario utilizzare una sorta di filtro come un o Prewitt. Entrambi hanno versioni orizzontali e verticali, see here per maggiori informazioni.

Ovviamente le linee verticali/orizzontali di un foglio di calcolo excel sarebbero i bordi più forti, quindi dovresti ignorarli e guardare solo il testo.

Alternativa: Non si può semplicemente dare all'utente un modo semplice per ruotare le immagini, come le frecce nel visualizzatore di immagini di Windows o semplicemente mostrare 4 anteprime di miniature su cui possono fare clic. Potrebbe essere necessario memorizzare nella cache le 4 versioni (se si sta ruotando) quindi è veloce, ma solo se la velocità si rivela essere un problema?

3

È possibile eseguire una trasformazione di Fourier veloce (FFT) per convertire l'immagine spaziale in una rappresentazione di frequenza/angolo. Quindi trova l'angolo con la frequenza più prominente.Sembra complicato ma non è così difficile, è abbastanza efficiente, e in effetti mette alla prova ogni angolo possibile in una volta, invece di essere un hack hardcoded che funziona solo per angoli specifici. Cerca un'implementazione di esempio con termini di ricerca come Ricette numeriche e FFT.

2

Ecco un articolo intitolato "Combined Script and Page Orientation Estimation using the Tesseract OCR engine" [pdf]

non sono stato in grado di trovare un'implementazione del loro lavoro, ma l'approccio sembra buono per me:

L'idea di base l'approccio proposto è semplice.

Una classe di classi è formata sui caratteri (classi) da tutti gli script di interesse. In fase di esecuzione, la classe viene eseguita indipendentemente su ciascun componente connesso (CC) nell'immagine e il processo viene ripetuto dopo aver ruotato ciascun CC in altri tre orientamenti candidati (90 °, 180 ° e 270 ° dall'orientamento di input).

L'algoritmo tiene traccia del numero stimato di caratteri in ogni script per un dato orientamento e del punteggio di confidenza della classe di classificazione accumulato in tutti gli orientamenti del candidato. La stima dell'orientamento della pagina viene scelta come quella con il punteggio di confidenza cumulativo più alto e la stima dello script viene scelta come quella con il numero più alto di caratteri in quello script per la migliore stima di orientamento.

+0

Simile a Catdirt consigliato – Maciej

Problemi correlati