[Tech] Pattern Recognition e/o OCR
Franco Bagnoli
franco.bagnoli@unifi.it
Ven 12 Maggio 2006 14:21:52 CEST
Marco Marcantelli (kaifa) ha scritto:
>>> vorrei riconoscere da un immagine scannerizzata (PDF/TIF) una certa
>>> forma o scritta fissa, ma in posizione differente.
>> Trovare la forma diventa in generale più complicato. Specialmente se
>> questa è variabile, distorta o corrotta da rumore...
io ho adattato un sistema sviluppato da un collega romano per fare la
correzione automatica dei quiz: si tratta di fare OMR (optical mark
recognition) ovvero scoprire se un quadretto è annerito o meno, e
leggere il codice a barre che identifica compito e studente.
L'approccio è alquanto brutale, si cercano prima di tutto delle crocette
che stanno ai quattro angoli del foglio e permettono di calcolare
rotazione e eventuale distorsione (ovviamente solo la parte lineare),
quindi si "mappano" le coordinate "vere" su quelle roto-traslate e
quindi si procede alla ricerca dei bit neri per il codice a barre e per
i markers.
Nel caso in cui si debbba cercare una forma data in una matrice di
punti, bisogna prima di tutto stimare quanto può essere la distiorsione
e la rotazione, altrimenti e possibile che, rumore a parte, non si trovi
nulla.
L'idea che dovrebbe essere la più efficace è la seguente: cercare di
"filtrare" l'immagine in modo che i pattern corrispondenti alla forma da
cercare diventino neri, ed il resto bianco, dopodiché cercare lo "spot"
nero. Per filtrare l'immagine si deve applicare ad ogni punto un
algoritmo tale che dia "nero" (1) se il punto può appartenere alla forma
cercata, 0 altrimenti. Una possibiliŧà è prendere la coincidenza (1-1 o
0-0) con la forma, traslata in maniera opportuna, in modo che solo
quando la forma si sovrappone con la sua immagine venga uno spottone
nero. Ma si dovrebbe poter ridurre il numero di operazioni prendendo gli
autovettori più importanti (ovvero quelli con autovalore più grande)
della matrice di autocorrelazione della forma cercata. Credo che questo
metodo si chiami "decomposizione ortogonale" e comunque è in relazione
con l'analisi delle componenti principali (di cui non so nulla). L'idea
comunque è semplice: se la forma è , diciamo , fatta da una croce con un
braccio di 2 pixel, una delle funzioni da applicare a tutti i punti
(quella che indentfica il centro) è: "dai valore 1 se sei circondata da
pixel neri lungo l'orizzontale e la verticale, e zero altrove".
Infine, se uno non vuole rompersi con la matrice di autocorrelazione,
un'altra possibilità è quella di filtrare l'immagine con delle funzioni
che danno "segnale" forte quando applicate alla forma. Non sarà un
segnale massimo come nel caso degli autovettori della matrice di
autocorrelazione, ma dovrebbe andare. Puoi provare con qualche base di
wavelet (ce ne sono di tanti tipi, ma più che altro ci sono le funzini
già fatte). Di nuovo, mai provate...
--
Franco Bagnoli <franco.bagnoli@unifi.it>
Dipartimento di Energetica & Centro Dinamiche Complesse
Universita' di Firenze, via S. Marta, 3 I-50139 Firenze, Italy.
Tel. +39 0554796592, fax: +39 0554796342
Maggiori informazioni sulla lista
flug-tech