La maggior parte dei programmi di grafica offrono, tramite l’impiego di filtri, la possibilità di individuare e tracciare i contorni presenti all’interno di un’immagine, operazione chiamata di edge detection. L’algoritmo per questa operazione presenta dei calcoli matematici molto complessi, ma la sua implementazione è veramente semplice. In questo articolo descriveremo due di queste procedure, quella di Cross e di Sobel.
Questi due algoritmi e le loro varianti si basano su una semplice operazione matematica chiamata convoluzione. In ambito di computer grafica la convoluzione consiste nel posizionare una piccola matrice chiamata kernel o elemento strutturale sopra un pixel dell’immagine di partenza, ogni elemento del kernel viene moltiplicato con il pixel dell’immagine che si trova sotto e tutti i risultati delle varie moltiplicazioni vengono sommate tra di loro; il risultato è il valore dell’operazione di convoluzione. Ad esempio se il kernel fosse applicato al primo pixel dell’immagine, il risultato sarebbe:
R = A*X + B*Y + F*J + G*K
In questo caso il kernel è 2×2 ( è raro utilizzare kernel maggiori di 3×3 ) ed il risultato R verrebbe piazzato nel primo pixel dell’immagine di destinazione finale; reiterando questo processo su tutti i pixel dell’immagine di partenza si vanno a calcolare tutti i pixel dell’immagine finale.
Gli operatori di Robert Cross sono due semplici kernel di dimensioni 2×2 ciascuno contenenti i valori +1 o -1 ( figura 1a ), il secondo kernel non è altro che il primo ruotato di 90 gradi. In teoria i due kernel andrebbero applicati separatamente, per ciascun punto il valore calcolato è dato da:
G = sqrt( GX*GX + GY*GY )
Questo modo di procedere però è troppo oneroso per la presenza della radice quadrata, quindi si fondono i due kernel in quello risultante ( figura 1b ) ed in questo modo rimangono solo moltiplicazioni e somme. Il principale vantaggio del metodo di Cross è un’estrema velocità di esecuzione, però risulta abbastanza sensibile al cosiddetto rumore, che si verifica quando all’interno dell’immagine sono sparsi dei pixel che non appartengono alla figura originale, ma che dipendono da fattori artificiali: immagine con poca risoluzione, mezzo di cattura imperfetto o caratteristiche ambientali non ottimali.
La particolare sensibilità al rumore data dall’algoritmo di Cross deriva fondamentalmente anche dalle ridotte dimensioni del kernel, sotto questo aspetto gli operatori di Sobel risultano più performanti, non solo per i differenti valori, ma anche per le maggiori dimensioni. Il kernel orizzontale e verticale hanno infatti dimensioni 3×3 ( figura 2 ), anche in questo caso il procedimento è identico: devono essere applicati separatamente all’immagine sorgente, in questo modo però ci ritroviamo una radice quadrata che possiamo eliminare con l’operazione vista prima. Data inoltre la grandezza del kernel occorre prendere qualche piccolo accorgimento pratico, ad esempio non si considerano i bordi esterni dell’immagine. Sebbene questo metodo sia più lento è anche il più ottimizzato a dare un contorno più delineato ed una minore sensibilità al rumore, così come potete notare dai risultati dell’immagine sopra. Un’implementazione in linguaggio C dell’algoritmo di Sobel potete studiarla in questa pagina.
In questo articolo abbiamo visto ed analizzato due semplici tecniche di edge detection o tracciamento dei contorni delle immagini, spesso utilizzate nelle più comuni applicazioni di editing grafico. La bontà del risultato non dipende solo però dagli algoritmi utilizzati, ma anche e soprattutto dalla qualità e dalle fattezze dell’immagine originale.
Sono arrivato alla convinzione che un abbonamento per tutti i miei software gestionali sia il…
MerciGest è un software per la gestione del magazzino completamente gratuito. Continua a leggere→
In ufficio può capitare di doversi allontanare dal proprio posto di lavoro, ecco che allora…
In questo articolo vedremo quando è più o meno utile togliere la corrente ad un…
Dopo la pausa invernale dovuta al lavoro che devo fare per sostentarmi, eccomi di nuovo…
Vediamo come eliminare i files direttamente da Windows senza utilizzare il cestino. Continua a leggere→