2012-04-18 9 views
9

Voglio rilevare l'area di testo dall'immagine come una fase di preelaborazione per il motore OCR di tesseract, il motore funziona bene quando l'input è solo testo ma quando l'immagine di input contiene Contenuto non testo cade, quindi voglio rilevare solo il contenuto di testo nell'immagine , qualsiasi idea su come farlo sarà utile, grazie.Come rilevare l'area di testo dall'immagine?

+1

Vorrei andare a una soluzione di elaborazione delle immagini. Prova google per rimuovere le tecniche di background. –

+0

è difficile capire il tuo problema senza immagine di esempio. Si prega di caricare l'immagine in imageshack.us e fornire il link qui. –

+0

ok, questo è il link di un'immagine di esempio voglio rimuovere l'area non di testo da http://imageshack.us/photo/my-images/171/img0052ir.jpg/ ma penso che tesseract gestisca tutto il processo su di esso proprio così non ci preoccuperemo di come l'immagine assomiglia. – chostDevil

risposta

7

Date un'occhiata a questo bounding box tecnica dimostrata con il codice di OpenCV:

ingresso:

enter image description here

eroso:

enter image description here

Risultato:

enter image description here

+0

cosa dire della regione non testuale nell'immagine scansionata, (cioè quando eseguo un'erosione sull'immagine di input, le regioni non di testo nell'immagine di input sono trascurate?) – chostDevil

+0

Quando hai un riquadro di delimitazione puoi estrarne il contenuto in un nuova immagine e dimentica tutto ciò che non è all'interno della scatola. Per questa attività, cerca nel nostro forum ** Regione di interesse ** o ** ROI ** nel tag OpenCV. – karlphillip

+0

se c'è una tecnica accurata di questo per favore fammi sapere, e grazie mille :) – chostDevil

2

Beh, non sto bene-esperto in elaborazione delle immagini, ma spero di poterti aiutare con il mio approccio teorico.

Nella maggior parte dei casi, il testo sta formando righe orizzontali e orizzontali, dove lo spazio tra le righe conterrà lotti di pixel di sfondo. Questo potrebbe essere utilizzato per risolvere questo problema. Quindi ... se componi componi ogni colonna di pixel dell'immagine, otterrai un'immagine di 1 pixel di larghezza come output. Quando l'immagine di input contiene del testo, l'output sarà molto probabilmente un pattern periodico, dove le aree scure sono seguite da aree più luminose ripetutamente. Questi "gruppi" di pixel più scuri indicano la posizione del contenuto del testo, mentre il più luminoso "gruppi" indicherà gli spazi tra le singole righe. Probabilmente scoprirai che le aree più luminose saranno molto più piccole delle altre. Il testo è molto più generico di qualsiasi altro elemento dell'immagine, quindi dovrebbe essere facile da separare.

È necessario implementare una procedura per rilevare queste ricorrenze periodiche. Una volta che lo script può determinare che l'immagine in ingresso ha queste caratteristiche, c'è un'alta possibilità che contenga testo. (Tuttavia, questo approccio non può distinguere tra testo reale e strisce orizzontali semplici ...)

Per il passaggio successivo, è necessario trovare un modo per determinare i bordi dei paragrafi, utilizzando il metodo sopra indicato. Sto pensando ad un algoritmo piuttosto fittizio, la strega dividerebbe l'immagine in input in strisce più piccole e strette (50-100 px), e controllerebbe queste aree separatamente. Quindi, confronta questi risultati per costruire una mappa delle possibili aree piene di testo. Questo metodo non sarebbe così preciso, ma probabilmente non infastidisce il sistema OCR.

Infine, è necessario utilizzare la mappa di testo per eseguire l'OCR solo nelle posizioni desiderate.

Dall'altro lato, questo metodo fallirebbe se il testo di input viene ruotato di più di ~ 3-5 gradi. C'è un altro backdraw, perché se hai solo poche righe, la tua ricerca di pattern sarà molto inaffidabile. Più righe, una maggiore accuratezza ...

saluti, G.

2

Sono nuovo di StackOverflow.com, ma ho scritto una risposta a una domanda simile a questa che potrebbe essere utile a tutti i lettori che condividono questa domanda. Se la domanda sia o meno un duplicato, dal momento che questo è stato il primo, lascerò agli altri. Se dovessi copiare e incollare la risposta qui, fammi sapere. Ho anche trovato questa domanda prima su google piuttosto che su quella a cui ho risposto, quindi questo potrebbe essere di beneficio a più persone con un link. Soprattutto dal momento che fornisce diversi modi per ottenere aree di testo. Per me, quando ho cercato questa domanda, non si adattava al mio caso problematico.

Detect text area in an image using python and opencv

Problemi correlati