Approfondimento 8 - edge detection e fuzzy

annuncio pubblicitario
Corso di Multimedia
A.A 2013/2014
Un immagine è rappresentata da una funzione bidimensionale
f(x,y). Il piano XY in cui stanno le coordinate dell’immagine è detto
DOMINIO SPAZIALE e le variabili x,y sono dette variabili spaziali o
coordinate spaziali.
Tutte le tecniche di elaborazione dell’immagine che illustreremo
(edge detection) vengono implementate nel dominio spaziale, che,
quindi, altro non è che il piano stesso che contiene i pixel di
un’immagine; esse, infatti, operano direttamente sui pixel di
un’immagine.
Una linea può essere vista come un segmento di edge in cui l’intensità
dello sfondo su entrambi i lati della linea è maggiore o minore
dell’intensità dei pixel della linea.
Gli individuatori di edge (edge detection) sono metodi di elaborazione
locale progettati per individuare i pixel della linea.
Gli strumenti che permettono di individuare le brusche variazioni locali
di intensità sono le derivate prima e seconda.
In particolare la derivata prima produce edge spessi, mentre la derivata
seconda evidenzia meglio i cambiamenti bruschi e quindi mette in
rilievo i dettagli sottili (incluso il rumore).
Il gradiente viene utilizzato per definire l'intensità e la direzione di un
edge in un certo punto (x,y). Tutto ciò è possibile perché il gradiente è
un vettore bidimensionale che ha la proprietà geometrica di puntare
nella direzione di massima variazione di f nel punto (x,y).
Il gradiente e' definito:
La direzione del gradiente è data dall’angolo:
calcolato rispetto all’asse x.
La direzione di un edge in un punto qualsiasi (x, y) è ortogonale alla
direzione di α(x,y) del vettore gradiente in quel punto.
I tre passi fondamentali per individuare gli edge sono:

APPLICARE LO SMOOTHING ALL'IMMAGINE PER RIDURRE IL RUMORE
PRESENTE

INDIVIDUARE I POTENZIALI PUNTI DI EDGE
 LOCALIZZARE GLI EDGE, CIOÈ SELEZIONARE TRA I PUNTI CANDIDATI
QUELLI CHE LO SONO VERAMENTE



L’individuazione dei bordi è largamente utilizzata quando si vuole
dividere l’immagine in aree corrispondente a oggetti differenti.
Rappresentare un immagine attraverso i suoi bordi permette che la
quantità di dati da memorizzare è ridotta significativamente mentre
la maggior parte delle informazioni vengono comunque mantenute.
L’individuazione dei bordi costituisce uno stadio preliminare
nell’analisi delle immagini.
Le tecniche utilizzate per questo scopo sono:
Esse sono definite avanzate in quanto tengono conto
come il rumore e la natura degli edge stessi.
di fattori
Marr e Hildreth intuirono che


le variazioni di intensità sono dipendenti dalla
scala
dell'immagine
e
quindi
la
loro
individuazione richiede l'uso di operatori di
dimensioni diverse.
un cambiamento di intensità improvviso da
origine a un picco o lungo la derivata prima o a
uno zero crossing nella derivata seconda.
Quindi le caratteristiche principali di un
operatore utilizzato per l'individuazione degli
edge dovrebbero essere:


essere un operatore differenziale capace di
calcolare un'approssimazione delle derivate
prima e seconda in ogni punto dell'immagine
poter essere regolato per agire a ogni scala
selezionata, in modo tale che gli operatori più
grandi possano essere utilizzati per individuare
gli edge sfocati, mentre gli operatori più piccoli
per individuare i
dettagli
più piccoli
scarsamente visibili.
Marr e Hildreth intuirono che il miglior operatore che rispettasse queste
condizioni fosse il filtro ∇ 2G dove:
∂2
∂2
+ 2
2
∂x
∂y
∇ : è l’operatore laplaciano
2
G: è la funzione gaussiana 2-D
G ( x, y ) = e
−
x2 + y2
2σ 2
con deviazione standard σ (a volte detto costante di spazio).
Mettendo insieme i due termini si ha come espressione finale:
∇ 2 G ( x, y ) =
x + y − 2σ
2
2
σ
4
Questa espressione è detta il Laplaciano
del Gaussiano ( LoG ) o, per via della
sua forma, operatore a sombrero.
2
−
e
x2 + y2
2σ 2
Mostriamo una maschera 5x5 che ne approssima la forma
0
0
-1
0
0
0
-1
-2
-1
0
-1
-2
16
-2
-1
0
-1
-2
-1
0
0
0
-1
0
0
(nella pratica si utilizzerebbe il
negativo di questa maschera).
Questa approssimazione non è
unica. Il suo scopo è quello di
catturare la forma essenziale della
funzione LoG.
Ci sono due aspetti fondamentali dietro la scelta dell’operatore
∇2G(x,y):
1. la parte gaussiana dell'operatore sfoca l'immagine, quindi riduce il
rumore sia nel dominio spaziale che in quello della frequenza ed è
quindi meno probabile che vengano introdotti artefatti non presenti
nell'immagine originale.
2. il laplaciano ha il vantaggio di essere isotropico, cioè invariante per
rotazione, e quindi ha le caratteristiche del sistema visivo umano e
risponde in egual modo alle variazioni di intensità in ogni direzione della
maschera, senza quindi la necessità di dover utilizzare maschere
multiple per calcolare la risposta più forte.
L'algoritmo di Marr-Hildreth può essere riassunto nei seguenti passi:

filtrare l’immagine di input con un filtro passa basso gaussiano nxn
ottenuto dalla funzione gaussiana 2D, cioè:
G ( x, y ) = e
−
x2 + y2
2σ 2
Le dimensioni del filtro discreto LoG nxn dovrebbero essere tali che n
sia il più piccolo intero dispari maggiore o uguale a 6σ (l’uso di valori
più grandi non influisce più di tanto sul risultato finale).

calcolare il laplaciano dell’immagine ottenuta nel passo precedente
utilizzando, ad esempio, la seguente maschera 3x3:
1
1
1
1
-8
1
1
1
1
trovare gli zero crossing dell’immagine del passo precedente per
determinare le posizioni degli edge.

Gli zero crossing sono la caratteristica fondamentale del metodo di
individuazione degli edge di Marr-Hildreth.
Una conseguenza importante negli utilizzare gli zero crossing per
l’individuazione degli edge è che gli edge che ne risultano sono spessi
1 pixel. Questa proprietà semplifica i passaggi successivi come ad
esempio il collegamento degli edge (edge linking).
Un metodo per trovare gli zero crossing in ogni pixel p dell’immagine
filtrata g(x,y) si basa sull’uso di un intorno 3 x 3 centrato in p. Uno zero
crossing in p implica la presenza di una delle configurazioni seguenti:
Se i valori di g(x,y) vengono confrontati su una linea(un metodo usato
comunemente) allora non solo i segni devono essere diversi, ma
anche il valore assoluto della loro differenza numerica deve
anche superare una data soglia prima di poter
dire che p è un pixel di zero crossing.
I = imread(‘inserisci-img.jpg');
X = rgb2gray(I);
A = edge(X,'log',t,σ);
% gli zero crossing utilizzeranno
% il metodo dell’intorno 3x3
% con soglia t
figure;
subplot(1,2,1); imshow(X); title(‘originale’);
subplot(1,2,2); imshow(A); title(‘log’);
la scelta di σ influisce sul tipo di dettaglio evidenziato
σ =0.5
t = 0.1
σ =1
t =0.1
σ=2
t =0.1
Si noti che, se posto il valore della soglia uguale a 0, tutti gli
edge formano dei percorsi chiusi. Questo effetto a “spaghetti” è
un serio inconveniente di questo metodo quando viene utilizzato
come valore soglia lo zero. Si possono evitare tali artefatti
utilizzando un valore di soglia positivo
t=0
σ=0.5
t=0.1
σ=0.5
t=0.5
σ=0.5
Una procedura a volte utilizzata, per tenere in conto che le variazioni di
intensità sono dipendenti dalla scala, è filtrare un’immagine con vari
valori di σ. Le mappe di edge di zero crossing che ne risultato vengono
poi combinate tenendo solo gli edge che sono comuni a tutte le mappe.
Marr e Hildreth notarono che è possibile approssimare il filtro LoG
tramite una differenza di gaussiane:
con σp> σq
Questo metodo può fornisce utili informazioni ma a causa della sua
complessità è utilizzato solo come strumento di prototipazione per
selezionare un appropriato valore di σ da utilizzare con un filtro
singolo.
Quindi il valore σ per il LoG dovrebbe essere scelto come
nell’equazione che segue in modo tale che Log e Dog abbiano gli
stessi zero crossing:
σ1 σ 2
σ 1 
ln 
σ =
σ 1 − σ 2 σ 2 
2
2
2
2
2
2
2
Un approccio analitico è stato invece
seguito da John F. Canny nel 1986,
che ha studiato in dettaglio il
comportamento
dell’operatore
gradiente applicato ad un contorno
rumoroso.
Il modello di bordo considerato è un
fronte ripido monodimensionale b(x)
cui è aggiunto rumore Gaussiano
bianco.
Si assume che l’individuazione del bordo sia realizzata tramite una
convoluzione con un filtro f(x) avente risposta impulsiva h(x)
antisimmetrica e nulla al di fuori di un intervallo [-W,W]. Un bordo è
individuato da un massimo locale della convoluzione tra l’immagine ed
il filtro.
Il filtro è scelto sulla base di tre criteri di efficacia definiti da Canny:
1.
2.
3.
Buona capacità di individuazione: l’operatore ha una bassa probabilità di
non individuare un bordo reale (elevata sensibilità – falsi negativi) ed una
bassa probabilità di individuare falsi bordi (elevata specificità – falsi
positivi)
Buona capacità di localizzazione: i punti evidenziati dall’operatore
dovrebbero essere quanto più vicini possibile al centro del bordo reale.
Unicità della risposta: l’operatore dovrebbe fornire una sola risposta in
corrispondenza di un bordo reale.
Ciò che contraddistingue il lavoro di Canny è la capacità di formalizzare
matematicamente i tre criteri citati e poi tentare di derivarne alcune
soluzioni ottimali. In pratica è difficile(se non impossibile) trovare una
soluzione in forma chiusa che soddisfi tutti i criteri precedenti.
L’algoritmo di individuazione degli edge di Canny consiste nei seguenti
passaggi fondamentali:


Sottoporre a smoothing l’immagine di input con un filtro
gaussiano.
Un problema primario negli algoritmi di riconoscimento dei contorni
è dato dalla presenza di rumore nelle immagini non processate, per
cui è necessario applicare all’immagine un filtro spaziale, tramite il
processo di convoluzione. Lo scopo è rimuovere le alte frequenze su
cui il rumore interferisce in maniera più problematica.
Calcolare la magnitudo e l’angolo del gradiente.
Calcolando il gradiente del risultato e, poi, utilizzando la magnitudo e
la direzione del gradiente otteniamo l’intensità e la direzione degli
edge in ogni punto.
2
2
M ( x, y ) =
gx + g y
 gx 
α ( x, y ) = tan  
 g y 
−1
con gx = ∂ fs/ ∂x e gy = ∂ fs/ ∂y.

Applicare la non maxima suppression all’immagine della
magnitudo.
Dato che è stata generata utilizzando il gradiente, M(x,y) contiene
ampie “creste” (detti ridges) attorno ai massimi locali. Il passo
successivo è l’assottigliamento di tali valori facendo uso, ad
esempio, del metodo non maxima suppression.
La non-maximum suppression si ottiene azzerando i valori dei
pixel non considerati parte del contorno, cioè i pixel il cui valore
di intensità non è maggiore di quello dei pixel adiacenti situati
lungo la direzione data dal valore α in quel punto. Il risultato è
un’immagine binaria con una linea sottile in corrispondenza dei
bordi degli oggetti nell’immagine.

1.
2.
3.
•
•
Utilizzare la doppia soglia e la connettività per individuare e
collegare gli edge.
Si fissano due soglie TL e TH con TH > TL.
Tutti i punti di valore maggiore di TH sono di edge.
Tutti i punti di valore compreso fra TH e TL saranno considerati edge
solo se è contigui ad un edge
Perché la scelta di due soglie?
Utilizzando un’unica soglia potremmo avere i seguenti problemi:
soglia troppo bassa: ci saranno alcuni falsi edge (detti falsi positivi)
soglia troppo alta: allora alcuni punti di edge saranno eliminati (falsi
negativi).
L’algoritmo di Canny cerca di migliorare questa situazione
utilizzando due soglie (thresholding mediante isteresi), scegliendo
una soglia bassa TL e una soglia alta TH.
I = imread(‘inserisci-img.jpg');
X = rgb2gray(I);
C= edge(X,‘canny’,[t1 t2],σ);
figure;
subplot(1,2,1); imshow(X); title(‘originale’);
subplot(1,2,2); imshow(C); title(‘canny);
– Alti valori di σ permettono di trovare edge a scale più grandi
– Piccoli valori di σ permettono di scovare i dettagli più fini
σ = 0.5
σ=1
σ=2
Processo utilizzato per ridurre i falsi punti di edge. Canny
suggerì che il rapporto tra le due soglie dovrebbe essere di circa
2 ( o 3) a 1.
t1 = 0.1
t2 = 0.2
t1 = 0.2
t2 = 0.4
t1 = 0.01
t2 = 0.5
Insiemi ordinari(crisp)
1
21
70
13
80
20
19
Insiemi ordinari(crisp)
1
21
70
giovani
13
80
20
19
non
giovani
Insiemi ordinari(crisp)
1
21
70
giovani
13
80
20
19
non
giovani
una persona di 20 anni è considerata giovane, ma una persona di
20 anni e un secondo non appartiene all’insieme delle persone
giovani. Questo problema è tipico degli insiemi crisp e limita l’uso
della teoria classica degli insiemi in molte applicazioni pratiche.
giovani
1
non
giovani
21
13
20
19
80
70
Quello che occorre è una maggiore flessibilità nel concetto di
“giovane” cioè, una transizione graduale da giovane a non
giovane. Ciò può essere fatto creando dei gradi di “giovinezza”.
Possiamo dire in questo modo se una persona è giovane,
relativamente giovane, giovane al 50%, non così giovane, e così
via. Questo tipo di imprecisioni (FUZZY) sono più in linea con il
comportamento degli uomini quando parlano di età in modo
indefinito.
La teoria degli insiemi fuzzy è
stata introdotta da L.A. Zadeh
più di 40 anni fa. Come
vedremo, gli insiemi fuzzy
forniscono un formalismo in
grado di trattare informazioni
imprecise.
Un insieme fuzzy A in Z è caratterizzato da una funzione di
appartenenza, µA(z), che associa a ogni elemento di Z un numero reale
nell’intervallo [0,1]. Il valore di µA(z) in z rappresenta il grado di
appartenenza di z in A. Più vicino è il valore di µA(z) all’unità, più alto è il
grado di appartenenza di z ad A e viceversa quando il valore di µA(z) si
avvicina allo zero.
ATTENZIONE al concetto ‘appartiene a ‘:
caso insieme ordinari:


un elemento appartiene ad un insieme
un elemento non appartiene ad un insieme
caso insiemi fuzzy:
tutti gli elementi z per cui µA(z) = 1 sono membri a pieno titolo
dell’insieme
 tutti gli elementi z per cui 0<µA(z)<1 appartengono in modo parziale
all’insieme
 tutti gli elementi z per cui µA(z) = 0 non sono membri dell’insieme

Insiemi fuzzy
(1,1)
1
19
13
(19,1)
21
(13,1)
80
22
20
(21,0.9)
(20,1)
(80,0)
(22,0.8)
90
(90,0)
Quindi, un insieme fuzzy è una coppia ordinata di valori di z e una
funzione di appartenenza corrispondente che assegna un grado di
appartenenza a ogni valore di z. In simboli:
A = {z, µA(z) | z ∈ Z}
Definizioni ‘Intersezione’: l’intersezione (AND) di due insiemi fuzzy A e
B, denotata da A AND B, è un insieme fuzzy I con funzione di
appartenenza
per tutti i valori di z ∈ Z.
Anche se la logica e la probabilità operano sullo stesso intervallo
di valori [0,1] è importante fare la distinzione tra i due concetti.
PROBABILITA’ => c’è il 50% di probabilità che una persona sia
giovane significa che semplicemente abbiamo il 50% delle probabilità di
sapere a quale insieme appartiene.
LOGICA FUZZY => il grado di appartenenza di una persona
all’insieme delle persone giovani è di 0.5, significa che una persona è
giovane fino ad un certo grado (0,5) o equivalentemente che questa è
una persona giovane “media”; non veramente giovane ma non troppo
vicina a essere non giovane.
In altre parole la logica fuzzy non è affatto probabilistica ed è
legata soltanto ai gradi di appartenenza a un insieme.
Valori d’input
FUZZIFICAZIONE
Rendere fuzzy gli input
scalare -> valore fuzzy
VALUTAZIONE IN
BASE ALLA REGOLA
output fuzzy
DEFUZZIFICAZIONE
valore fuzzy -> Scalare
Valori d’output
Quando si applicano gli insiemi fuzzy al filtraggio spaziale, l’approccio di
base è quello di definire le proprietà della regione dell’intorno locale che
‘catturi’ l’essenza di quello che ci si aspetta che i filtri individuano.
Possiamo sviluppare un algoritmo di estrazione dei contorni su un
semplice concetto fuzzy: se un pixel appartiene a una regione uniforme
rendilo bianco; altrimenti rendilo nero, dove bianco e nero sono insiemi
fuzzy.
Definiamo, per ogni regione 3x3, le differenze tra il pixel centrale
(chiamato z5) e ognuno dei vicini formando la sub-immagine di
dimensioni 3 × 3, dove di indica la differenza di intensità tra il vicino iesimo e il punto centrale (di = zi - z5, dove i valori z sono valori di
intensità).





sottoporre a smoothing l’immagine di input con un filtro gaussiano.
per ogni pixel dell’immagine creare un kernel 3x3 tramite l’utilizzo della
seguente formula:
di = zi – z5
Si noti che abbiamo usato le differenze di intensità dei 4 vicini e il punto centrale,
è possibile tramite un’estenzione diretta utilizzare gli 8 vicini.
rendere gli input di fuzzy assegnando il grado di appartenenza all’insieme zero.
applicare le formule di Fuzzy:
R1: SE d2 è zero AND d6 è zero, ALLORA z5
R2: SE d6 è zero AND d8 è zero, ALLORA z5
R3: SE d8 è zero AND d4 è zero, ALLORA z5
R4: SE d4 è zero AND d2 è zero, ALLORA z5
R5: altrimenti z5 è nero.
calcolando l’output dell’insieme fuzzy bianco.
è
è
è
è
bianco
bianco
bianco
bianco
applicare la defuzzificazione per tornare ai valori in scala di grigio.
X = imread(‘immagine');
A3 = rgb2gray(X);
%scelgo l'immagine
%la converto a scala di grigio
%applico il filtro gaussiano
h = fspecial('gaussian',[3 3],sigma);
A3 = imfilter(A3,h,'replicate');
F = double(A3);
%creo la matrice F che sarà
for i=2:size(A3,1)-1
% formata dai gradi di appartenenza
for j=2:size(A3,2)-1
% dei pixel all'insieme fuzzy zero
z5 = double(A3(i,j));
k = double(A3(i-1:i+1,j-1:j+1));
%creo il kernel temporaneo per la
for n1 = 1:3
%creazione delle differenze d'intensità
for n2 = 1:3
k(n1,n2) = k(n1,n2)-z5; % creo il kernel con le differenze di intensità
end
end
x1 = appartZeros(1,2,k);
x2 = appartZeros(2,3,k);
if (min(x1,x2) > 0)
%Applico la prima regola: SE d2 è zero
%AND d6 è zero, ALLORA z5 è bianco
% restituisce il grado di appartenenza del
% valore k(i,j) all'insieme fuzzy zero
% stabilisco il grado all’insieme zero
% se il valore è 1 allora appartiene a pieno titolo all'insieme
% piena forza
if (x1==1 && x2== 1)
c1 = 1;
else
c1 = min(x1,x2);
end
else
c1=0;
end
%analogamente tramite le altre tre regole ricavo c2,c3 e c4
F(i,j) = assegnaGrado(c1,c2,c3,c4);
%effettua una media artimetica per calcolare il
grado di appartenenza dell'insieme fuzzy zero
end
end
V = F;
for i=2:size(A3,1)-1
for j=2:size(A3,2)-1
% creo la matrice con gli output effettivi
%calcolo il baricentro
n = 1-F(i,j);
% il grado di appartenenza al nero
b = F(i,j);
% il grado di appartenenza al bianco
V(i,j) = round((0*n+255*b) / (n+b));
if( V(i,j) < t )
V1(i,j) = 0;
else
V1(i,j) = 255;
end
end
end
%trasformo l'immagine in binaria
INPUT
OUTPUT
INPUT
OUTPUT
MARR HILDRETH
CANNY
FUZZY
Implementazione
Semplice
Complessa
Semplice
Punto forza
Utilizzo degli ZC
Doppia sogliatura
La semplicità
Superiore a tutti gli
altri approcci:
migliore risultati
specialmente in
condizioni di rumore;
miglioramenti
significativi nei
dettagli degli edge
principali; maggiore
rigetto delle
caratteristiche
irrilevanti nei risultati
Estremamente
semplice,
rilevamento di
bordi e dei loro
orientamenti
Vantaggi
Generalmente
trovare le
posizioni corrette
dei bordi
I risultati
dipendono
Svantaggi
MARR HILDRETH
CANNY
FUZZY
dalla scelta di σ,
T
dalla scelta di σ, T1 e
T2
dalla scelta di σ,
T
Calcoli complessi.
Maggiore complessità
computazionale
Dispensiosa dal
punto di vista
computazione:il
processo di
fuzzificazione,
gli antecedenti di
ogni regola,
l’implicazione,
l’aggregazione e
la defuzzificazione deve
essere applicato
a ogni pixel
dell’immagine.
Malfunzionamenti
agli angoli, nelle
curve e dove la
funzione
dell'intensità
livello di grigio
varia.
Scarica