[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