procesarea imaginilor aplica ţii -...
TRANSCRIPT
Arpad GELLERT
Remus BRAD
Procesarea Imaginilor
Aplicaţii
2
Cuprins
1. Transformări simple ale imaginilor .................................................................... 3
2. Ajustarea contrastului ........................................................................................ 5
3. Egalizarea histogramei ....................................................................................... 7
4. Operaţii geometrice ............................................................................................ 9
5. Îndepărtarea zgomotului................................................................................... 13
6. Accentuarea contururilor .................................................................................. 18
7. Detecţia contururilor ........................................................................................ 20
8. Detecţia de contur bazată pe filtrul Gabor ........................................................ 22
9. Segmentarea imaginilor ................................................................................... 23
10. Corelaţia imaginilor ....................................................................................... 25
11. Algoritmi block matching............................................................................... 27
Bibliografie .......................................................................................................... 29
3
1. Transformări simple ale imaginilor
1.1. Transformarea imaginilor din RGB în nivele de gri
Nivelul de gri corespunzător culorii unui pixel se obţine prin aducerea la aceeaşi
intensitate a celor trei componente ale culorii pixelului respectiv (R-roşu, G-verde, B-albastru).
Procedeul se aplică pentru toţi pixelii din imagine. Figura următoare prezintă cele 256 de nivele
de gri reprezentate pe 24 biţi/pixel:
0, 0, 0 1, 1, 1 255, 255, 255
Negru Alb
Figura 1. Nivelele de gri
Intensitatea comună ale celor trei componente RGB, poate fi obţinută prin următoarea regulă:
BGRI 114.0587.0299.0
unde intensitatea comună I este o medie ponderată a componentelor de culoare (R, G, B). Se
poate aplica și o medie aritmetică a componentelor de culoare, ca în pseudocodul de mai jos:
for r:= 0 to H-1 do
for c := 0 to W-1 do
R := getr(r, c)
G := getg(r, c)
B := getb(r, c)
seti((R+G+B)/3, r, c)
1.2. Negativarea imaginilor
Negativarea unei imagini poate fi efectuată transformând componentele culorii fiecărui
pixel folosind următoarea regulă:
BB
GG
RR
255
255
255
1.3. Modificarea luminozităţii imaginilor
Luminozitatea unei imagini se poate modifica prin adunarea unei valori ( ) la
componentele culorii fiecărui pixel din imaginea respectivă, având însă grijă să nu se iasă în
afara intervalului [0, 255]. Folosind o valoare pozitivă ( >0), se obţine o luminozitate mai
deschisă, în timp ce o valoare negativă ( <0) determină o luminozitate mai închisă a imaginii.
Modificarea luminozităţii poate fi efectuată folosind următoarea regulă:
4
restînR
Rdacă
Rdacă
R
,
0,0
255,255
restînG
Gdacă
Gdacă
G
,
0,0
255,255
restînB
Bdacă
Bdacă
B
,
0,0
255,255
Aplicaţii
Să se implementeze tehnicile prezentate în lucrare. Pentru modificarea luminozităţii să se
folosească un slider prin care să se poată seta nivelul dorit de luminozitate.
5
2. Ajustarea contrastului
Histograma unei imagini reprezintă numărul de pixeli (frecvenţa) pentru fiecare
intensitate din imaginea respectivă. De exemplu, în figura următoare 84 de pixeli din imagine au
intensitatea 5:
Intensitate
(nivel gri)
Frecvenţa
0 2555
84
Figura 2. Histograma
Intensitate
(nivel gri)
Frecvenţa
0 255
Figura 3. Histograma înaintea ajustării contrastului
Intensitate
(nivel gri)
Frecvenţa
0 255
Figura 4. Histograma după ajustarea contrastului
6
Ajustarea contrastului unei imagini poate fi realizată prin rescalarea intensităţii fiecărui pixel
folosind formula de mai jos:
aIab
I ON
min)(
minmax
- NI – noua intensitate;
- OI – intensitatea originală;
- min – intensitatea minimă în imagine (cea mai închisă);
- max – intensitatea maximă în imagine (cea mai deschisă);
- (max-min) – intervalul original de intensităţi;
- a – noua intensitate minimă;
- b – noua intensitate maximă;
- (b-a) – noul interval de intensităţi.
Aplicaţii
Să se implementeze algoritmul de ajustare a contrastului prin metoda prezentată.
7
3. Egalizarea histogramei
Egalizarea histogramei este o metodă de modificare neadaptivă a histogramei imaginilor
şi are rolul de a scoate în evidenţă informaţii care pot fi greu identificate în imaginea originală.
Etapele algoritmului de rescalare sunt următoarele:
1. Se determină histograma imaginii;
2. Se construieşte histograma cumulativă;
3. Se determină vectorul de transformare a histogramei;
4. Se modifică imaginea conform vectorului de transformare.
Efectul procesului de egalizare a histogramei poate fi observat în figura următoare:
Intensitate
(nivel gri)
Frecvenţa
Intensitate
(nivel gri)
Frecvenţa
Intensitate
(nivel gri)
Frecvenţa
Intensitate
(nivel gri)
Frecvenţa
Figura 5. Egalizarea histogramei
Dacă numărul de niveluri de rescalare a imaginii originale e mare, e posibilă modificarea
nivelelor de gri în aşa fel încât histograma imaginii îmbunăţite să fie aproape constantă.
Algoritmul de egalizare a histogramei este următorul:
for r:= 0 to H-1 do
for c := 0 to W-1 do
i := geti(r, c)
hist[i] := hist[i] + 1
8
histc[0] := hist[0]
for i := 1 to 255 do
histc[i]:=histc[i-1]+hist[i]
for i := 0 to 255 do
transf[i]:=(histc[i]*255)/(W*H)
for r := 0 to H-1 do
for c := 0 to W-1 do
i := geti(r, c)
seti(transf[i], r, c)
unde hist este histograma imaginii originale, histc este histograma cumulativa, transf este
vectorul care păstrează modificările intensităţilor, geti şi seti preia respectiv setează intensitatea
pixelului de pe o anumită poziţie din imagine.
Aplicaţie
Să se implementeze algoritmul de egalizare a histogramei.
9
4. Operaţii geometrice
Transformările geometrice preiau informaţiile despre pixelii din imaginea sursă şi le mapează, în
noile locaţii din imaginea destinaţie. Forma generală a unei transformări geometrice poate fi
exprimată matricial astfel:
By
xA
y
x
1
1
2
2
unde (x2,, y2) reprezintă coordonatele pixelului din imaginea destinaţie, (x1, y1) reprezintă
coordonatele pixelului din imaginea sursă, iar A şi B sunt matricile prin care se particularizează
transformarea dorită. Translaţia poate fi implementată prin specificarea valorilor pentru matricea
B, în timp ce scalarea, rotaţia si reflexia pot fi obţinute prin setarea matricii A (vezi paragraful
4.5). Pentru corectarea distorsiunilor geometrice introduse în imagini din cauza unor iregularităţi
de perspectivă, se combină aceste transformări elementare, utilizând ambele matrici.
4.1. Scalarea
Figura 6. Scalarea
Scalarea este o operaţie geometrica care măreşte sau micşorează o imagine sau o parte a
unei imagini. Micşorarea imaginii se realizează prin înlocuirea unui grup de pixeli din imaginea
originală (mărimea grupului este determinată de factorul de scalare), cu un singur pixel în
imaginea destinaţie. Acest pixel va avea intensitatea unui anumit pixel din grup, sau intensitatea
obţinută prin interpolarea intensităţilor pixelilor din grup (de exemplu intensitatea medie).
Figura 7. Metode de micşorare. a) Inlocuirea cu pixelul din dreapta sus. b) Interpolarea folosind
valoarea medie.
10
Mărirea unei imagini este realizată prin replicare sau prin interpolare. Astfel, unui pixel din
imaginea originală îi corespunde un grup de pixeli în imaginea destinaţie, care vor avea fie
intensitatea pixelului original (din imaginea sursă), fie o interpolare a acesteia cu intensităţile
pixelilor invecinaţi. Mărimea grupului este determinată de factorul de scalare. Operaţiile de
interpolare, deşi sunt mai mari consumatoare de resurse de procesare (ceea ce se traduce prin
creşterea timpului de procesare), oferă rezultate superioare din punct de vedere calitativ.
Figura 8. Metode de mărire. a) Replicarea unui singur pixel. b) Interpolarea.
4.2. Rotaţia
Figura 9. Rotaţia
Rotaţia unei imagini se realizează prin maparea unui pixel de intrare (x1, y1) în poziţia de ieşire
(x2, y2), determinată în urma rotirii cu un unghi , în jurul unei origini (x0, y0). Transformarea
aplicată asupra coordonatelor pixelilor este:
001012
001012
)()cos()()sin(
)()sin()()cos(
yyyxxy
xyyxxx
Rotaţia este folosită ca procedeu de ajustare/corectare a aspectului unei imagini, sau în cadrul
operaţiilor de procesare ce acţionează direcţional. In majoritatea implementărilor coordonatele
de ieşire (x2, y2) care se află în afara imaginii sunt ignorate. Algoritmul de rotaţie poate produce
coordonate (x2, y2) care nu sunt întregi. Pentru generarea intensităţilor pixelilor cu coordonate
întregi, cele mai importante metode folosite sunt următoarele:
11
un pixel cu coordonate întregi poate primi intensitatea celui mai apropiat pixel cu
coordonate ne-întregi;
se calculează intensităţile pixelilor cu coordonate întregi făcându-se media intensităţilor
pixelilor cu coordonate ne-întregi. Această metodă produce rezultate mai bune, dar
necesită o putere de procesare mai mare.
4.3. Reflexia
Figura 10. Reflexia
Reflexia geometrică (oglindirea) transformă o imagine sursă astfel încât pixelii (x1, y1) sunt
reflectaţi faţă de o axă specificată în noua poziţie (x2, y2) în imaginea destinaţie. Reflexia faţă de
o axă orizontală de ordonată y0 se realizează prin transformările:
)2(
x
012
12
yyy
x
În mod similar, reflexia faţă de o axă verticală de abscisă x0 se realizează astfel:
12
012 )2(x
yy
xx
Reflexia dupa o axă orientată într-o direcţie arbitrara , şi care trece prin punctul (x0, y0):
)cos(2
)sin(2
12
12
yy
xx
unde )cos()()sin()( 0101 yyxx . În caz că (x0, y0) nu este în centrul imaginii, o
parte din imagine va fi reflectată în afara spaţiului vizibil al imaginii.
4.4. Translaţia
Figura 11. Translaţia
12
Translaţia presupune deplasarea pixelilor (x1, y1) din imaginea originală, cu o valoare (β1, β2)
specificată de utilizator, în noile poziţii (x2, y2) determinate prin transformările:
y
x
yy
x
12
12x
În cazul in care noile coordonate (x2, y2) sunt in afara imaginii, operatorul de translaţie le ignoră.
4.5. Transformarea afină
Figura 12. Transformarea afină
În multe imagini sunt detectate o serie de distorsiuni introduse de iregularităţile de
perspectivă. Dacă aceste distorsiuni sunt uniforme, ele pot fi corectate aplicând transformările
afine, care mapează pixelii (x1, y1) dintr-o imagine de intrare, în noile poziţii (x2, y2) ale
imaginii de ieşire aplicând o combinaţie liniară a translaţiei, rotaţiei şi a scalării. O
transformare afină poate fi descrisă prin
By
xA
y
x
1
1
2
2
Translaţia pură se obţine prin:
2
1,
10
01
b
bBA
Rotaţia pură foloseşte doar matricea A:
0
0,
)cos()sin(
)sin()cos(
BA
Similar, scalarea pură se obţine prin:
0
0,
0
0
22
11 B
a
aA
Aplicaţii
Să se implementeze operaţiile geometrice prezentate în lucrare.
13
5. Îndepărtarea zgomotului
Imaginile digitale sunt adesea afectate de diferite tipuri de zgomot. Există două mari
categorii de zgomot: de tip Gaussian şi de tip impuls. Cel Gaussian este unul statistic cu
distribuţie Gaussiană. Cel de tip impuls este independent de pixeli i din imagine, având o
distribuţie aleatoare. Imaginile digitale pot fi afectate de zgomot de tip impuls în timpul
achiziţionării sau în timpul transmisiei. Zgomotul salt-and-pepper este unul de tip impuls
compus din pixeli cu valori minime şi maxime în cadrul imaginii afectate. Principalul
obiectiv al filtrelor de zgomot de tip impuls este păstrarea valorilor pixelilor neafectaţi şi
reconstruirea celor afectaţi.
5.1. Filtrul Trece-Jos (FTJ)
Filtrarea trece-jos se poate efectua prin convoluţia imaginii afectate de zgomot cu o matrice:
.
11
11
2
1...,,
121
242
121
16
1,
111
111
111
9
1 2
221
n
nnn
n
nHHH n
Aceste matrici, numite măşti de îndepătare a zgomotului, sunt normalizate la unitate, astfel
procesul de îndepărtare a zgomotului nu introduce o schimbare de amplitudine în imaginea
rezultată. Convoluția imaginii cu matricea H se realizează după cum urmează:
for r := 1 to H-2 do
for c := 1 to W-2 do
s := 0
for row := r-1 to r+1 do
for col := c-1 to c+1 do
i := geti(r, c)
s := s + i*H[row-r+1, col-c+1]
s := s/((n+2)(n+2))
seti(s, r, c)
5.2. Tehnica Outlier
O tehnică simplă de îndepărtare a zgomotului, numită outlier, compară fiecare pixel cu media a
opt dintre vecinii săi. Dacă magnitudinea diferenţei e mai mare decât un prag, pixelul este
considerat zgomot şi e înlocuit cu media pixelilor vecini.
dacă
8
18
1
i
ipI , atunci
8
18
1
i
ipI .
Media poate fi obţinută prin convoluţia imaginii cu următoarea mască:
111
101
111
8
1H .
14
5.3. Filtrul median
Filtrul median e format dintr-o fereastră ce cuprinde un număr impar de pixeli. Pixelul central
din fereastră e înlocuit cu medianul pixelilor din fereastră:
)}.,,min(),,,min(),,,min(),,,min(),,,min(),,,min(
),,,min(),,,min(),,,min(),,,max{min(),,,,maximin(),,,,(
edcedbecbdcbedaeca
dcaebadbacbaedcbaedcbamed
5.4. Filtrul pseudomedian
Filtrarea mediană necesită un volum mare de calcule, iar numărul operaţiilor creşte exponenţial
cu dimensiunea ferestrei. Un operator mai simplu este filtrul pseudomedian:
)}.,,max(),,,max(),,,min{max(2
1)},,min(),,,min(),,,max{min(
2
1
),,,,minimax(2
1),,,,maximin(
2
1),,,,(
edcdcbcbaedcdcbcba
edcbaedcbaedcbapmed
În cazul unui filtru pseudomedian în formă de “+” calculul funcţiilor min şi max se face în
ferestre, după cum urmează:
R
CM
y
xxx
y
1
1
unde şirurile }{ CX şi }{ RX conţin pixelii aflaţi pe orizontală şi respectiv verticală din fereastră.
Pseudomedianul poate fi definit ca:
}].{minimax},{minimaxmin[2
1}]{maximin},{maximinmax[
2
1RCRC YXYXpmed
5.5. Filtrul Markov
În continuare este prezentată o metodă contextuală care aplică lanţurile Markov pentru
înlocuirea pixelului afectat de zgomot cu pixelul care a apărut de cele mai multe ori în acelaşi
context, într-o anumită vecinătate [2]. S-a adaptat lanţul Markov clasic care lucrează cu secvenţe
de valori 1D astfel încât să poată folosi secvenţe de valori 2D. În imagini, considerăm contextul
unui pixel ca fiind pixelii din jur. Pentru imagini în nivele de gri, stările lanţului Markov sunt
pixeli cu valori cuprinse între 0 şi 255. Astfel, filtrul Markov se aplică în felul următor:
0,0,0,2
...,,2
,,
]0,0,0,...,,,,[
,,
,,
jiexceptândHjyWixCSCS
jiqqP
jiexceptândHjyWixSRSRjiqqP
jyixyx
jyixyx
15
unde CS este dimensiunea contextului, iar SR este raza de căutare în jurul pixelului afectat de
zgomot.
N
C C C C C
C
C
C
C C C CC
C
C
C
context size (CS)
search radius (SR)N
C C C C C
C
C
C
C C C CC
C
C
C
context size (CS)
search radius (SR)
Figura 13. Filtrul Markov
În figura de mai sus am marcat cu negru pixelul afectat de zgomot (N) și cu gri pixelii care
aparțin contextului (C). În continuare este prezentat pseudocodul filtrului Markov:
CBP (x, y, CS, SR, T)
For i:=x-SR to x+SR, 0≤i<W
For j:=y-SR to y+SR, 0≤j<H
If i=x AND j=y then
Continue
If SAD(x, y, i, j, CS)<T AND NOT Salt_Pepper(i, j) then
Q[Color(i, j)]:=Q[Color(i, j)]+1
Return Max(Q)
SAD (x1, y1, x2, y2, CS)
S:=0
For i:= -CS/2 to CS/2, 0≤i+x1<W, 0≤i+x2<W, do
For j:= -CS/2 to CS/2, 0≤j+y1<H, 0≤j+y2<H do
If i=0 AND j=0 then
Continue
S:=S + |Color(i+x1, j+y1)-Color(i+x2, j+y2)|
Return S
CBPF(CS, SR, T)
For i:=0 to W-1 do
For j:=0 to H-1 do
If Salt_Pepper(i, j) then
Set_Color(i, j, CBP(i, j, CS, SR, T))
16
5.6. Filtrul Markov îmbunătățit
În continuare este prezentat filtrul Markov îmbunătățit [3] care folosește un context in formă de
+ în loc de contextul complet și aplică o căutare în forma de * în loc de căutarea completă a
metodei anterioare:
0,0,2
...,,2
,
;0,0,2
...,,2
,
]0,0,0,...,,,
;0,0,0,...,,,
;0,0,...,,,
;0,0,...,,,[
,
,,
,
,
,
,,
iexceptândWixCSCS
iq
jexeptândHjyCSCS
jqqP
lexceptândHlyWlxSRSRlq
kexceptândHkyWkxSRSRkq
iexceptândWixSRSRiq
jexceptândHjySRSRjqqP
yix
jyxyx
lylx
kykx
yix
jyxyx
unde, la fel ca la metoda anterioară, CS este dimensiunea contextului, iar SR este raza de căutare
în jurul pixelului afectat de zgomot.
N C
C
C
C
SR
CS
N C
C
C
C
SR
CS
Figura 14. Filtrul Markov îmbunătățit
În figura de mai sus am marcat cu negru pixelul afectat de zgomot (N), cu gri închis pixelii care
aparțin contextului (C) și cu gri deschis zonele în care se caută contextul. Pseudocodul filtrului
Markov îmbunătățit:
17
Markov(x, y, CS, SR, T)
For j:=y-SR to y+SR, 0≤j<H
If j=y then Continue
If SAD(x, y, x, j, CS)<T AND NOT Salt_Pepper(x, j) then
Q[Color(x, j)]:=Q[Color(x, j)]+1
For i:=x-SR to x+SR, 0≤i<W
If i=x then Continue
If SAD(x, y, i, y, CS)<T AND NOT Salt_Pepper(i, y) then
Q[Color(i, y)]:=Q[Color(i, y)]+1
For k:=-SR to SR, 0≤x+k<W, 0≤y+k<H
If k=0 then Continue
i:=x+k
j:=y+k
If SAD(x, y, i, j, CS)<T AND NOT Salt_Pepper(i, j) then
Q[Color(i, j)]:=Q[Color(i, j)]+1
For k:=-SR to SR, 0≤x-k<W, 0≤y+k<H
If k=0 then Continue
i:=x-k
j:=y+k
If SAD(x, y, i, j, CS)<T AND NOT Salt_Pepper(i, j) then
Q[Color(i, j)]:=Q[Color(i, j)]+1
If Q[Max(Q)]=0 then Return Color(x, y)
Return Max(Q)
SAD(x1, y1, x2, y2, CS)
S:=0
For j:= -CS/2 to CS/2, 0≤j+y1<H, 0≤j+y2<H do
If j=0 then Continue
S:=S + |Color(x1, j+y1)-Color(x2, j+y2)|
For i:= -CS/2 to CS/2, 0≤i+x1<W, 0≤i+x2<W, do
If i=0 then Continue
S:=S + |Color(i+x1, y1)-Color(i+x2, y2)|
Return S
Markov_Filter(CS, SR, T)
For i:=0 to W-1 do
For j:=0 to H-1 do
If Salt_Pepper(i, j) then
Set_Color(i, j, Markov(i, j, CS, SR, T))
Aplicaţii
1. Să se implementeze filtrele de zgomot prezentate;
2. Să se implementeze filtrul de zgomot care înlocuieşte intensitatea fiecărui pixel din
imagine cu elementul central al secvenţei care conţine intensitaţile sortate ale pixelilor
vecini.
18
6. Accentuarea contururilor
6.1. Filtrul Trece-Sus (FTS)
Accentuarea contururilor se poate realiza prin utilizarea filtrelor trece-sus. Cele mai
utilizate măşti FTS de mărime 3x3 sunt următoarele:
.
121
252
121
,
111
191
111
,
010
151
010
321
HHH
Aşa cum se poate observa, măştile utilizate pentru accentuarea contururilor au proprietatea că
suma elementelor este 1, evitând în felul acesta modificări ale intensităţilor în imaginea
procesată. Algoritmul constă în înlocuirea intensităţilor cu sumele obţinute prin convoluţia
imaginii cu una din măştile FTS. Evident, este necesară şi o normalizare a noilor intensităţi la
intervalul [0, 255].
6.2. Tehnica ‘unsharp masking’
Noua intensitate a unui pixel reprezintă diferenţa ponderată dintre intensitatea originală
(din imaginea cu rezoluţie normală) şi intensitatea pixelului corespunzător din imaginea cu
rezoluţie scăzută. Imaginea cu rezoluţie scăzută poate fi obţinută prin filtrare trece-jos (vezi
paragraful 5.1).
),(12
1),(
12),( kjF
c
ckjF
c
ckjG L
unde
6
5,
5
3c , deci ]8.0,6.0[c ;
),( kjF – intensitatea originală (intensitatea pixelului din imaginea cu rezoluţie
normală);
),( kjFL – intensitatea obţinută cu un FTJ (intensitatea pixelului din imaginea cu
rezoluţie scăzută);
L – dimensiunea măştii FTJ.
19
Aplicaţii
Să se implementeze cele două tehnici de accentuare a contururilor prezentate în lucrare: filtrul
trece-sus şi respectiv tehnica ‘unsharp masking’. Algoritmul ‘unsharp masking’ se va
implementa printr-o singura parcurgere a imaginii procesate!
Observaţie
La convoluţia imaginii pentru accentuarea contururilor, se va lucra cu intensităţile originale şi nu
cu cele modificate.
20
7. Detecţia contururilor
Modificările sau discontinuităţile de intensitate (amplitudine) dintr-o imagine constituie
caracteristici fundamentale care pot indica prezenţa unor obiecte într-o imagine. Aceste
discontinuităţi sunt denumite contururi. La toţi operatorii prezentaţi în lucrare, intensităţile se
înlocuiesc cu sumele obţinute prin convoluţia imaginii procesate cu măştile corespunzătoare.
7.1. Operatorul Kirsch
1) ]101[],11[,1
1321
HHH ;
unde H1 este utilizat pentru detecţia contururilor orizontale, în timp ce măştile H2 şi H3 se
folosesc pentru contururile verticale din imagine.
2)
110
101
011
,
011
101
110
,
111
000
111
,
101
101
101
4321 HHHH
)(),(),(),(max 4321 HsumaHsumaHsumaHsumaG
7.2. Operatorul Laplace
,
111
181
111
,
010
141
010
21
HH
unde H2 este operatorul Laplace propus de Prewitt.
7.3. Operatorul Roberts
,01
10,
10
01
QP
22 )()( QsumaPsumakR (ex. k = 7).
7.4. Operatorul Prewitt
,
101
101
101
,
111
000
111
QP
22 )()( QsumaPsumaR .
21
7.5. Operatorul Sobel
,
101
202
101
,
121
000
121
QP
22 )()( QsumaPsumaR .
7.6. Operatorul Frei-Chen
111
111
111
9
1,
212
141
212
,
121
242
121
,
101
000
101
,
010
101
010
210
101
012
,
012
101
210
,
101
202
101
,
121
000
121
98765
4321
FFFFF
FFFF
255
)(
)(
9
1
2
4
1
2
i
i
i
i
Fsuma
Fsuma
R .
Aplicaţii
Să se implementeze tehnicile de detecţie a contururilor prezentate în lucrare. Notaţia suma(M)
reprezintă suma obţinută prin convoluţia imaginii procesate cu masca M.
22
8. Detecţia de contur bazată pe filtrul Gabor
Diferenţa importantă faţă de metodele de detecţie aconturului prezentate în lucrarea precedentă,
este că filtrul Gabor determină dinamic matricea pentru fiecare fereastră de 3x3 din imagine. Cu
alte cuvinte, se lucrează cu o matrice care se adaptează dinamic la context, şi nu cu una
prestabilită. Filtrul lui Gabor constă în modulaţia unei funcţii gaussiene şi a unui semnal
sinusoidal [1]. În algoritm, suma(P) şi suma(Q) reprezintă sumele obţinute prin convoluţia
imaginii cu măştile P respectiv Q:
101
101
101
,
111
000
111
QP
Algoritmul:
pentru fiecare fereastră de 3x3 din imagine (unde (row, col) este pixelul din mijlocul ferestrei)
se calculează cele două sume: suma(P) şi suma(Q);
dacă suma(Q) = 0
dacă suma(P) ≥ 0, atunci 2
u ;
dacă suma(P) < 0, atunci 2
u ;
altfel
)(
)(
Qsuma
Psumaarctgu ;
dacă suma(Q) < 0, atunci uu ;
2
uu ;
suma = 0;
pentru fiecare pixel (r, c) din fereastră (r-linia, c-coloana)
ucpozurpozescale
cpozrpoz
sin)(cos)(sin2
22
2
)()(
//scale – elementele noii matrici (3x3).
),( creIntensitatscalesumasuma ;
//poz(r) – poziţia pe verticală faţă de primul element al ferestrei, ]2,0[)( rpoz
//poz(c) – poziţia pe orizontală faţă de primul element al ferestrei, ]2,0[)( cpoz
se setează pe poziţia (row, col) intensitatea suma.
Observaţie: 5.1,66.0,14.3 .
Aplicaţie: să se implementeze filtrul Gabor.
23
9. Segmentarea imaginilor
Segmentarea este este unul din cei mai importanţi paşi în analiza unei imagini [1].
Scopul este acela de a împărţi imaginea în regiuni ce au o corelaţie puternică cu obiectele sau
suprafeţele din imagine. Există două tipuri de segmentare [1]: completă şi parţială. Segmetarea
completă generează un set de regiuni disjuncte ce corespund în mod unic cu obiectele din
imagine. Pentru realizarea unei segmentări complete , este necesară cooperarea cu nivelele
superioare de procesare , care utilizează cunoştinţe specifice din domeniu. În cazul segmentării
parţiale, imaginea este împărţită în regiuni disjuncte care sunt omogene relative la o anumită
proprietate cum ar fi luminozitatea, culoarea, contextul reflectivitatea, etc.
Ambiguitatea prezentă în imagini este principala problemă a segmentării şi ea este
deseori însoţită de zgomot. Tehnicile de segmentare pot fi clasificate în patru categorii:
filtrare locală şi fixare de praguri (threshold);
metode bazate pe snake şi de tip balon, algoritmul watershed;
tehnici de region growing şi split and merge;
metode de optimizare globală bazate pe funcţii de energie, funcţii bayesiene sau pe
criteriul MDL (Minimum Description Length).
Metoda filtrării foloseşte informaţia locală şi nu poate garanta contururi continue. Metodele de
tip balon sau cele bazate pe snake folosesc doar informaţia existentă de-a lungul conturului şi
necesită o bună estimare a poziţiei de iniţializare pentru obţinerea unei convergenţe corecte.
Avantajul metodelor de region growing este acela că se bazează pe statistici realizate în
interiorul fiecărei regiuni. Cele trei tehnici nu folosesc informaţia existentă la nivelul întregii
imagini. Spre deosebire de acestea, metodele bazate pe energie, bayes sau MDL, utilizează
criterii globale, dar fiind bazate pe o minimizare, miinimul este de multe ori greu de atins.
Tehnica region growing detectează o regiune identificând acei pixeli conectaţi la punctul
de pornire care au intensitatăţi “similare”. Algoritmul recursiv asigură extinderea regiunii în
patru direcţii (spre cei patru pixeli vecini), dacă intensităţile acestora se încadrează în intervalul
[m-t, m+t], unde m este intensitatea medie a regiunii, iar t este o valoare prag introdusă de
utilizator (parametru). Un alt parametru care trebuie introdus de utilizator este punctul de pornire
care poate fi introdus printr-un click al mouse-ului pe imagine sau prin precizarea directă a
coordonatelor acestuia. Ieşirea programului constă într-o copie binară a imaginii procesate, în
care, un 1 reprezintă un pixel al obiectului detectat, iar un 0 indică un pixel care aparţine
fundalului.
Un alt algoritm region growing împarte imaginea în blocuri de aceeaşi dimensiune. Se
recomandă divizarea în blocuri de 2x2 în cazul în care se aplică direct algoritmul region
growing, respectiv de 16x16 dacă se efectuează şi etapa merge-split.
În etapa opţională merge-split se foloseşte un prag (threshold) introdus de utilizator.
Valoarea acestui prag determină care blocuri pot fi combinate (unite) într-un singur bloc şi care
blocuri pot fi divizate în blocuri mai mici, în funcţie de diferenţa dintre intensitatea maximă şi
minimă din fiecare bloc. Dacă diferenţa max-min a unui bloc este apropiată de diferenţa max-
min a unui bloc vecin (diferenţa max-min aferentă celor două blocuri este sub valoarea pragului),
atunci blocurile se unesc într-unul singur. Un bloc este divizat (1/2 sau 1/4) dacă diferenţa min-
max este peste prag. Procesul merge-split se aplică recursive până când nici un bloc nu satisface
criteriul de a fi divizat sau unit. Astfel, un bloc a cărui diferenţă max-min depăşeşte valoarea
pragului, va fi divizat până când diferenţele max-min aferente blocurilor obţinute sunt sub prag,
24
sau dimensiunile acestora ajung la un pixel, în acest caz diferenţa max-min fiind zero. Pentru
evitarea divizării imaginii într-un număr prea mare de regiuni foarte mici, se poate folosi un
parametru (introdus de utilizator) care precizează dimensiunea minimă a blocurilor obţinute prin
procesul de divizare. Astfel, utilizatorul poate forţa terminarea algoritmului de segmentare cu un
număr mic de regiuni, deoarece blocurile generate nu vor fi mai mici decât dimensiunea
specificată.
Etapa region growing analizează fiecare bloc unindu-l cu blocuri adiacente care satisfac
un anumit criteriu. Un criteriu constă în diferenţa max-min şi determină aderarea acelor blocuri
adiacente la o regiune, ale căror diferenţă max-min se încadrează cu o anumită toleranţă
(specificată de utilizator) în diferenţa max-min a regiunii. Această toleranţă nu trebuie să fie
identică cu pragul folosit în etapa merge-split. Un alt criteriu care determină care blocuri pot fi
unite, constă în intensitatea medie a blocurilor. În acest caz, algoritmul asigură aderarea unui
bloc la o regiune, dacă intensitatea medie a blocului se încadrează în intervalul [m-t, m+t], unde
m este intensitatea medie a regiunii, iar t este o valoare prag introdusă de utilizator (parametru).
Etapa dissolve combină regiunile care au o dimensiune mai mică decât un prag (stabilit
de utilizator) cu regiunea adiacentă având cea mai apropiată medie a intensităţilor. În felul acesta
se reduce numărul de regiuni, cele mai puţin semnificative fiind eliminate.
Aplicaţii
Să se implementeze, la alegere, unul din cei doi algoritmi de segmentare region growing,
prezentaţi în lucrare.
25
10. Corelaţia imaginilor
Coeficientul de corelaţie este o metrică care exprimă similaritatea (nivelul de potrivire)
dintre două semnale, de aceea, este foarte des folosit pentru căutarea şabloanelor (template
matching). Coeficientul de corelaţie r al perechii (x, y) se calculează folosind următoarea
formulă:
n
y
yn
x
x
n
y
xyx
rn
i
in
i
i
n
i
in
i
i
n
i
in
i
i
n
i
ii
xy2
1
1
2
2
1
1
2
1
11
Următorul pseudo-cod prezintă algoritmul care determină coeficientul maxim de corelaţie (cea
mai bună potrivire) aferent unei perechi de imagine/şablon:
template_size = M * M; sum = 0; sqrsum = 0; for j = 0 to M-1 { for i = 0 to M-1 { sum += template[j, i]; sqrsum += template[j, i] * template[j, i]; } } mean_template = sum / template_size; var2template = sqrsum – (sum * sum) / template_size;
for y = 0 to N-M //image rows { for x = 0 to N-M //image columns { sum = 0; sqrsum = 0; prodsum = 0; for j = 0 to M-1 //template rows { for i = 0 to M-1 //template columns { sum += image[y+j, x+i]; sqrsum += image[y+j, x+i] * image[y+j, x+i]; prodsum += image[y+j, x+i] * template[j, i]; } } var2image = sqrsum – (sum * sum) / template_size; corr_coeff[y,x] = (prodsum – (mean_template * sum)) / sqrt(var2image * var2template); } }
26
unde image şi template sunt imagini bidimensionale de mărime N*N respectiv M*M, iar
var2image este suma pătratelor distanţelor dintre intensităţile pixelilor din imagine acoperite de
şablon. Aşa cum se poate observa, valorile mean_template, var2template respectiv template_size
pot fi precalculate şi folosite pentru toţi coeficienţii de corelaţie dintr-o pereche imagine/şablon.
Algoritmul poate fi folosit şi pentru estimarea locală a mişcării (vezi următoarea lucrare de
laborator).
Aplicaţii
Să se implementeze algoritmul prezentat în lucrare. Pentru testare se va alege un set de imagini
şi o imagine şablon. Pentru fiecare imagine se va determina coeficientul maxim de corelaţie cu
imaginea şablon.
27
11. Algoritmi block matching
Algoritmii block matching [1, 4] sunt cele mai cunoscute metode de măsurare a
similarităţii dintre două imagini şi sunt folosite pentru estimarea mişcării. Aceste metode au fost
adoptate de diverse standarde de codificare a imaginilor video. Metodele block matching
presupun faptul că un bloc de pixeli are aceeaşi mişcare de translaţie de la un cadru la altul. Cele
mai utilizate metode de comparare a blocurilor (măsuri de similaritate) au la bază suma
pătratelor diferenţelor SSD (Sum of Squared Differences), respectiv, suma diferenţelor absolute
SAD (Sum of Absolute Differences). De multe ori se preferă utilizarea metodei SAD datorită
nivelului mic de complexitate (mai ales în implementările hardware).
Figura 15. Algoritmul block matching
Considerând blocuri de dimensiune NxN, şi un vector de deplasament (u, v) al unui bloc
candidat relativ la blocul şablon, cele două metrici de similaritate pot fi exprimate în felul
următor:
1
0
1
0
1),( ),(),(N
j
N
i
ttvu vjuifjifSAD
1
0
1
0
2
1),( ),(),(N
j
N
i
ttvu vjuifjifSSD
Algoritmul Full-Search (FS) compară un anumit bloc B cu toate blocurile din fereastra
de căutare şi găseşte vectorul de mişcare optim dintre toţi vectorii de mişcare din interiorul
ferestrei. De aceea, acest algoritm necesită un număr mare de calcule. Din cauza complexităţii
ridicate, algoritmul nu poate fi folosit în aplicaţii de timp real.
Algoritmul de căutare în trei paşi (Three Step Search), propusă de Koga în 1981, se
bazează pe o abordare a căutării de la grosier la fin, ceea ce duce la o scădere logaritmică la
fiecare pas [1]. Aşa cum se poate observa în Figura 16, la fiecare pas se verifică nouă puncte, iar
punctul de minim al unei măsuri devine centrul de plecare al pasului următor. Căutarea se începe
cu punctele marcate cu 0 (centrul de căutare) iar apoi cu cele marcate cu 1. Dacă în punctul 0 se
obţine similaritate maximă, atunci blocul este considerat static. Dacă într-unul din punctele
marcate cu 1 se obţine similaritate maximă, atunci acel punct devine noul centru, iar căutarea va
continua în punctele marcate cu 2, şi aşa mai departe. Distanţa dintre punctele evaluate se
înjumătăţeşte la fiecare pas al algoritmului.
28
Figura 16. Algoritmul de căutare în trei paşi
Alţi algoritmi care reduc gradul de complexitate sunt: căutarea în patru paşi, căutarea
logaritmică 2-D, căutarea ortogonală, căutarea în cruce, căutarea gradient descent.
Aplicaţii
Să se implementeze şi să se compare cei doi algoritmi de block matching prezentaţi în lucrare:
Full Search respectiv căutarea în trei paşi.
29
Bibliografie
[1] Brad R., Procesarea Imaginilor şi Elemente de Computer Vision, Editura Universităţii
“Lucian Blaga” din Sibiu, 2003.
[2] Gellert A., Brad R., Context-Based Prediction Filtering of Impulse Noise Images, IET Image
Processing, Vol. 10, Issue 6, pag. 429-437, Stevenage, United Kingdom, June 2016.
[3] Gellert A., Brad R., Studying the influence of search rule and context shape in filtering
impulse noise images with Markov chains, Signal, Image and Video Processing, Springer
London, Vol. 12, Issue 2, pag. 315-322, February 2018.
[4] Ho H., 2D-3D Block Matching, MSc Thesis, University of Auckland.
[5] http://www.cee.hw.ac.uk/hipr/
[6] http://www.ittc.ku.edu/~jgauch/research/kuim/html/00.00.html.