Sunteți pe pagina 1din 16

PI, curs 3

Curs 3

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


https://www.southampton.ac.uk/~msn/book/new_demo/
http://www.imageprocessingbasics.com/

1. Consideraţii generale
Spre deosebire de operaţiunile punctuale, operaţiunile spaţiale se realizează asupra
pixelilor dintr-o vecinătate din imaginea iniţială şi valorile corespunzătoare ale unei subimagini
de aceeaşi dimensiune cu vecinătatea aleasă. Subimaginea este numită filtru, mască, nucleu,
fereastră. Valorile filtrului se numesc coeficienţi sau ponderi. Operaţiile de filtrare care se aplică
direct asupra pixelilor se mai numesc filtrări spaţiale, pentru a le deosebi de tehnicile Fourier
care sunt referite ca filtrări în domeniul frecvenţelor.
Filtrările spaţiale se pot clasifica după mai multe criterii:
a) după efectul şi destinaţia lor:
- pentru eliminarea zgomotelor;
- pentru netezirea (estomparea) detaliilor (bluring/smoothing);
- pentru accentuarea detaliilor (sharpening);
- pentru detecţia muchiilor; etc.
b) după structura şi modul de aplicare:
- liniare – se aplică o operaţie liniară asupra imaginii (de obicei operaţia de
convoluţie);
- neliniare – se aplică operaţii neliniare asupra imaginii.

Considerăm o filtrare liniară cu un filtru (o mască) de dimensiune 3 × 3 cu ponderile


(coeficienţii) w( s, t ) şi imaginea dată prin f ( x, y ) . Mecanismul aplicării unei măşti (filtrare
spaţială) este descris în Fig. 1.

1
PI, curs 3

0 X

Masca

Imagine f(x,y)

Y
w(-1,-1) w(0,-1) w(1,-1)

w(-1,0) w(0,0) w(1,0)

w(-1,1) w(0,1) w(1,1)

Coeficientii filtrului
f(x-1,y-1) f(x,y-1) f(x+1,y-1)

f(x-1,y) f(x,y) f(x+1,y)

f(x-1,y+1) f(x,y+1) f(x+1,y+1)

Pixelii din imagine


acoperiti de ma sca

Fig. 1 Mecanismul aplicării unei măşti (filtrare spaţială)

Dacă imaginea filtrată o notăm cu g ( x, y ) , atunci:

g ( x, y ) = w(−1,−1) f ( x − 1, y − 1) + w(0,−1) f ( x, y − 1) + w(1,−1) f ( x + 1, y − 1) +


w(−1,0) f ( x − 1, y ) + w(0,0) f ( x, y ) + w(0,1) f ( x, y + 1) + (1)
w(−1,1) f ( x − 1, y + 1) + w(0,1) f ( x, y + 1) + w(1,1) f ( x + 1, y + 1)

Se observă că masca este centrată în pixelul ( x, y ) , pentru care se calculează ieşirea


g ( x, y ) , acesta fiind motivul pentru care se lucrează cu măşti de dimensiune impară.
În general, filtrarea liniară a unei imagini de dimensiune M × N cu o mască m × n este
dată de:

a b
=
g ( x, y ) ∑ ∑ w(s, t ) f ( x + s, y + t ) (2)
s=
−a t =
−b

m −1 n −1
a= , b= , x = 0, M − 1 , y = 0, N − 1
2 2

2
PI, curs 3

Relaţia (2) este de fapt o relaţie de convoluţie (strict vorbind este corelaţie, vezi sfârşitul
cursului). Valoarea pixelului curent este înlocuită cu produsul de convoluţie dintre vecinătatea
pixelului curent şi masca de convoluţie.
Observaţie: Pentru simplitate relaţia (2) se scrie uneori sub forma:

mn −1
g ( x, y ) = ∑ wi zi (3)
i =0

cu z i - valoarea pixelului corespunzător din imaginea iniţială şi wi - ponderea filtrului.


De exemplu, pentru o mască m × n = 3 × 3 = 9 ponderile sunt numerotate astfel:

w0 w1 w2

w3 w4 w5

w6 w7 w8

Observaţie: Relaţia (2) se aplică în forma dată atunci când o mască de dimensiune n × n are
n −1
centrul la cel puţin de marginile imaginii. În acest fel imaginea rezultată este mai mică
2
decât cea iniţială. Dacă se doreşte să fie de aceeaşi dimensiune putem procesa pixelii de pe
margine: (i) cu o mască parţială sau (ii) putem extinde imaginea originală prin simpla copiere a
liniilor sau a coloanelor.

2. Filtre liniare de netezire


Filtrele liniare de netezire înlocuiesc valoarea pixelului curent cu o medie a vecinilor lui.
Ele sunt numite de netezire (smoothing) deoarece netezesc detaliile (variaţiile bruşte ale
intensităţii dintre pixelii vecini – adică frecvenţele înalte). Din acest motiv sunt numite şi filtre
trece-jos (taie frecvenţele înalte (detaliile) din imagine).
Să presupunem că o imagine este afectată de un zgomot aditiv η ( x, y ) a cărui medie este
nulă. Imaginea de intrare este: f ( x, y ) + η ( x, y ) .
Prin introducere în relaţia (2), obţinem:

a b
=g ( x, y ) ∑ ∑ w(s, t ) f ( x + s, y + t ) + η ab ( x, y) (4)
s=
−a t =
−b

η ab ( x, y ) - este dependentă de dimensiunea ferestrei (măştii). Cu cât dimensiunea este mai mare
cu atât η ab → 0 .
Observaţie. Filtrele liniare de netezire diminuează influenţa zgomotului nu prin eliminare ci prin
împrăştierea lui în imagine.

3
PI, curs 3

Exemple de filtre de mediere:

- filtru medie aritmetică

1 a b
=
g ( x, y ) ∑ ∑ f ( x + s, y + t )
m n s=
(5)
−a t =
−b

Pentru m= n= 3 ⇒ masca:

1 1 1
1
1 1 1
9
1 1 1

Acest tip de filtru poate fi folosit pentru zgomot gaussian şi zgomot uniform.

a)

b) c)

d) e)

Fig. 2 a) imaginea initiala; b) zgomot sare si piper; c) filtru mediere 3x3;


d) filtru mediere 7x7; e) filtru mediere 15x15; d) si e) => efectul de estompare (bluring)

4
PI, curs 3

- filtru cu medie ponderată (exemplu: filtru gaussian)

Filtrul gaussian este cel mai potrivit pentru eliminarea zgomotului gaussian. Ponderea
pixelilor se reduce odată cu creşterea distanţei faţă de pixelul central.

s 2 +t 2
1 a b −
=g ( x, y )
2πσ 2 ∑ ∑ f ( x + s , y + t )e 2σ 2 (6)
s=
−a t =
−b

Fig. 3 Distribuţie gaussiană cu media (0,0) şi σ = 1

Filtrarea este cu atât mai puternică cu cât valoarea deviaţiei standard σ şi dimensiunea
măştii de convoluţie este mai mare. Pentru dimensiunea 3 × 3 , aplicarea acestui filtru se poate
face cu masca:
1 2 1 
1 
2 4 2
16 
1 2 1 

Întrebare: Coeficienţii filtrului depind sau nu de valoarea deviaţiei standard σ ?

Concluzie:
Filtrele de mediere se folosesc în special la estomparea (bluring) obiectelor mici pentru a
putea izola obiectele mari care ne interesează. Intensitatea obiectelor mici se amestecă cu fondul
şi astfel obiectele mari sunt mult mai uşor de detectat. Dimensiunea măştii se alege în funcţie de
dimensiunea obiectelor pe care dorim să fie amestecate cu fondul.

5
PI, curs 3

Fig. 4 Estomparea obiectelor care nu ne interesează

3. Filtre neliniare
În general, zgomotele din imagini apar în domeniu frecvenţelor înalte din spectrul
imaginii. De aceea, pentru înlăturarea lor se folosesc filtre trece-jos. Aceste filtre tind să reducă
detaliile din imagini (linii, colţuri). Filtrele trece-jos degradează punctele de front, degradând
imaginea.
Filtrele neliniare elimină zgomotele, păstrând totodată fronturile şi detaliile din imagine.

Filtre de ordine (filtre rang)


O clasă a filtrelor neliniare este aceea a filtrelor de ordine (filtrelor rang). Acestea se
bazează pe ordonarea intensităţilor pixelilor din fereastra de filtrare.
Fie P ( x, y ) un punct (pixel) al imaginii şi VP= m × n o vecinătate a sa. Notăm cu
f 0 , f1 , , f mn−1 intensitățile pixelilor din vecinătatea VP şi cu RVP ordonarea crescătoare a
intensităţilor (vectorul ordonat al intensităţilor):

RVP = { f 0′, f1′, , f N′ −1} cu fi′ ≤ fi′+1 , N = mn.

Aplicarea unui filtru rang este definită astfel:

( )
g ( P ) = Rang j RVP , (7)

Adică intensitatea pixelului P din imaginea filtrată va fi aceea memorată pe poziția j a


vectorului RVP .

6
PI, curs 3

Pentru j = 0 se obține filtrul min (min filter):

g ( P ) min
= = RVP ( ) {
min f ( Q ) Q ∈ VP } (8)

Obs.: Filtrul min poate elimina impulsurile negative (spoturi albe).

j N − 1 se obține filtrul max (max filter):


Pentru =

g ( P ) max
= = RVP ( ) {
max f ( Q ) Q ∈ VP } (9)

Obs.: Filtrul max poate elimina impulsurile pozitive (spoturi negre).

Cazul cel mai reprezentativ al filtrelor de ordine este filtrul median.

Filtrul median este definit pentru N impar. El corespunde poziţiei din mijloc în vectorul
ordonat al intensităților, RV p , deci:

( )
g ( P ) = Rang N −1 RVP (10)
2

g ( P ) fiind intensitatea mediană din cele N intensități.

Obs.: În cazul în care notăm pozițiile cu 1, 2, , N (indexul în vector ia valorile 1, 2, , N ),
rezultă:

( )
g ( P ) = Rang N +1 RVP (11)
2

Filtrul median înlătură zgomotele fără a degrada imaginea, deci fără a atenua punctele de
front.
Filtrele de netezire tind să distribuie zgomotele în punctele înconjurătoare acelora care
reprezintă zgomot. Principala proprietate a filtrului median este aceea că forţează pixelii cu
nivele de gri distincte să fie mai asemănătoare cu vecinii lor. De fapt, sunt eliminate grupurile de
pixeli care sunt mai luminoase sau mai întunecate decât vecinii lor şi a căror arie este mai mică
mn
decât (jumătatea ariei filtrului).
2

7
PI, curs 3

Fig. 5 b) filtru medie aritmetică; c) filtru median

Obs: În general, filtrul median este cel mai potrivit pentru zgomotul sare şi piper.

a) b)

c)
Fig. 6 a) imaginea originală; b) imaginea cu zgomot sare şi piper; c) imaginea filtrată

8
PI, curs 3

Exemplu:
Considerăm cazul N = 5 = (m 1,= n 5) . Vectorul ordonat al intensităţilor pixelilor din
vecinătatea (fereastra, masca) de filtrare îl considerăm:
RVP {100,110,120,130, 250}
Ieşirea filtrului median va fi 120. Prin comparaţie, ieşirea unui filtru de netezire cu
100 + 110 + 120 + 130 + 250
ponderi egale (filtru medie aritmetică) este = 142.
5
Alegerea vecinătăţii (fereastra de filtrare)
Forma vecinătăţii în care se calculează cele N intensităţi influenţează efectul filtrului. În
general, vecinătatea se alege mică pentru a se evita efortul de calcul presupus de sortarea unui
vector mare de intensităţi. Dimensiunea este dată de dimensiunea grupurilor de pixeli care
trebuie eliminate. Alegerea formei ferestrei se poate baza pe o cunoaştere a caracteristicilor de
zgomot din imagine, de exemplu orientarea orizontală sau verticală.
Formele de ferestre uzuale pentru filtrul median sunt:

n n
n n

Fig. 7 Tipuri de ferestre în cazul filtrului median

Imaginea poate fi filtrată de mai multe ori folosind aceeaşi fereastră.

Proprietăţi ale filtrului median:


1. Reduce variaţia intensităţilor din imagine, producând regiuni de intensitate constantă sau
aproape constantă. Forma regiunilor depinde de geometria ferestrei de filtrare, aspect
neplăcut deoarece sunt introduse în imaginea filtrată regiuni care nu existau.
2. Netezeşte oscilaţiile de intensitate cu o perioadă mai mică decât lăţimea ferestrei.
3. Modifică valoarea medie a intensităţilor din imagine dacă distribuţia spaţială a zgomotului
nu este simetrică în fereastră.
4. Conservă anumite forme de frontiere.
5. Nu generează noi nivele de gri.

La aplicarea filtrelor liniare se efectuează calcule de înmulţire şi adunare. Aplicarea


filtrului median presupune sortarea unui vector de numere întregi. Aceste calcule se pot
eficientiza în mai multe moduri. Astfel, vectorul corespunzător poziției ( x + 1, y ) se poate obține
prin modificarea vectorului corespunzător poziției ( x, y ) .

9
PI, curs 3

Fig. 8 Deplasarea ferestrei cu o poziţie spre dreapta

Se elimină prima coloană din VP ⇒ rămân mn − m pixeli din vechiul vector.

Algoritmul Huang

Fereastra de m × n pixeli este deplasată pe rânduri de la stânga spre dreapta. Ferestrele


centrate în ( i, j ) şi ( i + 1, j ) au în comun mn − m pixeli.
Calculul valorii mediane din fereastra curentă se bazează pe valoarea mediană a ferestrei
anterioare şi pe histograma imaginii din fereastră.
Astfel, valoarea mediană poate fi determinată știind că N 2 (împărțire întreagă) pixeli ai
imaginii din fereastră au intensităţi mai mici decât ea ( N = m n ).

Exemplu: cazul N = 7

0 1 2 3 4 5 6
4, 6, 8, 10, 11, 12, 14
}

N/2

N −1
valoarea mediană: poziţia =3
2

În vectorul sortat al intensităţilor N 2 intensităţi sunt mai mici decât valoarea mediană.
Dacă valoarea mediană corespunde poziției i în histogramă (nivelul i de intensitate)
atunci numărul total de pixeli cu intensitatea mai mică decât a nivelului i este:

i −1
∑ h( j )
j =0

h – vectorul histogramei nenormate ( h ( j ) = numărul de pixeli cu intensitatea j ).

10
PI, curs 3

Algoritmul Huang:

• Pentru fiecare rând al imaginii:


Pentru prima fereastră de pe rând:
• Calculează histograma;
• Construieşte şi sortează vectorul pixelilor din fereastră;
• Determină valoarea mediană;
Pentru celelalte ferestre de pe rând:
• Actualizează histograma:
o Scăzând contribuţiile pixelilor de pe coloana din stânga ferestrei;
o Adăugând contribuţiile pixelilor de pe coloana din dreapta ferestrei;
• Determină valoarea mediană a ferestrei folosind valoarea mediană a
ferestrei anterioare, care se ajustează impunând condiţia:
N
( număr pixeli cu intensitate < med ) = ;
2
• sfârşit algoritm.

Implementarea în C++ a algoritmului poate fi următoarea:

void Huang-median(imagine a, imagine b, int m, int n, int Mmax, int Nmax)


{
// a – imagine de intrare, b – imagine de iesire
// m x n – dimensiunea ferestrei, Mmax x N max – dimens. imaginii de intrare
int k, l, i, j, mn, mn2, m2, n2, *t;
unsigned long hist[256];
t = new unsigned int[m*n]; //vectorul pe care il sortez
mn = m*n; mn2 = m*n/2; m2 = m/2; n2 = n/2;

for (k = m2; k < Mmax - m2; k++) //pentru fiecare rand


{ //initializare histograma
for (i = 0; i < 256; i++)
hist[i] = 0;
//Calculeaza histograma si valoarea mediana pentru prima fereastra
for (i = 0; i < m; i++)
for (j = 0; j < n; j++)
{
int g = t[n*i + j] = a[k - m2 + i][j];
hist[g]++;
}
sortare(t, mn);
int med = t[mn2]; //valoarea mediana
b[k][n2] = med; //valoarea mediana pentru prima fereastra de pe rand
//calculeaza nr. de pixeli cu intensitatea < med (pt. prima fereastra)
ltmed = 0;
for (i = 0; i < med; i++)
ltmed += hist[i];

11
PI, curs 3

//Calculeaza valoarea mediana pentru celelalte ferestre de pe linia k


for (l = n2 + 1; l < Nmax - n2; l++) // l - coloana
{//calculeaza histograma si ltmed
for (i = 0; i < m; i++)
{ //se elimina prima coloana a ferestrei precedente
g = a[k - m2 + i][l - n2 - 1];
hist[g]--;
if (g < med) ltmed--;
//se adauga ultima coloana a noii ferestre
g = a[k - m2 + i][l + n2];
hist[g]++;
if (g < med) ltmed++;
}
//calculeaza valorea mediana a ferestrei
if (ltmed > mn2)
do
{
med--;
ltmed - = hist[med];
} while (ltmed > mn2);
else
while (ltmed + hist[med] <= mn2)
{
ltmed + = hist[med];
med++;
}
b[k][l] = med;
} //for l
} //for k
delete t;
}

Algoritmul este mult mai rapid decât în cazul folosirii sortării în fereastră, chiar dacă se folosește
un algoritm de sortare rapidă.
Observație. Filtrul nu se aplică pe marginea de lățime m 2 , respectiv n 2 a imaginii. Pentru
filtrarea acestor margini se poate folosi o fereastră trunchiată.

12
PI, curs 3

Adaptive Filters

The filters discussed so far are applied to an entire image without any regard for how
image characteristics vary from one point to another.
The behaviour of adaptive filters changes depending on the characteristics of the image inside
the filter region.
We will take a look at the adaptive median filter.

Adaptive Median Filter

The median filter performs relatively well on impulse noise (white or black pixels) as
long as the spatial density of the impulse noise is not large. The adaptive median filter can handle
much more spatially dense impulse noise, and also performs some smoothing for non-impulse
noise. Moreover, the adaptive median filter seeks to preserve detail while smoothing non-impulse
noise, while the median filter does not do.
The key insight in the adaptive median filter is that the filter size changes depending on
the characteristics of the image.
The adaptive median filter aims to replace f(x,y) with median of a neighborhood up to a
specified size as long as the median is different from the max and min values but f(x,y)=min or
f(x,y)=max. Othervise, f(x,y) is not changed.
Remember that filtering looks at each original pixel image in turn and generates a new
filtered pixel.
First examine the following notation:
– zmin = minimum grey level in Sxy
– zmax = maximum grey level in Sxy
– zmed = median of grey levels in Sxy
– zxy = grey level at coordinates (x, y)
– Smax =maximum allowed size of Sxy

Level A: =
A1 zmed − zmin
=A2 zmed − zmax
if A1 > 0 and A2 < 0, go to level B
else increase the window size
if window size ≤ Smax, repeat Level A
else output zmed
Level B: =
B1 z xy − zmin
B=
2 z xy − zmax
if B1 > 0 and B2 < 0 ,
output z xy
else output zmed

13
PI, curs 3

Explanation
Level A: IF zmin < zmed < zmax , then
// zmed is not an impulse (white or black pixel)
(1) go to level B to test if z xy is an impulse …
ELSE
// zmed is an impulse
(1) the size of the window is increased and
(2) level A is repeated until…
(a) zmed is not an impulse and go to level B or
(b) Smax reached: output z xy
Level B: IF zmin < z xy < zmax , then
// z xy is not an impulse
(1) output is z xy (distortion reduced)
ELSE
// either z xy = zmin or z xy = zmax
(2) output is zmed (standard median filter)
// zmed is not an impulse (from level A)

The key to understanding the algorithm is to remember that the adaptive median filter has three
purposes:
– Remove impulse noise (white or black pixel);
– Provide smoothing of other noise;
– Reduce distortion, like excessive thinning or thickening of object
boundaries.

14
PI, curs 3

Image corrupted by salt and pepper Filtering with a 7*7 median filter Adaptive median filtering with S =7
max
noise with probabilities P = P =0.25
a b

15
PI, curs 3

Correlation and Convolution!

The filtering we have been talking about so far is referred to as correlation with the filter itself
referred to as the correlation kernel.

a b
=
g ( x, y ) ∑ ∑ w(s, t ) f ( x + s, y + t )
s=
−a t =
−b

Convolution is a similar operation, with just one subtle difference:

For symmetric filters it makes no difference.


Generally, the convolution is:
a b
=
g ( x, y ) ∑ ∑ w(s, t ) f ( x − s, y − t )
s=
−a t =
−b

16

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