LETTURA E DECODIFICA



Per la decodifica delle immagini acquisite, è stato elaborato un software che implementa tutta una serie di algoritmi che consentono di risolvere i problemi di lettura riscontrati.
Tale software è stato realizzato in due versioni, una fnzionante su PC e l’altra su smart phone (Android)



Individuazione della matrice

Durante le prime fasi di studio del DataMatrix si è subito notata la necessità di costruire un sistema di orientamento e posizionamento dello schema in fase di lettura: infatti il software ha la necessità di posizionare la matrice correttamente per acquisire i valori dei bit nella giusta sequenza. Nel DataMatrix il posizionamento viene effettuato per mezzo di una struttura a forma di “L” realizzata con quadretti neri sulla prima colonna e l’ultima riga, e di un’altra struttura stavolta composta da quadretti bianchi e neri alternati sulla prima riga e l’ultima colonna: in questo modo si riesce a posizionare la matrice correttamente ed anche a risalire al numero di righe e di colonne, ma si vengono a perdere due righe e due colonne che non possono contenere dati.
Per il CDM si è pensato ad un sistema che non comportasse una così ampia perdita di spazio, e quindi non è stata utilizzata una struttura simile a quella del DataMatrix, ma sono stati “segnati” i quattro angoli della matrice con tre quadretti neri ed uno rosso, in modo che la posizione possa essere ricavata univocamente. Così facendo si vengono a perdere soltanto quattro bit di informazione e non due righe e due colonne. Il software individua i quattro angoli, ne valuta il colore ed in relazione all’angolo formato dal quadretto rosso con i neri, calcola l’angolo di rotazione per il corretto allineamento della matrice.
Per quanto riguarda la corretta lettura dei quadretti si è deciso di eseguirne la media su una parte della superficie, non troppo grande, per evitare di invadere i quadretti adiacenti, né troppo piccola, per evitare che una acquisizione di bassa qualità possa compromettere l’esattezza dei dati. L’individuazione dell’area su cui eseguire la media viene fatta utilizzando i gradienti di colore cioè valutando le zone in cui c’è una variazione di colore. In questo modo, con l’aiuto anche dei dati relativi al numero di righe e colonne, si riescono ad individuare i centri dei quadretti e degli intorni di colore abbastanza costante su cui effettuare la media.

Problemi di luminosità

In condizioni di scarsa luminosità, l’acquisizione della scacchiera attraverso dispositivi che non sfruttano sorgenti luminose proprie (es. scanner) come webcam o telefoni cellulari può comportare un errato riconoscimento dei colori e quindi una errata decodifica o addirittura l’assenza della decodifica. Le anomalie più frequenti sono dovute all’acquisizione dei quadretti verdi e blu come neri, e dei bianchi come rossi.
Da valutazioni effettuate sui dati acquisiti eseguite sui tre canali è risultato che i valori non erano spaziati tra 0 e 255, ma bensì contenuti in uno spazio assai ridotto, di ampiezza approssimativamente pari a 150. Di conseguenza, per ottenere un risultato corretto è stato necessario implementare un algoritmo, semplice, per riscalare i valori su tutta l’ampiezza dei canali. Dati k l’insieme dei valori su ogni singolo canale, dst il valore vero del colore sul canale e src il valore letto, si ha per ogni valore su ogni canale:



Con questo algoritmo il valore più alto letto viene trasformato in 255, mentre il più basso in 0, e tutti gli altri riscalati all’interno dell’intervallo.
Dopo l’introduzione di tale procedura, tra la fase di acquisizione e quella di decodifica, si è riscontrato un sostanziale miglioramento del sistema, valutabile non solo da una decodifica più corretta, ma anche da un incremento dei quadretti letti correttamente anche in blocchi che danno comunque origine ad errori.

Algoritmo di correzione degli errori

Una volta eseguiti i controlli di identificazione e posizionamento della matrice viene fatta la lettura dei bit: questi vengono raggruppati in base ai parametri dell’algoritmo di lettura, e processati mediante un algoritmo che esegue il confronto del codice letto con i codici validi (codici di Hamming). Se viene trovata una corrispondenza il codice viene ritenuto valido e decodificato, altrimenti si ipotizza la presenza di un errore, e l’algoritmo effettua dei confronti volti alla correzione di tale errore. In questo modo si riesce ad individuare e correggere un errore singolo, e ad individuare errori doppi.


Intervento cofinanziato POR CReO FESR 2007-2013 Linee 1.5 e 1.6


Sinerlab s.r.l. | Via Trento 12 - 51039 – Quarrata (PT) | Tel. e Fax 0573 73039 www.sinerlab.it