Riconoscimento dei contorni

Ilriconoscimento dei contorni(edge detection) è utilizzato allo scopo di marcare i punti di un'immagine digitalein cui l'intensità luminosacambia bruscamente. Bruschi cambiamenti delle proprietà di un'immagine sono di solito il sintomo di eventi o cambiamenti importanti del mondo fisico di cui le immagini sono la rappresentazione. Questi cambiamenti possono essere ad esempio: discontinuità della profondità, discontinuità dell'orientamento delle superfici, modifica delle proprietà dei materiali, e variazioni dell'illuminazione proveniente dall'ambiente circostante. Il riconoscimento dei contorni è un campo di ricerca deltrattamento delle immaginie dellavisione artificiale, in particolare della branca delriconoscimento delle caratteristiche(feature extraction).
L'operazione di riconoscimento dei contorni genera immagini contenenti molte meno informazioni rispetto a quelle originali, poiché elimina la maggior parte dei dettagli non rilevanti al fine dell'individuazione dei contorni, conservando invece le informazioni essenziali per descrivere la forma e le caratteristichestrutturali e geometrichedegli oggetti rappresentati.
Esistono molti metodi per riconoscere i contorni, ma la maggior parte può essere raggruppata in due categorie: metodi basati sulla ricerca (search-based) e metodi basati sull'attraversamento dello zero (zero-crossing). I metodi basati sulla ricerca riconoscono i contorni cercando i massimi ed i minimi delladerivatadel primo ordine dell'immagine, di solito cercando la direzione in cui si ha il massimo gradiente locale. I metodizero-crossingcercano i punti in cui la derivata del secondo ordine passa per lo zero, solitamente la funzione laplaciana o un'espressione differenziale di una funzione non-lineare.
I contorni possono esseredipendenti dal punto di osservazione, quando possono cambiare al cambiare del punto di osservazione, rispecchiando la disposizione e la configurazione geometrica dell'ambiente circostante, come, ad esempio, oggetti che si frappongono l'un l'altro, oppure possono essereindipendenti dal punto di osservazione, quando rispecchiano proprietàintrinsechedegli oggetti stessi, come ad esempio segni tracciati sulle superfici oppure forme geometriche delle superfici degli oggetti. In due o più dimensioni bisogna tener presenti gli effetti dellaprospettiva.
Un tipico contorno potrebbe essere, ad esempio, il confine fra un'area di colore rosso ed una gialla, oppure unalineacon spessore di pochipixele di colore diverso rispetto ad uno sfondo uniformemente colorato. In quest'ultimo caso i contorni sono per l'esattezza due, uno per ciascunlatodella linea. I contorni giocano un ruolo molto importante in molte applicazioni di computer vision, anche se, in tempi recenti, in questo campo sono stati fatti sostanziali progressi utilizzando anche altri approcci, che non usano il riconoscimento dei contorni come step preliminare dell'elaborazione.
Nelle immagini reali i contorni non sono quasi mainetti, ma sono solitamente affetti da una o più delle seguenti distorsioni:
Il modello qui illustrato, sebbene non perfetto, ha unafunzione erroreerf{\displaystyle \operatorname {erf} }che può essere usata per creare un modello matematico degli effetti dello sfuocamento sufficiente preciso per descrivere molte applicazioni pratiche. Un'immagine mono-dimensionalef{\displaystyle f}con un contorno posizionato esattamente in0{\displaystyle 0}può essere rappresentata quindi dalla seguente funzione:
f(x)=Ir−Il2(erf⁡(x2σ)+1)+Il{\displaystyle f(x)={\frac {I_{r}-I_{l}}{2}}\left(\operatorname {erf} \left({\frac {x}{{\sqrt {2}}\sigma }}\right)+1\right)+I_{l}}
Alla sinistra del contorno l'intensità luminosa valeIl=limx→−∞f(x){\displaystyle I_{l}=\lim _{x\rightarrow -\infty }f(x)}, e a destraIr=limx→∞f(x){\displaystyle I_{r}=\lim _{x\rightarrow \infty }f(x)};σ{\displaystyle \sigma }è chiamatoscala di sfuocaturadel contorno.
Notare chef{\displaystyle f}può essere definita come unaconvoluzionef=gσ∗u{\displaystyle f=g_{\sigma }*u}dovegσ{\displaystyle g_{\sigma }}è  ilkernel gaussianoaventedeviazione standardσ{\displaystyle \sigma }, eu{\displaystyle u}è unafunzione a gradinidefinita come:
u(x):={Il,sex≤0Ir,altrimenti{\displaystyle u(x):=\left\{{\begin{matrix}I_{l},&\mathrm {se} \;x\leq 0\\I_{r},&\mathrm {altrimenti} \end{matrix}}\right.}
Basandosi sul fatto che un contorno consiste in un cambiamento di intensità dell'immagine - che ha luogo gradualmente su un certo numero di pixel - gli algoritmi di riconoscimento solitamente calcolano laderivatadi questo cambiamento di intensità. Per semplificare la trattazione consideriamo il riconoscimento di un contorno eseguito percorrendo una linea di pixel - la cui intensità è indicata nella tabella seguente. Esaminando i cambiamenti di intensità fra ciascun pixel ed il successivo, è intuitivo ipotizzare la presenza di un contorno fra il quarto ed il quinto pixel:
Trovare un criterio univoco che stabilisca quanto ampia deve essere la differenza di intensità fra due pixel per poter dire che fra di essi sia presente un contorno, non è tuttavia sempre problema di facile soluzione. Questa è una delle ragioni per cui il riconoscimento dei contorni è spesso difficile, a meno che gli oggetti presenti sulla scena siano di forma geometricamente molto semplice e le condizioni di illuminazione possano essere controllate ed ottimizzate.
Molti algoritmi di riconoscimento dei contorni operano sulla derivata del primo ordine dell'intensità luminosa - che corrisponde al gradiente dell'intensità dell'immagine di partenza. Basandosi su questo output si può andare alla ricerca dei valori di picco del gradiente dell'intensità.
SeI(x) rappresenta l'intensità del pixelx, eI′(x) rappresenta la derivata prima (gradiente dell'intensità) al pixelx, si ottiene:
Per ottenere i migliori risultati la derivata prima può essere calcolata medianteconvoluzionedei dati originari con una maschera:
Altri operatori per il riconoscimento dei contorni si basano sul calcolo della derivata seconda dell'intensità, che corrisponde grosso modo alla rapidità di cambiamento del gradiente. Nel caso ideale - in cui l'intensità varia in modo continuo - la derivata seconda si annulla nei punti di massimo del gradiente. Questo metodo, d'altra parte, funziona bene solo se l'immagine è rappresentata in scala opportuna. Come prima spiegato, una linea corrisponde ad un doppio contorno, quindi si avrà un gradiente di intensità su un lato della linea, subito seguito da un gradiente di valore opposto sul lato opposto. Per questo motivo ci si può attendere di avere grandi variazioni del gradiente in immagini contenenti linee.
SeI(x) rappresenta il valore dell'intensità nel puntox, eI"(x) è la derivata seconda nel puntox, allora vale la relazione:
Come già detto, la maggior parte degli algoritmi usano una maschera di convoluzione per elaborare più velocemente le immagini:
Dopo aver calcolato la derivata, il passo successivo è applicare unasogliatura, per valutare i punti dell'immagine in cui potrebbe essere presente un contorno. Più bassa è la soglia, più linee verranno individuate, ed i risultati diverranno sempre più affetti da disturbi causati dalrumoredi fondo, con conseguenti maggiori possibilità di falsi riconoscimenti. Più alta è la soglia e più ci sarà il rischio di non rilevare contorni formati da linee sottili o segmentate. Per cercare di ovviare a questi due opposti inconvenienti si usa spesso il metodo dellasogliatura adattivaconisteresi, che usa soglie multiple per trovare i contorni. Si comincia ad applicare la soglia superiore per trovare il punto iniziale di una linea di contorno, dopodiché si cerca il percorso della linea pixel per pixel, attribuendo i pixel man mano incontrati al contorno ogni volta che si supera la soglia inferiore. La ricerca si arresta solamente quando il valore cade al di sotto della soglia inferiore. Questo approccio si basa sull'ipotesi che i contorni sono normalmente costituiti da linee continue, e consente di percorrere la parte meno marcata di una linea di contorno riducendo il rischio che tutti i pixelestraneisiano erroneamente attribuiti al contorno.
Attualmente l'algoritmo di Canny- e le sue varianti - sono il metodo più usato per il riconoscimento dei contorni. Nessuno dei numerosi altri metodi proposti successivamente si è finora dimostrato più efficace, salvo che in applicazioni molto specifiche. Nel suo lavoro originario, Canny si proponeva di trovare un filtro che eliminasse idisturbipresenti nell'immagine (ovvero un filtro dismoothing), filtro che potesse essere ben approssimato da unakernel gaussianodel primo ordine. Canny introdusse anche la nozione disoppressione dei non-massimi, cioè l'assunto che i punti dei contorni sono quelli in cui il gradiente raggiunge il valore massimo nella direzione stimata del gradiente. La ricerca deinon-massimiin una griglia di punti può essere implementata calcolando la direzione del gradiente con la derivata prima, arrotondando la direzione trovata a multipli di 45°, e infine confrontando con i valori di ampiezza del gradiente nella direzione calcolata. Un metodo più accurato per ricercare i contorni con precisione maggiore del pixel è usare la seguente espressione differenziale per trovare il passaggio per lo zero della derivata del secondo ordine nella direzione del gradiente (Lindenberg 1998)
che soddisfa l'uguaglianza del segno della derivata del terzo ordine nella stessa direzione
doveLx{\displaystyle L_{x}},Ly{\displaystyle L_{y}}...Lyyy{\displaystyle L_{yyy}}rappresentano le derivate parziali calcolate in unarappresentazione spaziale multi-scala(scale-space)L{\displaystyle L}ottenuta sfuocando l'immagine originaria con un kernel gaussiano. 
Con questo procedimento, i contorni saranno ottenuti automaticamente come curve continue con precisione del sub-pixel. Anche lasogliatura con isteresipuò essere applicata a segmenti sub-pixel.
La ricerca dei contorni è complicata dai falsi riconoscimenti provocati da disturbi presenti nelle immagini. Per ridurre il numero dei falsi contorni si possono sottoporre preliminarmente le immagini a tecniche diriduzione dei disturbi(noise reduction).