up previous contents

Descrizione e rappresentazione di forme

Introduzione

La descrizione di forme e' importante sia per l'analisi che per la sintesi di immagini: la rappresentazione di forme ottenute tramite tecniche di analisi puo' successivamente essere usata per il riconoscimento di oggetti (pattern recognition), mentre in applicazioni di grafica computerizzata, le rappresentazioni di oggetti in 2 o 3 dimensioni, ottenute tramite tecniche di modellizzazione, possono venire usate per la sintesi delle immagini digitali corrispondenti.

Le forme in 2D possono venire descritte in due modi differenti:

il primo e' quello di usare il contorno dell'oggetto e le sue caratteristiche peculiari (es. lunghezza del contorno, curvatura, firma (signature), descrittori di Fourier). Questa metodologia e' direttamente correlata con gli algoritmi di edge e line detection. Gli schemi descrittivi risultanti vengono chiamati anche rappresentazioni esterne.

Il secondo modo e' quello di descrivere la regione (e non solo il contorno) occupata dall'oggetto sul piano immagine; tale metodo e' correlato con le varie tecniche di segmentazione dell'immagine (sogliatura, algoritmi di rilassamento, pixel labelling, descrizione di texture). Gli schemi descrittivi risultanti vengono chiamati anche rappresentazioni interne.

Nell'ambito di applicazioni di pattern recognition sono state usate in letteratura sia features a livello di regione (area, momenti, skeletons), sia a livello di contorno.

Gli schemi di rappresentazione di forme devono godere di alcune proprieta':

  1. unicita'. Cio' e' di importanza cruciale in pattern recognition, visto che un ben determinato oggetto deve avere una rappresentazione unica.
  2. completezza. la rappresentazione deve essere non ambigua.
  3. invarianza alle trasformazioni geometriche (traslazione, rotazione, scala)
  4. sensitivity. l'abilita' dello schema di rappresentazione di riflettere facilmente le differenze tra oggetti simili.
  5. astrazione dai dettagli, ossia la capacita' di rappresentazione delle features basilari di una forma, astraendo dai dettagli; e' importante per la robustezza nei confronti del rumore.

Tra gli schemi di rappresentazione esterna vi sono i cosiddetti chain codes o codici di Freeman

Chain Codes

I chain codes o codici di Freeman vengono usati per rappresentare un contorno tramite una sequenza connessa di segmenti di retta di lunghezza e direzione specificate. La direzione di ciascun segmento e' codificata usando uno schema di numerazione quale quello mostrato di seguito: tipicamente un 'chain code' contiene il pixel di partenza seguito da una stringa di caratteri:

Si provi ad esempio ad inserire nella finestra di testo caratteri corrispondenti allo schema di numerazione descritto: verra' disegnato il contorno corrispondente a partire dal centro. Per cancellare e' sufficiente cliccare sul pulsante di reset.

Le immagini digitali vengono di solito acquisite e successivamente processate in un formato a griglia ugualmente spaziata nelle direzioni x ed y, cosicche' un 'chain code' potrebbe essere generato seguendo un contorno, ad esempio in senso orario, ed assegnando una direzione ai segmenti che uniscono ciascuna coppia di pixel.

Tale metodo di solito non viene usato in questi termini per due motivi:

  1. la catena risultante e' molto lunga;
  2. ogni piccola variazione del contorno dovuta a rumore causa cambiamenti nel codice non necessariamente correlati alla forma del contorno stesso.

Un approccio usato piuttosto di frequente per aggirare l'ultimo problema e' quello di ricampionare il contorno usando una griglia a maglie piu' larghe. Quindi, via via che il contorno viene percorso, vengono scelti i punti di frontiera sulla nuova griglia in funzione della distanza dal contorno originario dei vari nodi.

E' importante sottolineare che il 'chain code' di un contorno dipende dal punto iniziale.

Si puo' procedere tuttavia ad una normalizzazione in modo piuttosto semplice: ogni 'chain code' generato partendo da una posizione arbitraria puo' essere trattato come una sequenza circolare di numeri ridefinendo il punto di inizio come quello che rende la sequenza risultante di numeri un intero di grandezza minima; cio' permette di soddisfare il requisito dell'unicita' della rappresentazione che puo' risultare essenziale in applicazioni di 'pattern recognition'.

I 'chain code' sono anche invarianti alla traslazione.

E' possibile anche normalizzare rispetto alla rotazione usando la differenza prima del 'chain code' invece del codice stesso. Tale differenza viene ottenuta semplicemente contando (in senso antiorario) il numero di direzioni che separano due elementi adiacenti del codice.

Ad esempio, la differenza prima della catena 10103322 e' 3133030.

Se si sceglie di trattare il codice come sequenza circolare, allora il primo elemento della differenza viene calcolato considerando l'ultimo ed il primo elemento della catena.

La normalizzazione in termini di scala (dimensione) dell'oggetto puo' essere ottenuta cambiando le dimensioni della griglia di campionamento.

I 'chain codes' sono un buon strumento di compressione della descrizione di un contorno, considerato che ogni elemento della catena puo' essere codificato con soli 3 bit (8 direzioni possibili) invece dei 2 byte richiesti (caso immagine 256x256) per memorizzare le coordinate (x,y) di ogni pixel del contorno.

I 'chain codes' possono venire usati anche per calcolare certe features degli oggetti quali ad esempio perimetro, altezza, larghezza ed area.

I contorni degli oggetti possono essere percorsi tramite uno dei vari algoritmi di contour following disponibili, come per esempio il Papert's turtle [2] e puo' esserne quindi ricavato il 'chain code' corrispondente.

Si provi a disegnare con il mouse un contorno qualunque, partendo dal punto centrale e scegliendo ad ogni passo una delle 8 direzioni consentite; nella finestra di testo comparira' il 'chain code' corrispondente.