Sunteți pe pagina 1din 17

PI, curs 4

II. Operaţiuni spaţiale (bazele filtrării spaţiale)


http://www.imageprocessingbasics.com/image-convolution-filters/
https://www.southampton.ac.uk/~msn/book/new_demo/

4. Filtre spaţiale de accentuare a contururilor

Operaţia de accentuare a contururilor se utilizează în scopul punerii în evidenţă a liniilor


şi arcelor conţinute într-o imagine. Deci prin accentuarea contururilor se pun în evidenţă detaliile
dintr-o imagine.
Aspecte legate de contururi:
- Conturul reprezintă o schimbare a nivelelor de gri cu o anumită lungime şi o localizare
precisă;
- Variaţia nivelului de gri de-a lungul conturului este mică, dar variaţia la traversarea
conturului este semnificativă;
- Conturul are o direcţie care este măsurabilă (direcţia tangentei la contur).
Estomparea unei imagini se obţine în domeniul spaţial prin mediere, operaţie ce este
similară integrării. Prin urmare, accentuarea contururilor prin tehnici spaţiale se obţine prin
operatori de derivare spaţială.
Considerăm o funcţie continuă de o variabilă f ( x ) şi analizăm derivatele de ordinul 1 şi
2 într-o zonă în care au loc variaţii bruşte ale funcţiei (fig. 1). (vezi ultima figura din curs – fig.
3.36 Gonzales)
Se observă că prima derivată produce o îngustare a contururilor. A doua derivată are un
răspuns mai puternic, producând de fapt un dublu răspuns la o variaţie în rampă a nivelelor de gri.
A doua derivată localizează mai bine conturul. Dezavantajul este că amplifică zgomotul în raport
cu prima derivată. Se observă că putem accentua un contur dacă din imaginea inițială scădem a
doua derivată, adică realizăm operația f ( x ) − f ′′ ( x ) (operație care nu este reprezentată).
Considerăm o funcţie imagine f ( x, y ) continuă
⇒ f ′( x, y ) - corespunde gradientului funcţiei
f ′′( x, y ) - corespunde laplacianului funcţiei.

1
PI, curs 4

Fig. 1

2
PI, curs 4

Fig. 1’ Derivatele de ordin 1 si 2 în cazul unei muchii in care


intensitatea variază în rampă

Gradientul imaginii

 ∂f ( x, y ) 
∂f ( x, y )
→ ∂f ( x, y )
→  ∂x  → →
∇f ( x , y ) = i+ j=  =Gx i + G y j (1)
∂x ∂y  ∂f ( x, y ) 
 ∂y 

Amplitudinea (mărimea gradientului) este:

2
 ∂f   ∂f 
2

∇f =   +   = G x2 + G y2 (2)
 ∂x   ∂y 

Ceea ce interesează este direcţia pentru care apare variaţia maximă a funcţiei. Pentru a afla
această direcție facem trecerea de la coordonate carteziene { x, y} la coordonate polare {r , ϕ} :
x = r cos ϕ , y = r sin ϕ .

∂f ∂f ∂x ∂f ∂y ∂f ∂f
= + = cos ϕ + sin ϕ
∂r ∂x ∂r ∂y ∂r ∂x ∂y

Impunem condiţia de maxim după ϕ :

∂  ∂f  ∂f ∂f
 = − sin ϕ + cos ϕ =
0.
∂ϕ  ∂r  ∂x ∂y

3
PI, curs 4

Deci, variaţia maximă este în direcţia:

 ∂f 
 ∂y 
ϕ ( x, y ) = arctg  . (3)
∂f 
 ∂x 
 

În aplicaţii, pentru a nu lucra cu radicali, se aproximează mărimea gradientului prin:

∇f = G x + G y (4)
sau
∇f = {
max Gx , G y . }

Aproximarea discretă a gradientului:

∂f f ( x + ∆x, y ) − f ( x, y )
Gx = ≈
∂x ∆x
(4’)
∂f f ( x, y + ∆y ) − f ( x, y )
Gy = ≈
∂y ∆y

Deoarece ∆x = ∆y = 1 , ⇒

G x = f ( x + 1, y ) − f ( x, y )
(5)
G y = f ( x, y + 1) − f ( x, y )

Aceste aproximări corespund „convoluţiei” funcţiei imagine cu măştile:

 −1 
M1=  −1 1 şi M2 =  
 1 

Observaţii: a) poziţia pixelului curent corespunde primului element al măştii.


b) dacă dorim să avem şi în acest caz măşti de dimensiune impară, măştile de mai sus
pot fi considerate în forma:
 0 
 
=M1 0 −1 1 şi M2=  −1 
 1 
 

4
PI, curs 4

Se va exemplifica derivarea numerica cu fisierul „Derivative of a Function.pdf”


Observație: De fapt, ţinând cont de definiţia convoluţiei, măştile sunt inversate:

 1 
 
M1 1
= −1 0  şi M2=  −1  .
 0 
 

Alte aproximări pentru amplitudinea gradientului:

O regiune din imaginea de prelucrat (funcţia f ( x, y ) ) de dimensiune 3 × 3 o notăm:

x z 4 ↔ f ( x, y )
z 0 ↔ f ( x − 1, y − 1)
 z0 z1 z2 
  z1 ↔ f ( x, y − 1)
 z3 z4 z5 
y
  z 2 ↔ f ( x + 1, y − 1)
 z6 z7 z8 

z8 ↔ f ( x + 1, y + 1)

Aproximarea făcută anterior este:

Gx = ( z5 − z 4 ) , G y = ( z7 − z4 ) (6)

Aproximarea Roberts (gradientul cruce):

G x = z8 − z 4 = f ( x + 1, y + 1) − f ( x, y )
(7)
G y = z 7 − z 5 = f ( x, y + 1) − f ( x + 1, y )

G x se implementează prin masca:

5
PI, curs 4

 −1 0
P= 
 0 1

respectiv G y prin masca:

0 −1
R= 
1 0

Observaţie: poziţia pixelului curent corespunde primului element al măştii.


Cele două măşti implementează aproximarea gradientului:

∇f ≈ z 8 − z 4 + z 7 − z 5

(8)
Aproximarea Sobel

  z0 z1 z2  
  
- utilizează măști de dimensiunea 3 × 3   z3 z4 z5  , z 4 ↔ f ( x , y)  :
   
  z6 z7 z8  

Gx = ( z6 + 2 z7 + z8 ) − ( z0 + 2 z1 + z2 ) = f ( x − 1, y + 1) + 2 f ( x, y + 1) + f ( x + 1, y + 1) −
f ( x − 1, y − 1) − 2 f ( x, y − 1) − f ( x + 1, y − 1)
(9)
G y = ( z2 + 2 z5 + z8 ) − ( z0 + 2 z3 + z6 ) = f ( x + 1, y − 1) + 2 f ( x + 1, y ) + f ( x + 1, y + 1) −
f ( x − 1, y − 1) − 2 f ( x − 1, y ) − f ( x − 1, y + 1)

Măştile corespunzătoare sunt:

 −1 −2 −1
 
Gx →  0 0 0 
1 2 1
 
(10)
 −1 0 1 
 
G y →  −2 0 2 
 −1 0 1 
 

Ideea de a folosi ponderea 2 este de a obţine o anumită netezire prin mărirea importanţei
centrului.

6
PI, curs 4

Fig. 2. Aplicarea aproximării Sobel a gradientului: imaginea originală (stânga), accentuarea


muchiilor pe orizontală (mijloc), accentuarea muchiilor pe verticală (dreapta)

Obs: Suma coeficienţilor în măştile care implementează gradientul este 0, indicând faptul
că acolo unde funcţia imagine este constantă rezultatul aplicării produsului de convoluţie cu
masca respectivă este zero, similar unui operator de derivare.

Aproximarea Prewitt

Gx = ( z6 + z7 + z8 ) − ( z0 + z1 + z2 )
(11)
G y = ( z2 + z5 + z8 ) − ( z0 + z3 + z6 )

Măştile corespunzătoare sunt:

 −1 −1 −1
 
Gx →  0 0 0 
1 1 1
 
(12)
 −1 0 1
 
G y →  −1 0 1
 
 −1 0 1

Fig. 3. Aplicarea aproximării Prewitt a gradientului: imaginea originală (stânga), accentuarea


muchiilor pe orizontală (mijloc), accentuarea muchiilor pe verticală (dreapta)

7
PI, curs 4

Gradientul este folosit în special în accentuarea contururilor necesară pentru operaţiile din
procesul de segmentare. Gradientul este folosit şi în verificările industriale la depistarea
defectelor unor piese.

Exemple:

Fig. 4

8
PI, curs 4

Fig. 5

Fig. 6

Obs. Filtrele de dimensiune 3 × 3 discutate anterior (Prewitt şi Sobel) detectează discontinuităţile


pe verticală şi pe orizontală. Ele pot fi modificate astfel încât răspunsul să fie mai pronunţat de-a
lungul direcţiilor diagonale.

9
PI, curs 4

Sobel:
− 2 − 1 0 0 1 2
S xy =  − 1 0 1
 S − xy =  − 1 0 1
 (13)
 0 1 2 − 2 − 1 0

Prewit:
 − 1 − 1 0  0 1 2
Pxy = − 1 0 1
 P− xy = − 1 0 1 (14)
 0 1 1 − 1 − 1 0

Fig. 7 a) imagine filtrată cu masca S − xy ; b) imagine filtrată cu masca S xy

Observaţie: Gradientul este perpendicular pe contur!

Fig. 8

10
PI, curs 4

Laplacianul imaginii

Fie f ( x, y ) – funcţia imagine – continuă. Laplacianul se defineşte astfel:

∂2 f ∂2 f
∇(∇f ) = ∇ f = ∆f = 2 + 2
2
(15)
∂x ∂y

În continuare căutăm o formă discretă pentru relaţia (15):

∂2 f ∂  ∂f  ( 4 ') [ f ( x + ∆x, y ) − f ( x, y )] − [ f ( x, y ) − f ( x − ∆x, y )]


=  ≈
∂x 2 ∂x  ∂x  ∆x 2
∂2 f ∂  ∂f  ( 4 ') [ f ( x, y + ∆y ) − f ( x, y )] − [ f ( x, y ) − f ( x, y − ∆y )]
=  ≈
∂y 2 ∂y  ∂y  ∆y 2

Deoarece ∆x = ∆y = 1 ⇒

∂2 f
≈ f ( x + 1, y ) + f ( x − 1, y ) − 2 f ( x, y )
∂x 2
(16)
∂2 f
≈ f ( x, y + 1) + f ( x, y − 1) − 2 f ( x, y )
∂y 2

Implementarea discretă a laplacianului se obţine sumând relaţiile (16) ⇒

∇ 2 f = f ( x + 1, y ) + f ( x − 1, y ) + f ( x, y + 1) + f ( x, y − 1)  − 4 f ( x, y ) (17)

Ecuaţia (17) poate fi implementată folosind următoarea mască:

0 1 0 
L0 = 1 − 4 1 (17’)
0 1 0

Masca L0 asigură un răspuns izotropic la rotaţia cu un increment de 90  .


Direcţiile diagonale pot fi încorporate în direcţia Laplacianului astfel:

∇2 f = [ f ( x + 1, y) + f ( x − 1, y) + f ( x, y + 1) + f ( x, y − 1)] − 4 f ( x, y) +
(18)
[ f ( x − 1, y − 1) + f ( x − 1, y + 1) + f ( x + 1, y − 1) + f ( x + 1, y + 1)] − 4 f ( x, y)
Masca corespunzătoare este:

11
PI, curs 4

1 1 1
L1 = 1 − 8 1
 (19)
1 1 1

Acest filtru este izotropic pentru rotaţiile la 45 .


Obs. Se pot folosi şi măştile în care punctul central este pozitiv:

 0 −1 0 
L2 = − 1 4 − 1 (20)
 0 − 1 0 
respectiv

− 1 − 1 − 1
L3 = − 1 8 − 1 (21)
− 1 − 1 − 1

Laplacianul fiind un operator de derivare este folosit în special la accentuarea


contururilor.
În urma aplicării laplacianului, regiunile în care există discontinuităţi pronunţate vor
apărea mai luminoase (contururile), iar cele în care nivelele de gri variază lent se vor întuneca.
Aceasta înseamnă că se produc imagini care au contururi şi alte discontinuităţi de culori deschise,
toate imprimate pe un fond întunecat (negru corespunde la 0 ). Prin urmare se obţine o accentuare
a contururilor într-o imagine prin simpla adunare dintre imaginea iniţială şi laplacianul imaginii
(vezi fig. 9).

Obs. În cazul în care coeficientul central al măştii laplacianului este negativ, se face scădere.
Deci accentuarea contururilor se poate face prin:

 f ( x, y ) − ∇ 2 f ( x, y ) (a)
g ( x, y ) =  (22)
 f ( x, y ) + ∇ f ( x, y )
2
(b)

(a) pentru coeficient central negativ;


(b) pentru coeficient central pozitiv.

Ecuaţia (22) (a sau b) este de fapt implementată printr-o singură mască. De exemplu,
înlocuind expresia laplacianului dată de (17) rezultă:

g ( x, y ) = 5 f ( x, y ) − [ f ( x + 1, y ) + f ( x − 1, y ) + f ( x, y + 1) + f ( x, y − 1)] (23)

Masca corespunzătoare este:

12
PI, curs 4

 0 −1 0 
A0 = − 1 5 − 1 (24)
 0 − 1 0 

În cazul laplacianului dat de relaţia (18) se obţine masca:

− 1 − 1 − 1
A1 = − 1 9 − 1 (25)
− 1 − 1 − 1

Exemplu: Imaginea polului nord al Lunii

Fig. 9

13
PI, curs 4

Fig. 9

14
PI, curs 4

Fig. 10

15
PI, curs 4

Mărirea imaginilor (zooming)


Dintre modalităţile de zooming amintim:
a) dublarea imaginii;
b) interpolarea liniară.

a) Dublarea imaginii

În cazul dublării imaginii, fiecare linie şi fiecare coloană este dublată. Acest lucru este
echivalent cu întreţeserea unei imagini de dimensiuni M × N cu linii şi coloane de zerouri, pentru
a obţine o matrice de dimensiuni 2 M × 2 N şi apoi „convoluţia” ei cu o matrice de forma:

1 1 
H =  (1)
1 1 

Rezultă o imagine:

g (m, n) = f (k , l ) (2)

m n
unde k =   , l =   , m = 0, 2 M − 1, n = 0, 2 N − 1 ,
2 2
cu [ x ] reprezentând partea întreagă a valorii x .

Obs. Când se utilizează convoluţia cu matricea H , „pivotul” este H (1,1) (primul element este
H (0,0) ). (Să dau exemplu imaginea de la punctul b)

b) Interpolarea liniară

Este o multiplicare a imaginii, la care pixelii care se intercalează sunt media aritmetică a
pixelilor vecini din imaginea originală.
Interpolarea liniară se realizează în două etape:
• pe linii;
• pe coloane.
De exemplu, pentru a mări de 2 × 2 o imagine de M × N , interpolarea liniară de-a lungul
liniilor dă:

g int - de dimensiune M × 2 N :
g int (m,2n ) = f (m, n) m =0, M − 1, n =0, N − 1 (3)

g int (m,2n + 1) =
1
[ f (m, n) + f (m, n + 1)] (4)
2

Pe coloane transformarea este:

16
PI, curs 4

g - de dimensiune 2 M × 2 N :
g (2m, n ) = g int (m, n) m = 0, M − 1, n = 0, 2 N − 1 (5)

g (2m + 1, n ) =
1
[gint (m, n) + gint (m + 1, n)] (6)
2

Un rezultat similar se obţine prin convoluţia matricei 2 M × 2 N (obţinută prin întreţeserea


imaginii originale cu o matrice M × N de zerouri), cu matricea:

1 2 1
1 
H = 2 4 2 (7)
4
1 2 1
 

Obs. În cazul produsului de convoluţie poziţia pixelului curent corespunde elementului H (1,1)
(primul element este H (0,0) ).

Algoritmul folosit în acest caz este ilustrat astfel:

1 0 7 0 1 4 7 3,5
7 intretesere cu 0 0 0 interpolare linii 0 0 0 0  interpolare coloane
1 0 0 
3  →     →     →
 1 3 0 1 0 3 2 1 0,5
   
0 0 0 0 0 0 0 0
1 4 7 3,5 
2 3 4 2 

3 2 1 0,5 
 
1,5 1 0,5 0,25

Interpolarea de ordin superior e posibilă prin intercalarea fiecărei linii şi coloane cu p linii
şi p coloane de zerouri şi convoluţia de p ori cu matricea H.

17

S-ar putea să vă placă și