Sunteți pe pagina 1din 19

Procesarea imaginilor folosind logica fuzzy

M. Ivanovici
6 noiembrie 2007
BREVIAR TEORETIC
1 Conceptele de baza ale logicii fuzzy
Logica clasic a sau boolean a este construit a pe dou a valori de adev ar: adev arat
sau fals (TRUE sau FALSE, 1 sau 0): un obiect este e alb e negru,
e mare e mic, neexist and o situat ie intermediar a. Logica fuzzy, for-
mulat a de c atre Zadeh n 1965, ofer a o modalitate matematic a de a cuan-
tica incertitudinea unei exprim ari vagi sau incomplete folosite pentru trans-
miterea unei anumite informat ii: e cam mare, e aproape negru, e 75%
adev arat.
Diferent a esent ial a dintre logica clasic a si cea fuzzy, este faptul c a legea
tert ului exclus, denit a de Aristotel, nu mai este valabil a.

In Figura 1
este ilustrat a diferent a ntre logica boolean a si cea fuzzydac a n primul
caz exist a o delimitare clar a ntre cele dou a valori de adev ar, n al doilea caz
exist a o zon a de nedeterminare, n care valoarea de adev ar poate 0 si 1 n
acelasi timp, ntr-o anumit a m asur a dat a de gradul de apartenent a.
FALSE TRUE
1 0
F
A
L
S
E
T
R
U
E
G
r
a
d

d
e

a
p
a
r
t
e
n
e
n
t
a
(a) (b)
Figure 1: Ilustrarea mult imilor TRUE si FALSE n (a) logica boolean a
si (b) logica fuzzy.
1
Logica fuzzy poate folosit a atunci c and nu exist a o delimitare clar a
ntre mult imile ce reprezint a valorile unei m arimi sau propriet at i, sau eveni-
mentele sau st arile posibile ale unei variabile aleatoare.
1.1 Mult imile fuzzy
Conceptul de mult ime fuzzy, introdus de c atre Zadeh, a ap arut ca o urmare
reasc a a imposibilit at ii de a modela un sistem indenit (engl. ill-dened)
cu ajutorul unor instrumente matematice precise, cum ar cele ale teoriei
probabilistice.
Fie X o colect ie de obiecte. Mult imea fuzzy A denit a pe mult imea X
este o mult ime de perechi ordonate:
A = {
A
(x)/x} (1)
unde
A
(x) reprezint a funct ia caracteristic a sau funct ia de apartenent a a
lui x la mult imea A. Semnul / este folosit doar pentru a delimita valoarea
real a x de valoarea funct iei de apartenent a
A
(x).
Funt ia de apartenent a se deneste pe intervalul de valori posibile ale lui
x cu valori reale, n intervalul [0,1]:
A
[0, 1].
Dac a A cont ine doar 0 si 1, atunci A nu mai este o mult ime fuzzy, ci
una caracteristic a logicii clasice. Dac a funct ia de apartenent a este discret a,
atunci mult imea A se scrie ca:
A =
1
/x
1
+
2
/x
2
+... +
n
/x
n
=
n

i=1

i
/x
i
(2)
Dac a funct ia de apartenent a este o funct ie continu a, atunci mult imea
fuzzy A se scrie ca:
A =
_
X

A
(x)/x (3)
unde prin integrare se nt elege totalitatea punctelor
A
(x)/x.
1.2 Proprietat ile mult imilor fuzzy
Normalitatea. O mult ime fuzzy este normal a dac a valoarea maxim a
a funct iei sale de apartenent a este 1:

x
(x) = 1
unde
x
reprezint a supremul sau maximul lui (x).

In caz contrar,
mult imea se zice c a este subnormal a. Figura 2 prezint a dou a astfel de
mult imi fuzzy.
2
1
G
r
a
d

d
e

a
p
a
r
t
e
n
e
n
t
a
0 x
1
G
r
a
d

d
e

a
p
a
r
t
e
n
e
n
t
a
0 x
(a) (b)
Figure 2: O mult ime fuzzy (a) normal a si (b) subnormal a.
Convexitatea. O mult ime fuzzy A este convex a dac a si numai dac a
mult imile A

denite ca:
A

= {x|
A
(x) }
sunt convexe pentru orice [0, 1].

In Figura 3 sunt exemplicate
dou a astfel de mult imi. Mult imea A

cont ine valorile pentru care


funct ia de apartenent a este egal a sau mai mare dec at pragul .
G
r
a
d

d
e

a
p
a
r
t
e
n
e
n
t
a
x
G
r
a
d

d
e

a
p
a
r
t
e
n
e
n
t
a
x
(a) (b)
Figure 3: O mult ime fuzzy (a) convex a si (b) neconvex a.
Punctul crossover. Punctul crossover al unei mult imi fuzzy A
este elementul pentru care funct ia de apartenent a are valoarea 0.5.
Valori singulare fuzzy. O valoare singular a (engl. singleton) este
o mult ime fuzzy care are un grad de apartenent a pentru o singur a
valoare. Fie A o valoare singular a pentru un interval X, x X,
atunci A poate scris a ca:
A = /x
3
Folosind aceast a denit ie, o mult ime fuzzy poate considerat a o re-
uniune de valori singulare.
1.3 Operat ii cu mult imi fuzzy
Intersect ia fuzzy. Interset ia a dou a mult imi fuzzy este echivalent a
cu operat ia SI logic, reprezent and minimul dintre dou a grade de
apartenent a:
A(x) B(x) =

A
(x)
B
(x)
unde reprezint a funct ia minim.
Rezultatul operat iei de interset ie fuzzy dintre mult imile A si B din
Figura 4 este reprezentat de c atre aria hasurat a.
1
G
r
a
d

d
e

a
p
a
r
t
e
n
e
n
t
a
0 x
A
B
Figure 4: Interset ia a dou a mult imi fuzzy.
Reuniunea fuzzy. Reuniunea a dou a mult imi fuzzy este interpretat a
ca funct ia SAU logic, iar pentru dou a grade de apartenent a,
A
(x)
si
B
(x),va lua valoarea maxim a:
A(x) B(x) =

A
(x)
B
(x)
unde reprezint a funct ia maxim.

In Figura 5 este gurat rezultatul
operat iei de reuniune fuzzy.
4
1
G
r
a
d

d
e

a
p
a
r
t
e
n
e
n
t
a
0 x
A
B
Figure 5: Reuniunea a dou a mult imi fuzzy.
Complementul fuzzy. Complementul unei mult imi fuzzy A (vezi
Figura 6, echivalent cu operat ia de negare logic a, este denit de:
A =

1
A
(x)
unde cu A am notat complementul fuzzy al mult imii A.
not(A)
A
1
G
r
a
d

d
e

a
p
a
r
t
e
n
e
n
t
a
0 x
Figure 6: Complementul unei mult imi fuzzy.
Combinat ia convex a. Combinat ia convex a este un operator care
combin a mai multe mult imi fuzzyntr-o singur a mult ime fuzzy, folosind
ponderi asociate ec arei mult imi. Funct ia de apartenent a total a
T
(x)
reprezint a combinat ia liniar a a funct iilor de apartenent a
A
1
, ...,
An
:

T
(x) = w
1
(x)
A
1
(x) +w
2
(x)
A
2
(x) +... +w
n
(x)
An
(x)
unde w
1
, w
2
, ..., w
n
sunt ponderile asociate mult imilor fuzzy A
1
, A
2
, ..., A
n
,
astfel nc at:
w
1
(x) +w
2
(x) +... +w
n
(x) = 1
5
Concentrarea fuzzy. Concentrarea unei mult imi fuzzy are ca rezul-
tat o reducere a gradului de apartenent a, prin ridicare la p atrat a
valorilor funct iei de apartenent a. Daca A este o mult ime fuzzy:
A = {
1
/x
1
+
2
/x
2
+... +
n
/x
n
}
atunci concentratorul fuzzy aplicat acestei mult imi se noteaz a cu CON(A)
si este denit astfel:
CON(A) = A
2
= {
2
1
/x
1
+
2
2
/x
2
+... +
2
n
/x
n
}
Dilatarea fuzzy. Dilatarea fuzzy este un operator care m areste
gradul de apartenent a a unei valori la mult imea fuzzy, prin aplicarea
operatorului de extragere a r ad acinii p atrate. Operat ia de dilatare se
noteaz a cu DIL(A) si se deneste ca:
DIL(A) = A
0.5
= {
0.5
1
/x
1
+
0.5
2
/x
2
+... +
0.5
n
/x
n
}
Este evident faptul c a operat ia de dilatare are un efect opus celei de
concentrare.
Plus si minus fuzzy. Operat iile de plus si minus fuzzy au un efect
similar cu operat iile de concentrare si dilatare, cu deosebirea c a efectul
este mai put in pronunt at. Pentru o mult ime fuzzy A, aceste operat ii
se denesc astfel:
Plus(A) = A
1.25
Minus(A) = A
0.75
Intensicarea fuzzy. Acest operator m areste gradul de apartenent a
pentru valorile mai mari dec at punctul de crossover ( = 0.5) si l
micsoreaz a pentru acele valori mai mici dec at acest punct. Pentru o
mult ime fuzzy A, x A, atunci intensicarea fuzzy se deneste ca:

INT(A)
(x)
A
(x),
A
(x) 0.5

INT(A)
(x)
A
(x),
A
(x) < 0.5
6
1.4 Funct iile de apartenent a
Pentru o anumit a aplicat ie care foloseste logica fuzzy, alegerea funct iilor de
apartenent a reprezint a elementul cheie, de care vor depinde performant ele
acelei aplicat ii.

In spiritul logicii fuzzy, funct iile de apartenent a ar trebui s a
reecte o m asur a subiectiv a, mai degrab a dec at una obiectiv a.

In unele cazuri, funct iile de apartenenent a sunt generate pe baza unor


date experimentale sau de antrenare, folosind tehnici de clustering sau de
clasicare. Un algoritm de clustering sau clascare poate folosit pentru a
estima distribut iile datelor de intrare, pe baza c arora pot generate funct iile
de apartenent a.
Alegerea funt iilor de apartenent a depinde n general de problem a, dar
exist a c ateva funct ii folosite n mod uzual, de form a triunghiular a, trape-
zoidal a, n form a de clopot sau n form a de S.
Funct ia de apartenent a triunghiular a se noteaz a cu (x; a, b, c) si are
urm atoarea expresie matematic a:
(x; a, b, c) =
_

_
0 x a,
xa
ba
a < x b,
cx
cb
b < x c,
0 x > c.
(4)
Funct ia de form a trapezoidal a se noteaz a cu (x; a, b, c, d) si are expresia:
(x; a, b, c, d) =
_

_
0 x a,
xa
ba
a < x b,
1 b < x c,
dx
dc
c < x d,
0 x > d.
(5)
Funct ia n form a de S propus a de Zadeh se noteaz a cu S(x; a, b, c) si
este:
S(x; a, b, c) =
_

_
0 x a,
2(
xa
ca
)
2
a < x b,
1 2(
xc
ca
)
2
b < x c,
0 x > c.
(6)
Funct ia de apartenent a n form a de clopot (x; a, b, c), similar a funct iei
Gauss, se poate deni pe baza funct iei S astfel:
(x; b, c) =
_
S(x; c b, c b/2, c) x c,
1 S(x; c, c +b/2, c +b) x > c.
(7)
Dup a alegerea funct iilor de apartenent a, de regul a este nevoie de a con-
strui un set de funct ii de apartenent a pentru toate mult imile fuzzy asociate
cazurilor problemei. De exemplu, n Figura 7 este prezentat un set de funct ii
7
triunghiulare si trapezoidale uniform distribuite pe intervalele de nivele de
gri corespunz atoare atributelor foarte mic, mic, mediu, mare si
foarte mare.
foarte mic
1
0
mic mediu mare mare foarte
255
(a)
foarte mic mic mediu mare foarte mare
1
0 255
(b)
Figure 7: Set de funct ii de apartenent a (a) triunghiulare si (b) trapezoidale.
2 Detect ia contururilor folosind logica fuzzy
Datorit a capacit at ii abord arilor fuzzy de a reprezenta informat iile imprecise
sau neclare, acestea sunt mai put in sensibile la alegerea parametrilor, cum
ar valoarea de prag pentru un detector de contur.
Abordarea propus a n [2] combin a reguli de tip If-Then pentru a atribui
ec arui pixel o valoare reprezent and gradul de apartenent a a acestuia la
mult imea pixelilor de contur, form and astfel o mult ime a potent ialilor pixeli
de contur
1
.
Funct ii de apartenent a caracterizeaz a diferent ele dintre nivelul de gri al
pixelului considerat la un moment dat si nivelele de gri ale pixelilor vecini.
Aceste diferent e, n valoare absolut a, pot caracterizate ca ind mici
(small) sau mari (large), astfel ind denite dou a mult imi fuzzy c arora
le pot apart ine: mult imea fuzzy a diferent elor mici si mult imea fuzzy a
diferent elor mari.
Funct iile de apartenent a,
small
si
large
snt denite ca ind comple-
mentare (
large
= 1
small
), si au urm atoarele expresii matematice:
1
PEP = (eng.) Potential Edge Pixel.
8

small
(x) =
_

_
1 x [0, 5],
128x
123
x (5, 128],
0 x (128, 255].
(8)

large
(x) =
_

_
0 x [0, 5],
x5
123
x (5, 128],
1 x (128, 255].
(9)
Gracul acestor funct ii de apartenent a este prezentat n gura (8).
128
1
0.5
0
5 255

small

large
diferente
nivel de gri
Figure 8: Funct iile de apartenent a ale diferent elor de nivele de gri.
S-au folosit funct ii liniare pentru simplitate. Pragul inferior av and val-
oarea 5 este ales diferit de zero pentru a evita o prea mare sensibilitate la
zgomot.
Pentru aplicarea regulilor fuzzy If-Then se folosesc 8 m asti p atrate de
dimensiune 3x3, astfel:
unde unii pixeli vecini pixelului curent (x) au fost marcat i cu S, de la
small, iar alt ii cu L, de la large.
Pentru ecare masc a, se noteaz a cu D
S
diferent a n modul dintre val-
oarea pixelului central x, si valoarea unui pixel notat cu S, si se noteaz a
cu D
L
diferent ele n modul dintre valoarea aceluiasi pixel central si val-
oarea unui pixel notat cu L. Aceste diferent e snt caracterizate de cele dou a
mult imi fuzzy denite anterior. Funct iile de apartenent a snt asociate aces-
tor diferent e.
Pentru ecare masc a se deneste o regul a fuzzy de tip If-Then, astfel:
If {toate diferent ele D
S
sunt mici} AND
{toate diferent ele D
S
sunt mari} Then
pixelul central al m astii este considerat un potent ial
pixel de contur (PEP-Potential Edge Pixel).
9
M1 M2 M3 M4
M5 M6 M7 M8
L L L
L
L L L
L
L
L
L L
L L L L L
L
L
L
L L L
L
S S S S S
S
S
S
S
S S
S
S S S
S
S S S
S
S
S
S S
x x x x
x x x x
Figure 9: M asti de tip compas.
Pentru ecare masc a M
i
se calculeaz a gradul de apartenent a a pixelului
central la mult imea potent ialilor pixeli de contur, astfel:

PEP M
i
= (toate
small
(D
S
), toate
large
(D
L
)) (10)
unde operatorul reprezint a funct ia minim.
Dup a ce au fost calculate cele 8 valori reprezent and gradele de apartenent a
la mult imea fuzzy PEP, pentru ecare masc a n parte, se calculeaz a pentru
pixelul central gradul nal de apartenent a la mult imea fuzzy PEP, astfel:

PEP
=
8
(
PEP M
i
) (11)
unde operatorul reprezint a funct ia de maxim.
Pentru ecare pixel din imagine se calculeaz a gradul
PEP
de apartenent a
la mult imea PEP si i se atribuie o valoare de nivel de gri de 255
PEP
, care
poate privit a ca ind valoarea n modul a unui operator de tip gradi-
ent. Direct ia acestui gradient poate direct ia dat a de masc a ce corespunde
valorii maxime dintre cele 8 valori
PEP M
i
.
10
(a) (b)
Figure 10: Imaginea (a) original a si (b) contururile obt inute folosind algo-
ritmul fuzzy prezentat.
3 Segmentarea imaginilor folosind logica fuzzy
Algoritmii ce folosesc logica fuzzy pentru segmentarea imaginilor pot
clasicat i n urm atoarele categorii:
Grupare (clustering) fuzzy. Aceast a categorie de algoritmi reprezint a
una din primele abord ari a problemei segment arii imaginilor. Algorit-
mii de clustering pot folosit i pentru a forma segmente, grup and pixeli
ce respect a un anumit criteriu de similitudine. Funct ia de apartenent a
a pixelilor la o anumita clas a poate interpretat a ca m asura compat-
ibilit at ii cu acel criteriu sau ideal. Din aceast a categorie face parte
algoritmul fuzzy c-means pe care l vom prezentan cele ce urmeaz a.
Algoritmi bazat i pe reguli. Pentru segmentare pot folosite reguli
de tip If-Then, pentru interpretarea cont inutului imaginii. Un exemplu
de o astfel de regul a fuzzy este urm atorul:
If pixelul este ntunecat
And vecinii lui sunt si ei ntunecat i And omogeni
Then pixelul apart ine fundalului.
Algoritmi bazat i pe interpretarea fuzzy a informat iei. Folosind
logica fuzzy putem deni entropia fuzzy sau divergent a fuzzy, care pot
folosite pentru a segmenta o imagine, de exemplu prin pr aguirea
histogramei. O funct ie de apartenent a poate glisat a de-alungul
histogramei, iar pragul va ales astfel nc at funct ia care deneste
entropia fuzzy s a nregistreze un minim.
11
Geometrie fuzzy. M asuri geometrice fuzzy, cum ar indicele de
acoperire al ariei sau indicele fuzzy al gradului n care un obiect este
compact, pot folosite pentru a caracteriza diverse regiuni ale unei
imagini. Minimizarea unor astfel de indici poate aplicat a n cazul
unor clasic ari fuzzy.
Printre algoritmii de clustering amintim algoritmii c-means, cuantizare
vectorial a adaptiv a
2
si h art i cu auto-organizare
3
.

In cadrul acestei sect iuni
despre segmentare, vom prezenta algoritmul de clustering c-means clasic si
varianta sa fuzzy.
Procesul de clustering reprezint a procesul de obt inere a unor partit ii
(sau submult imi) ale unei mult imi de obiecte, folosind o anumit a m asur a a
asem an arii dintre obiectele ce alc atuiesc o partit ie. O astfel de m asur a poate
distant a Euclidian a, n cazul unor vectori n-dimensionali. O partit ie a
mult imii poart a numele de cluster, iar centrele acestor partit ii poart a numele
de centroizi sau prototipuri.

In continuare, vom folosi distant a Euclidian a dintre doi vectori, X


i
si
X
j
, av and componentele x
ik
si respectiv x
jk
, ca ind:
d(X
i
, X
j
) =

k
(x
ik
x
jk
)
2
(12)
3.1 Algoritmul de clustering c-means
Algoritmul c-means reprezint a o metod a de nv at are nesupervizat a, care
poate folosit a pentru clasicare atunci c and num arul de clustere sau
partit ii este cunoscut. Algoritmul Kohonen este un alt algoritm de nv at are
nesupervizat a.
Algoritmul c-means are urm atorii pasi:
1. Se alege num arul de partit ii, k,
2. Se aleg centroizii init iali ai partit iilor, c
1
, c
2
, ..., c
k
, ca ind k vectori
din setul de antrenare,
3. Se clasic a ecare vector x
l
= [x
l1
, x
l2
, ..., x
ln
]
T
, n ind dimensiunea
vectorilor setului de antrenare, ca ind de tipul celui mai apopriat
centroid c
i
, folosind drept criteriu distant a Euclidian a:
||x
l
c
i
|| = min
j
||x
l
c
j
||
2
Adaptive Vector Quantization (AVQ).
3
Self-Organizing Map (SOM).
12
4. Se recalculeaz a valorile estimate pentru centroizii c
i
ai partit iilor:
c
im
=

X
l
i
cluster i
x
l
i
m
N
i
unde N
i
este num arul de vectori din partit ia i,
5. Dac a nici unul din centroizii c
i
nu se modic a la pasul precedent,
atunci procesul de clustering nceteaz a. Altfel se reia algoritmul de la
pasul 3.
Pentru ecare partit ie i rezultat a se poate calcula variant a valorilor din
acea partit ie, folosind formula:
v
im
=

X
l
i
cluster i
(x
l
i
mc
im
)
2
N
i
(13)
Av and centrele si variant ele valorilor din ecare partit ie, putem genera
funct ii de apartenent a pentru clasele sau partit iile respective. Cu alte cu-
vinte, cu ajutorul algoritmului de clustering obt inem o mp art ire a spat iului
n partit ii, pe baza c arora vom deni sau construi funct ii de apartenent a pe
care s a le folosim apoi pentru o anumit a aplicat ie ce foloseste logica fuzzy,
cum ar segmentarea. Generarea funct iilor de apartenent a pe baza cen-
troizilor si a variant elor partit iilor obt inute prinr-un algoritm de clustering
este ilustrat a n Figura 11, pentru cazul unor vectori bidimensionali.
3.2 Algoritmul de clustering c-means fuzzy

In varianta clasic a a algoritmului c-means ecare vector apart ine doar unei
partit ii si toate partit iile sunt privite ca submult imi disjuncte ale setului
de vectori de antrenare.

In practic a exist a multe cazuri n care partit iile
nu sunt complet disjuncte, vectorii put and clasicat i ca apart in and mai
multor partit ii n acelasi timp.

Intr-un astfel de caz, separarea dintre partit ii
devine o not iune vag a, logica fuzzy ind potrivit a pentru abordarea unei
astfel de probleme.
Algoritmul fuzzy c-means este cel mai cunoscut si mai utilzat algo-
ritm fuzzy de clustering. Algoritmul se bazeaz a pe minimizarea iterativ a
a urm atoarei funct ii:
J(U, V ) =
c

i=1
n

k=1
u
m
ik
|x
k
v
i
|
2
(14)
unde:
x
1
, ..., x
n
sunt vectori ai setului de antrenare,
13
x
x
x
x
0 1
X2
X1
0
1
C1
C2
C3
C4
Figure 11: Generarea funct iilor de apartenent a pe baza centroizilor si
variant elor partit iilor.
V = v
1
, ..., v
c
sunt centroizii partit iilor,
U = [u
ik
] este o matrice de dimensiune cn, n care u
ik
este valoarea de
apartenent a a vectorului x
k
la partit ia i. Aceste valori de apartenent a
satisfac urm atoarele condit ii:
0 u
ik
1 i = 1, 2, ..., c; k = 1, 2, ..., n
c

i=1
u
ik
= 1 k = 1, 2, ..., n
0 <
n

k=1
u
ik
< n i = 1, 2, ..., c
m [1, ) este un factor de ponderare de tip exponent.
Funt ia J(U, V ) reprezint a suma p atratelor distant elor Euclidiene din-
tre ecare vector si centrul partit iei corespunz atoare acelui vector, distant e
14
ponderate de valorile de apartenent a fuzzy. Pentru calculul centrului unei
partit ii tot i vectorii sunt luat i n considerare. Pentru ecare vector, val-
oarea de apartenent a la ecare clas a depinde de distant a la centroidul core-
spunz ator. Factorul de ponderare mreduce inuent a valorilor de apartenent a
mici. Cu c at m este mai mare, cu at at se reduce inuent a vectorilor cu valori
de apartenent a mici.
Algoritmul fuzzy c-means este unul iterativ si are urm atorii pasi:
1. Se init ializeaz a U
(0)
cu valori aleatorii sau pe baza unei aproxim ari.
Se init ializeaz a V
(0)
si se calculeaz a U
(0)
. Se init ializeaz a num arul de
iterat ii = 1. Se aleg num arul de partit ii c si ponderea m.
2. Se calculeaz a centroizii partit iilor. Pentru U
()
dat, se calculeaz a V
()
folosind formula:
v
i
=
1
n

k=1
u
m
ik
n

k=1
u
m
ik
x
ik
i = 1, 2, ..., c (15)
3. Se actualizeaz a valorile de apartenent a. Pentru V
()
dat se calculeaz a
U
()
folosind formula:
u
ik
=
_
1
|x
k
v
i
|
2
_ 1
m1
c

j=1
_
1
|x
k
v
j
|
2
_ 1
m1
i = 1, 2, ..., c; k = 1, 2, ..., n (16)
4. Se opreste iterat ia dac a:
max|u
()
ik
u
(1)
ik
| (17)
altfel se trece la iterat ia urm atoare, = + 1 si se reia algoritmul de
la pasul 2. este o valoare mic a predenit a care reprezint a cea mai
mic a modicare acceptabil a pentru valorile lui U.
DESF

ASURAREA LUCR

ARII
Problema 1.

In continuare sunt prezentate implement arile funct iilor de
apartenent a
small
si
large
:
15
double ImageViewer :: miu_small( int x )
{
if( x >= 0 && x <= 5 )
return 1;
if( x > 5 && x < 128 )
return 1. * ( 128 - x ) / 123;
}
double ImageViewer :: miu_large( int x )
{
if( x > 128 && x <= 255 )
return 1;
if( x >= 5 && x <= 128 )
return 1. * ( x - 5 ) / 123;
}
Problema 2.

In continuare este prezentat a implementarea n C a al-
goritmului de detect ie de contur folosind logica fuzzy prezentat. Citit i si
nt eleget i codul.
void ImageViewer :: fuzzy( void )
{
int i, j, w, h, k, l, m, n, p;
int gri, niv, nivd;
QRgb pixel, pixeld;
QImage fuz;
fuz = image.copy();
int M[ 8 ][ 3 ][ 3 ]; //cele 8 masti de tip compas
int dif[ 3 ][ 3 ]; //matricea diferentelor
double miu[ 3 ][ 3 ]; //matricea miu( diferente )
double min, max;
double PEP, PEP_M[ 8 ];
int nr;
M[0][0][0] = 1; M[0][0][1] = 1; M[0][0][2] = 1;
M[0][1][0] = 0; M[0][1][1] = 0; M[0][1][2] = 0;
M[0][2][0] = -1; M[0][2][1] = -1; M[0][2][2] = -1;
M[1][0][0] = 1; M[1][0][1] = 1; M[1][0][2] = 0;
M[1][1][0] = 1; M[1][1][1] = 0; M[1][1][2] = -1;
16
M[1][2][0] = 0; M[1][2][1] = -1; M[1][2][2] = -1;
M[2][0][0] = 1; M[2][0][1] = 0; M[2][0][2] = -1;
M[2][1][0] = 1; M[2][1][1] = 0; M[2][1][2] = -1;
M[2][2][0] = 1; M[2][2][1] = 0; M[2][2][2] = -1;
M[3][0][0] = 0; M[3][0][1] = -1; M[3][0][2] = -1;
M[3][1][0] = 1; M[3][1][1] = 0; M[3][1][2] = -1;
M[3][2][0] = 1; M[3][2][1] = 1; M[3][2][2] = 0;
M[4][0][0] = -1; M[4][0][1] = -1; M[4][0][2] = -1;
M[4][1][0] = 0; M[4][1][1] = 0; M[4][1][2] = 0;
M[4][2][0] = 1; M[4][2][1] = 1; M[4][2][2] = 1;
M[5][0][0] = -1; M[5][0][1] = -1; M[5][0][2] = 0;
M[5][1][0] = -1; M[5][1][1] = 0; M[5][1][2] = 1;
M[5][2][0] = 0; M[5][2][1] = 1; M[5][2][2] = 1;
M[6][0][0] = -1; M[6][0][1] = 0; M[6][0][2] = 1;
M[6][1][0] = -1; M[6][1][1] = 0; M[6][1][2] = 1;
M[6][2][0] = -1; M[6][2][1] = 0; M[6][2][2] = 1;
M[7][0][0] = 0; M[7][0][1] = 1; M[7][0][2] = 1;
M[7][1][0] = -1; M[7][1][1] = 0; M[7][1][2] = 1;
M[7][2][0] = -1; M[7][2][1] = -1; M[7][2][2] = 0;
w = image.width();
h = image.height();
for( i = 1; i < w - 1 ; i++ )
for ( j = 1; j < h - 1; j++ )
{
//pixelul curent (i,j)
pixel = image.pixel( i, j );
niv = qRed( pixel );
//parcurge o vecinatate 3x3, pentru calculul diferentelor
for( k = -1; k < 2; k++ )
for( l = -1; l < 2; l++ )
{
pixeld = image.pixel( i + k, j + l );
nivd = qRed( pixeld );
//calculeaza diferenta intre pixelul considerat si
17
//pixelii din vecinatatea sa ( 3x3 )
dif[ k + 1 ][ l + 1 ] = (int)( abs(niv - nivd) );
//verifica daca pixelul considerat respecta vreuna
//din cele 8 reguli IF-THEN, calculind astfel PEP
for( m = 0; m < 8; m++ )
{
//pentru fiecare regula utilizeaza o masca compas
nr = 0;
min = 2; //val > 1 (max)
for( n = 0; n < 3; n++ )
for( p = 0; p < 3; p++ )
{
switch( M[ m ][ n ][ p ] )
{
case -1:
{
miu[n][p] = miu_small( dif[n][p] );
break;
}
case 0:
{
miu[n][p] = 0;
break;
}
case 1:
{
miu[n][p] = miu_large( dif[n][p] );
break;
}
}
//numara de cite ori Ds / Dl sunt small / large
if( miu[ n ][ p ] != 0 )
nr++;
//determina miu_ cel mai mic
if( miu[ n ][ p ] < min && miu[ n ][ p ] != 0 )
min = miu[ n ][ p ];
}
//daca toate Ds sint small si toate Dl sint large
//adica avem 6 valori diferite de zero
18
if( nr == 6 )
{
//pixelul considerat este un PEP
PEP_M[ m ] = min;
}
else
PEP_M[ m ] = 0;
}
//calculeaza PEP ca maximul valorilor PEP_M
max = -1;
for( m = 0; m < 8; m++ )
if( PEP_M[ m ] > max )
max = PEP_M[ m ];
if( max != 0 )
PEP = max;
else
PEP = 0;
}
gri = 255 - (int)( 255 * PEP );
fuz.setPixel( i, j, qRgb( gri, gri, gri ) );
}
image = fuz;
pm = image;
update();
}
Problema 3. Modicat i funct iile de apartenent a
small
si
large
si
observat i efectele diverselor funct ii asupra rezultatului detect iei de contur.
Bibliograe
[1] Z. Chi, H. Yan, T. Pham, Fuzzy Algorithms: With Applications
to Image Processing and Pattern Recognition, Advances in Fuzzy
SystemsApplications and Theory vol. 10, World Scientic, 1996.
[2] T. Carron, P. Lambert, Fuzzy Color Edge Extraction by Inference
RulesQuantitative Study and Evaluation of Performances, article.
[3] Tizhoosh Homepage of Fuzzy Image Processing, web page.
19

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