Che cos'è un codice a catena?
Nella computer grafica e nell'elaborazione delle immagini, un codice a catena è un algoritmo utilizzato per codificare i contorni di un oggetto in un'immagine in bianco e nero o monocromatica. La sequenza di codici risultante può descrivere come disegnare il contorno dell'oggetto rispetto all'immagine in cui si trova, oppure può essere una raccolta di direzioni relativa alla posizione sul contorno in cui è iniziato l'algoritmo, essenzialmente fornendo passaggi che può essere seguito per ridisegnare l'oggetto. Questi codici possono essere normalizzati secondo una formula e quindi confrontati con un altro codice catena per determinare se due oggetti sono identici. Un codice a catena può essere utilizzato per isolare oggetti in un programma di visione artificiale o segmentazione di immagini nell'elaborazione di immagini, sebbene più comunemente possa essere utilizzato in programmi di riconoscimento ottico dei caratteri (OCR).
Sebbene esistano diversi algoritmi consolidati per un codice a catena, il concetto di base è lo stesso in ciascuno di essi. Innanzitutto, si trova il bordo di un oggetto, generalmente spostando pixel per pixel attraverso un'immagine raster. Una volta individuata, la posizione viene registrata e vengono rilevati i bordi circostanti. A seconda che l'algoritmo di rilevamento si sposterà in senso orario o antiorario, la posizione corrente viene spostata in una direzione o nell'altra lungo il bordo fino a quando non ritorna nella posizione originale.
Ogni volta che la posizione corrente si sposta, un numero viene registrato nel codice catena. Questo numero indica generalmente la direzione che è stata spostata lungo il bordo dell'oggetto. Ad esempio, se un algoritmo di codice catena segue un bordo dritto da destra a sinistra, ogni volta che il bordo viene tracciato a sinistra, il codice numerico per sinistra viene aggiunto alla fine del codice. Il codice risultante è una stringa di numeri in cui, se la sequenza è seguita da un punto di partenza arbitrario e un pixel posizionato ad ogni passo, il contorno dell'oggetto verrebbe ridisegnato.
Una volta completata la stringa di numeri che compongono il codice, è possibile applicare diversi algoritmi diversi per facilitare il confronto con altre sequenze di codici a catena. Innanzitutto, il numero viene normalizzato ruotando il numero iniziale fino a quando non viene determinato il valore intero più basso. In questo modo, è possibile confrontare due oggetti con lo stesso contorno, indipendentemente da dove su ogni oggetto è iniziata la codifica.
Esistono altre versioni più complesse dell'algoritmo del codice catena. Questi includono la codifica basata su vettori in cui il contorno di un oggetto è descritto da una sequenza di coordinate collegate da linee, sebbene questo metodo possa risultare in perdita se utilizzato su contorni dettagliati. Esiste anche una versione dell'algoritmo che utilizza la codifica run-length (RLE) per comprimere ulteriormente i codici per oggetti eccezionalmente grandi o complessi in modo che possano essere memorizzati in modo più efficiente.