Sunteți pe pagina 1din 40

P reluc r a r e a

I magi n i l o r

Info IV
2001
Cuprins

Pag.

Prefaţă .................................................................................... 3

1. Reprezentarea imaginilor digitale .............................................. 4


1.1. Reprezentarea imaginilor prin funcţii picturale şi cuvinte picturale... 4
1.2. Reprezentarea imaginilor prin arbori (quad şi binari) .................... 15

2. Îmbunătăţirea imaginilor ........................................................... 18


2.1. Operaţiuni punctuale .................................................................... 18
2.2. Operaţiuni spaţiale ..................................................................... 23

3. Transformări ale imaginilor ........................................................ 29


3.1. Determinarea conturului .............................................................. 29
3.2. Scheletizare ................................................................................ 31
3.3. Subţiere ..................................................................................... 32
3.4. Transformări morfologice ....................................................... 33

Lucrări de laborator ............................................................................ 39

Bibliografie ......................................................................................... 40

2
Prefaţă
Grafica pe calculator este un domeniu modern cu multiple aplicaţii practice în
diverse domenii de activitate (medicină, artă, etc.), care pot fi realizate datorită dezvoltării
disciplinelor matematice specializate în această direcţie.
a) Grafică
În acest material sunt abordate aspecte propriu-zisă
doar dintr-o singură ramură ale graficii pe
Descriere Imagine b)
calculator, definite de Pavlidis în [3] (vezi de imagine Prelucrarea
schemele de mai jos) şi anume Prelucrarea c) Recunoaşterea
imaginilor
imaginilor (transformarea imiginilor). formelor
În cele ce urmemză sunt prezentate diverse metode, tehnici şi algoritmi utilizaţi în
reprezentarea şi prelucrarea digitală a imaginilor, atât în vederea creşterii calităţii imaginii
destinate ochiului uman (paragraful doi intitulat Îmbunătăţirea imaginilor, prin
operaţiuni punctuale şi spaţiale) cât şi în scopul recunoaşterii formelor (paragraful trei
Transformări ale imaginilor cuprinzând algoritmi de determinare a conturului,
scheletizare şi subţiere).
Determinarea Determinarea
Segmentare Conturului Punctelor
Critice
1. Imagini 2. Imagini 3. Linii şi 4. Puncte
Color Alb-Negru Curbe Critice

Colorare Umplere Interpolare

Printre primele prelucrări de imagini amintim realizarea transmisiei peste Atlantic


a imaginilor de ziar, în 1920, reducând timpul de transmisie de la o săptămână la trei ore
prin codificarea, transmisia prin cablu marin şi decodificarea unor imagini având cinci
nivele de strălucire. În continuare s-au îmbunătăţit metodele de creştere a calităţii
imaginilor, iar începând din 1964 (când au fost ptreluate imagini de la bordul staţiei
spaţiale Ranger 7) s-au utilizat diverse tehnici de restaurare şi îmbunătăţire a imaginilor
preluate din spaţiul cosmic (misiunile Surveyor, Mariner şi Apollo).
Prelucrarea imaginilor îşi propune:
 îmbunătăţirea informaţiei vizuale în vederea optimizării analizei şi interpretării de
către om, cu aplicaţii în diverse domenii cum ar fi medicină (trecerea de la imagini
alb/negru la imagini color, prelucrarea imaginilor biomedicale), ecologie (studiul
poluării utilizând imagini aeriene), criminalistică, apărare, industrie, etc.
 extragerea informaţiilor într-o formă internă pentru analiza cu ajutorul
calculatorului a informaţiilor video, în recunoaştrea caracterelor (chinezeşti, de
exmplu), a formulelor chimice sau matematice, în verificarea calităţii produselor,
recunoaştrea preţurilor (coduri de bare), recunoaşterea amprentelor şi a feţei, în
sortarea corespondenţei, în meteorologie, apărare, etc. [2].

3
1. Reprezentarea imaginilor digitale

1.1. Reprezentarea imaginilor prin funcţii picturale şi cuvinte picturale

În cele ce urmează, sunt abordate în special probleme referitoare la imaginile de


tip 3 şi 4 (definite în [3]) şi anume câteva metode de reprezentare a imaginilor prin linii şi
curbe respectiv printr-o mulţime de puncte critice, prin desene descrise de -cuvinte
(şiruri de comenzi de deplasare a cursorului pe cele patru direcţii r, u, l şi d). De
asemenea este prezentată şi o modalitate de conversie a unui desen dintr-o formă în alta.
Pentru interpolare sunt utilizate curbele Bezier, datorită faptului că acestea au anumite
proprietăţi care se potrivesc cu desenele descrise prin cuvinte picturale (-cuvinte).

O imagine poate fi modelată printr-o funcţie de două variabile definită în planul


ecranului (pe matricea de puncte din fereastra de lucru, ViewPort). Valoarea funcţiei într-
un punct va reprezenta nuanţa (culoarea) acelui pixel de pe ecran. Aceasta înseamnă că
funcţia ia valori din mulţimea culorilor posibile ale punctelor ecranului, deci o astfel de
funcţie este nenegativă şi mărginită.
Dacă fereastra ecran este [u1,u2][v1,v2] (figura 1.1.1), punctele Pij din fereastră au
coordonatele limitate astfel: v1 iv2 şi u1j u2.

Fie Sij pătratul definit astfel :

j1 < x  j şi i1 < y  i . x


v1 • • • • • • • • • •

În pătratul Sij funcţia va lua o • • • • • • • • • •

valoare constantă egală cu codul • • • • • • • •Sij • • y


i • • • • • • • P• • •
culorii punctului Pij . O astfel de ij

funcţie o vom numi funcţie picturală. v2 • • • • • • • • • •

Un caz particular important îl • • • • • • • • • •

reprezintă funcţiile cu doar două u•1 • • • • • j• • • u2•

valori 0 şi 1 pentru imagini alb-negru. • • • • • • • • • •


• • • • • • • • • •
Figura 1.1.1

4
Funcţiile picturale sunt utilizate în numeroase probleme de prelucrare a imaginilor
(codificare, aproximare, filtrare, restaurare, scalare, etc.) prin diverse operaţii aplicate
acestora .

Lema 1.1.1.
Descrierea unei imagini printr-o funcţie picturală este echivalentă cu descrierea
acesteia prin cuvinte picturale.

Demonstraţia acestei afirmaţii o vom efectua prin precizarea modului de


descriere a unei imagini formată din pătrate (Sij), utilizând cuvinte de descriere prezentate
în continuare.
Pentru imagini alb-negru este suficient un limbaj asemănător cu cel de descriere a
desenelor discontinue (*, unde ={r,u,l,d,,}), doar că primitivele de desenare nu vor
mai fi segmente de lungime unitate ci pătrate de latură unitate.
De exemplu, -cuvântul r5d4l4u4drr descrie imaginea din figura 1.1.3.
Pentru o funcţie picturală care ia valori din mulţimea {alb,negru} există şi putem
construi un -cuvânt care să descrie aceeaşi imagine. Desigur că există mai multe
posibilităţi de definire a -cuvintelor echivalente cu o funcţie picturală. Teoretic este
suficient să punem în evidenţă un singur -cuvânt pentru o funcţie picturală oarecare.
Practic însă, ne interesează şi complexitatea descrierii, adică o descriere minimă a unei
imagini.
În cele ce urmează vom prezenta o primă metodă de construcţie a unui cuvânt
pictural pornind de la o funcţie picturală dată.
-cuvântul echivalent este w=wv1wv1...wi...wv2-1wv2, unde prin wi înţelegem
subcuvântul de descriere al liniei i, iar funcţia Redu este definită astfel:
Redu()= ; ,    . -cuvântul wi de descriere a liniei i (v1 iv2) este
*

definit astfel :
i,u1i,u1+1...i,j...i,u2-1i,u2 pentru i impar,
wi =
i,u2i,u2-1... i,j...i,u1+1i+1,u1 pentru i par.

Subcuvintele de colorare (ij, ij) a pătratelor Sij sunt definite după cum urmează:

r pentru j<u2 şi f(Sij) = alb,


r pentru j<u2 şi f(Sij) = negru,
ij = d pentru j=u2 şi f(Sij) = alb,
d pentru j=u2 şi f(Sij) = negru;

l pentru j >1 şi f(Sij) = alb,


l pentru j >1 şi f(Sij) = negru,
 ij = d pentru j =1 şi f(Sij) = alb,
d pentru j =1 şi f(Sij) = negru.

5
Se observă că -cuvântul de descriere,
parcurge matricea de pătrate care reprezintă
imaginea descrisă de funcţia f şi colorează
acele pătrate pentru care valoarea funcţiei
picturale este negru. Ordinea de parcurgere
este cea din figura 1.1.2. Figura 1.1.2

Invers, valoarea funcţiei picturale corespunzătoare pătratului Sij este dată de


poziţia creionului ( sau ) înainte de colorarea pătratului Sij .

Pentru descrierea unei imagini color putem utiliza comenzi din mulţimea C.
Pentru a descrie o imagine formată din pătrate Sij de tipul celor de mai sus (vezi figura
1.1.1), vom preciza şi culoarea pătratului care se desenează (după deplasarea definită prin
comanda {r,u,l,d}). De exemplu c-cuvântul w = arbr3arbd3adbl3albu3fdrcr
(C)* descrie imaginea din figura 1.1.4 (unde C={a,b,c,f), iar cu f am notat culoarea
fondului care poate fi alb sau poate fi interpretat ca fără culoare ).

Pentru funcţiile picturale de descriere a imaginilor color, c-cuvântul echivalent se


defineşte analog ca şi în cazul imaginilor discontinue , doar subcuvintele ij (respectiv ij)
se definesc astfel :

cr pentru j<u2 şi f(Sij) = c, (c = culoarea lui Sij )


r pentru j<u2 şi f(Sij) = 0 (  = fără culoare )
ij = cd pentru j=u2 şi f(Sij) = c,
d pentru j=u2 şi f(Sij) = 0.

Subcuvintele ij se definesc analog (valorile fiind cl, l, cd şid).

În concluzie putem spune că mulţimea imaginilor descrise prin funcţii picturale


este identică cu mulţimea imaginilor descrise prin c-cuvinte, adică orice imagine descrisă
printr-o funcţie picturală poate fi descrisă printr-un c-cuvânt, şi invers.

a:
b:
c:
f:

Figura 1.1.3 Figura 1.1.4

6
A doua metodă de construcţie a -cuvintelor pornind de la o funcţie picturală
este mai eficientă (în sensul complexităţii descrierii) pentru imaginile rare (care au puţine
pătrate colorate în comparaţie cu fereastra ecran), adică raportul

r = | {f(Sij)>0 / v1 iv2 , u1j u2} | / (v2v1)(u2u1) este relativ mic.

Spre deosebire de prima metodă care traversează toată fereastra (figura 1.1.2),
metoda care urmează să fie prezentată va căuta doar acele pătrate care sunt colorate
(f(Sij)>0).
Pentru imagini alb-negru vom construi -cuvântul astfel :
w = wv1,u1wv1,u1+1...wv1,j ...wv1,u2 ... wi,u1wi,u1+1...wi,j...wi,u2 ... wv2,u1wv2,u1+1...wv2,j...wv2,u2 ,
unde:
 dacă f (Sij) = 0 ,
wi,j =
rj di  u  ui lj dacă f (Sij) > 0 . (v1 iv2 , u1j u2)

Pentru că acest cuvânt conţine multe deplasări inutile cu creionul ridicat, este
necesară o reducere a acestui cuvânt. -cuvântul redus este wr = ref(w) care reprezintă
-cuvântul independent de retrageri relativ la mulţimea retragerilor:

R = {ud, du, lr, rl, , }.

Pentru imagini color definirea c-cuvântului este asemănătoare. Subcuvântul wi,j


pentru cazul f (Sij) = c > 0 este wi,j = r j d i c u  u i l j , unde prin  am notat culoarea
invizibilă (prin care se permite deplasarea fără colorare).

Cuvintele picturale definite anterior sunt echivalente cu funcţiile picturale, dar nu


sunt minimale. Desigur, ne-ar interesa un algoritm care să construiască un cuvânt de
descriere cât mai scurt posibil, plecând de la o funcţie picturală f.

Algoritmul 1.1.1.

 Construieşte graful G=(V,A) astfel :


V={ (i,j) / f(Sij) > 0 }, A=VV;
 Calculează distanţele directe ( : A  N) dintre vârfuri astfel :
((i1,j1), (i2,j2))= | i1  i2 |+| j1j2|, ((i1,j1), (i2,j2))A,
 Determină cel mai scurt lanţ hamiltonian, H = ( vi1, vi2, ... , vin) ( n=|V| );

7
 Construieşte cuvântul de descriere w = Reduc(ci1rwi2 wi3 ... win), unde

 | j1-j2 |-1 c  dacă i1=i2 ,


wik =  | j1-j2 |-1 d | i2-i1 | -1 c d dacă i1<i2 , (1.1.1)
2kn  | j1-j2 |-1 u | i2-i1 | -1 c u dacă i1>i2 ; iar

- ci1 este culoarea pătratului vi1,


- (i1,j1) şi (i2,j2) sunt coordonatele vârfurilor vik-1 respectiv vik-1 ,
- =r pentru j1<j2 sau =l pentru j1>j2,
- c reprezintă culoarea pătratului Si2,j2 (c=f (Si2,j2)>0),
-  reprezintă culoarea invizibilă , dacă f (Si2,j2)=0,
- Reduc(c)=c (nu se ridică creionul dacă urmează imediat o culoare).

Lema 1.1.2.

Algoritmul 1.1.1 determină un cuvânt minimal de descriere a unei imagini definită


prin funcţia picturală f .

Demonstraţie.
Se observă că formula 1.1.1 urmăreşte deplasarea cursorului începând din vârful
vi1 prin pătratele vi2, ... , vik , ... , vin , pe care le colorează. În funcţie de poziţia relativă a
două pătrate consecutive (vik-1 , vik) din lanţul hamiltonian, cursorul se va deplasa pe unul
din cele patru trasee din figura 1.1.5.
u
Din cele C trasee (u = | j1  j2|, iar v = |i1  i2|, vezi figura 1.1.6), nu
u+v
contează pe care îl vom parcurge pentru că în dreptungiul definit de cele două vârfuri
diagonal opuse nu există nici un vârf pe care trebuie să-l colorăm (dacă ar exista, atunci
lanţul determinat nu mai este minim) .

i1 < i2 i1 > i2 i1 < i2 i1 > i2


j1 < j2 j1 < j2 j1 > j2 j1 > j2

Figura 1.1.5 Figura 1.1.6

8
În cele ce urmează vom studia diverse moduri de descriere a imaginilor de tip 3
(formate din linii şi curbe). Pentru că descrierea imaginilor formate din linii a fost
prezentată în primul capitol (utilizând -limbaje), în continuarea acestui paragraf vor fi
prezentate câteva tehnici de descriere a curbelor.
O imagine este de tip 3 dacă poate fi complet descrisă printr-un număr finit de linii
şi curbe [3]. O curbă poate fi aproximată utilizând o mulţime de puncte alese dintr-o
mulţime de puncte din plan (de exemplu dintr-un sistem cartezian rectangular, ca în
figurile 1.1.7 şi 1.1.8).

Prin unirea punctelor apropiate de curbă


se va obţine o aproximare poligonală formată din
segmente de lungime unitate sau 2 . Această
aproximare se poate reprezenta prin şiruri de
comenzi (pe cele 4 sau 8 direcţii).

De exemplu curba din figura 1.1.7 se Figura 3.1.7


poate aproxima prin desenul descris de -
cuvântul urruurur iar curba din figura 1.1.8 prin
aaura (am notat cu a deplasarea pe direcţia
NE). Acest procedeu de trecere de la o imagine
reprezentată prin curbe la o imagine reprezentată
prin puncte se numeşte determinarea punctelor
critice, iar procedeul invers se numeşte
interpolare. Figura 1.1.8
Mulţimea punctelor critice determinate de curba cR2 este
MPc(c)={Apr(P)/Pc} (Apr : R2  Z2, returnează cel mai apropiat punct de coordonate
întregi).

O imagine reprezentată prin puncte (de tip 4) poate fi îmbunătăţită prin


interpolare, obţinând o imagine reprezentată prin curbe. Pentru a ilustra aceasta, am ales
interpolarea Bezier (descrisă în [3]). În figurile următoare (1.1.9 şi 1.1.10) se poate
vedea o curbă şi punctele critice determinate, apoi descrierea corespunzătoare -
cuvântului rezultat (pentru patru respectiv opt direcţii), iar în final curba Bezier
corespunzătoare.

Figura 1.1.9 Figura 1.1.10


9
Modul de determinare al curbei
P3
Bezier (din figura 1.1.11), plecând de la şirul P2
de puncte P1,P2,...,Pn este descris în cele ce
urmează şi ilustrat în figura 1.1.12, pentru Pl B2 B3
B1
n=4 (interpolarea Bezier este descrisă în [6]). B4 P4
Figura 1.1.11
Din şirul punctelor date P1, P2, ... ,Pn
se calculează, utilizând formula de mai jos P3
(1.1.2), un alt şir de puncte P1,2, P2,2, ... ,Pn-1,2 , P2,2
apoi din punctele calculate vom determina P2 P2,3 P3,2
punctele P1,3, P2,3, ... ,Pn-2,3 (utilizând aceeaşi
P1,4(1/4)
formulă) şi aşa mai departe până când vom
P1,2 P1,3
ajunge la un singur punct P 1,n. Acest punct
Pl
obţinut pentru o valoare [0,1] aparţine
curbei Bezier. Dând valori lui  din acest
interval vom obţine aproximarea dorită P4
(în figura 1.1.12, =1/4).
Figura 1.1.12
Se observă că pentru =0 se obţine punctul P1 iar pentru =1 se obţine punctul
Pn.
Formula de calcul a şirului de puncte de pe nivelul m+1 în funcţie de punctele de
pe nivelul m este următoarea :
Pi,m+1()=(1)Pi,m()+Pi+1,m() ; i=1,nm; m=1,n1; =0,1, 1/(s1) (1.1.2)
Se observă că formula determină punctele începând de pe nivelul doi, pentru că
primul nivel conţine punctele date, adică Pi,1()=Pi , i=1,n .
Dacă dorim să determinăm s puncte B1=P1,n(1), B2=P1,n(2), ... , Bj=P1,n(j), ... ,
Bs=P1,n(s) corespunzătoare valorilor 1=0, 2=1/(s1), ... ,j=(j1) / (s1), ... ,s=1,
vom calcula coordonatele punctelor P1,n(j) pentru fiecare valoare j. Pentru a obţine şi
alte puncte în afara celor două capete (pentru că B1 şi Bs coincid cu P1 respectiv Pn , ca în
figura 1.1.11 pentru s=4), trebuie ca s să fie mai mare decât 2.
Algoritmul Bezier de determinare a celor s puncte (Bj, j=1,s) de pe această
curbă este prezentat în cele ce urmează.

Algoritmul 1.1.2.
Pentru i:=1,n execută Pi,1:=Pi;
Pentru j:=1,s execută :=(j1)/(s1);
Pentru m:=1,n1 execută
Pentru i:=1,nm execută
Pi,m+1 := (1)  Pi,m +   Pi+1,m ;
Bj:= P1,n
Sf_alg.

10
Algoritmul prezentat ne dă ca rezultat un şir de puncte B1,B2,...,Bs. Teoretic,
curba de interpolare Bezier (a punctelor P1,P2,...,Pn) este:

Bezier(P1,P2,...,Pn) = { P1,n() / [0,1] }.

Practic, reprezentatarea grafică a curbei este realizată prin desenarea celor s-1
segmente determinate de şirul punctelor B1, B2, ... , Bs , adică
BezierSeg(P1,P2,...,Pn) = { BjBj+1 / j=1,s1} (vezi figura 1.1.11).
Se observă în figurile 1.1.9 şi 1.1.10 că dacă plecăm de la o curbă c şi
determinăm mulţimea punctelor critice MPc(c) , apoi prin algoritmul Bezier calculăm
punctele Bj, j=1,s , acestea se depărtează de punctele critice iniţiale, adică MPc(c) 
{Apr(Bj) / j = 1,s}, iar curba c'= BezierSeg(MPc(c))  c. Desigur că ne-ar interesa ca
această curbă determinată prin interpolarea punctelor critice să fie cât mai apropiată de
curba iniţială, adică :
{Apr(P1,n () ) / [0,1]} = {Apr(P) / Pc }. (1.1.3.)
Presupunem că avem o curbă c0 , pentru care determinăm şirul punctelor s0 de
coordonate întregi cele mai apropiate. Acest şir poate fi descris printr-un -cuvânt w
astfel încât mulţimea punctelor desenului descris de w să fie mulţimea punctelor critice
corespunzătoare curbei c0 , adică : V(dpic(w)) = {Apr(P) / Pc0}.

În continuare, dacă pentru acest şir de puncte s0=(Sh(a1...ai), i=1,n) determinat de


-cuvântul w=a1...an (şir definit prin funcţia Sh), determinăm curba c1 prin interpolare
Bezier, este puţin probabil să obţinem aceeaşi curbă iniţială c0.
Aplicând iterativ acelaşi procedeu vom obţine un şir de curbe c0, c1, c2, ... , cp , ...
. Problema care în mod natural se va pune este următoarea: “Cum pot fi obţinute aceste
transformări, astfel încât acest şir să fie finit ?”.
Dacă reuşim să obţinem o curbă (prin interpolare) care să menţină punctele
critice, atunci s1=s0 , deci curba de aproximare nu se mai modifică ori de câte ori se aplică
aceste transformări :
c0 s0 c1 s0 c1 ... . (1.1.5)

Observaţia 1.1.1.
Această proprietate (1.1.5) a celor două transformări (de interpolare şi de
determinare a punctelor critice) este importantă, pentru că fiecare transformare este, în
acest caz, inversa celeilalte. De exemplu, după codificarea unei imagini (în scopul
comprimării), decodificarea (adică transformarea inversă) se va efectua printr-o
interpolare (care să conserve punctele critice, deci descrierea prin -cuvinte).
În acest scop, în continuare se va prezenta o transformare (prin interpolare
Bezier) care conservă -cuvântul de descriere.

11
Pentru a obţine un şir de puncte
cât mai apropiat de punctele critice, vom
grupa punctele P1,P2,...,Pn în subşiruri de
o anumită lungime q (de exemplu în
figura 1.1.13 am grupat câte 5 respectiv
câte 7), apoi vom aplica algoritmul
Bezier pentru fiecare subşir.
Figura 1.1.13
Curba rezultat fiind obţinută prin reuniunea curbelor descrise:
c = Bezier (P1,...,Pq)  Bezier (Pq,...,P2q1)  ...  Bezier (Pn(n Mod q)+1,...,Pn) (1.1.6)

Lema 1.1.4.
O transformare de tipul 1.1.6, utilizând grupări de lungime q<7, conservă
punctele critice ( Apr(c)={P1,P2,...,Pn} ), deci şi -cuvântul de descriere (w), dacă acesta
nu conţine retrageri (wref(*),).
Demonstraţia se poate face pentru fiecare q începând de la 2 până la 6.

Este mult mai eficientă gruparea punctelor iniţiale, P1,P2,...,Pn în cât mai puţine
subşiruri (deci cât mai puţine curbe Bezier) care să conserve punctele critice (fără a stabili
un număr q de puncte din subşiruri). Aceasta înseamnă că se urmăreşte formarea de
subşiruri de dimensiuni cât mai mari. La un subşir Pi,Pi+1,...,Pj care conservă punctele
critice se va adăuga punctul Pj+1 doar dacă şirul Pi,Pi+1,...,PjPj+1 conservă punctele critice
(situaţie în care se continuă cu punctul Pj+2 şi aşa mai departe) altfel se începe o nouă
grupare Pj,Pj+1,.... În felul acesta se vor forma subşiruri de puncte de lungime cel puţin
şase, aceasta depinzând de poziţia relativă a punctelor.
Algoritmul următor determină numărul minim (notat cu k) de grupări care
conservă punctele critice.

Algoritmul 1.1.3.

Date P1, P2, ... , Pn;


k:=0; i:=1;
Repetă j:=i+5; Cât_timp j>n execută j:=j1;
Cât_timp (j<n) şi Apr(Bezier(Pi, ... ,Pj, Pj+1)) = {Pi, ... ,Pj, Pj+1} execută j:=j+1;
k:=k+1; Grupareak := (Pi, ... ,Pj);
i:=j
Pânăcând i=n;
Rezultate Gruparea1, Gruparea2, ... , Grupareak
Sf_Alg.

12
Observaţia 1.1.2.
Numărul minim de grupări care conservă punctele P1, P2, ... ,Pn este NrGr(1,n) ,
unde:
1 dacă Apr(Bezier(Pi,...,Pj)) = {Pi, ...,Pj}, (a)
NrGr( i, j) =
Min {NrGr(i, l)+NrGr(l, j)}dacă Apr(Bezier(Pi,...,Pj))  {Pi, ...,Pj}. (b)
i<l<j
Dacă Lmin(i,j) este indicele l pentru care se realizează minimul din formula
precedentă cazul b) sau este egal cu 0 pentru cazul a), atunci şirul de puncte P1, P2, ... ,Pn
este despărţit optim în două subşiruri, şi anume ( P1, P2, ... ,PLmin(1, n) ) şi (PLmin(1, n), ...,Pn).
În continuare, fiecare subşir Pi, ...,Pj se desparte în două subşiruri în punctul PLmin(i, j)
(dacă Lmin(i,j)>0), şi aşa mai departe până când toate subşirurile au indicele de
separare Lmin(i,j) nul. Observăm că numărul subşirurilor astfel obţinute este minim.
Pentru ca acest algoritm să fie mai rapid (pentru a nu repeta anumite calcule) se
recomandă depunerea valorilor deja calculate NrGr (i, j) într-o matrice pătratică M de
ordin n. Valoarea NrGr(i, j) o vom depune în Mij. Valorile acestei matrice le vom
determmina succesiv pentru prima diagonală paralelă cu diagonala principală, apoi
pentru a doua, şi aşa mai departe până se ajunge la M1n care reprezintă valoarea
căutată. Pe baza lemei 1.1.4, putem să evităm calculele pentru primele şase diagonale,
acestea având toate valorile egale cu 1. Practic, calculul valorilor va începe cu
diagonala a şaptea. Pentru a putea forma subşirurile optimale (nu ne interesează doar
numărul de grupări minim dat de M1n) vom memora în elementul Mj,i indicele pentru
care se realizează minimul funcţiei pentru subşirul punctelor de la i la j (putem acest
lucru, deoarece elementele de sub diagonala principală nu sunt utilizate).
Vom construi un arbore binar care conţine în fiecare perechi de forma (i,j),
unde i şi j reprezintă limitele unui subşir optim determinat (Pi, ... ,Pj). Acest arborele
are rădăcina (1,n). Dacă pentru un nod (i,j) al arborelui avem Apr(Bezier(Pi, ... ,Pj)) =
{Pi, ... ,Pj} atunci acest nod este un nod terminal (frunză), altfel va avea doi subarbori
cu rădăcinile (i,Mji) respectiv (Mji,j). Frontul acestui arbore ne va da subşirurile
optimale.
Evident că algoritmul 1.1.3 şi cel prezentat anterior (apelând metoda
programării dinamice) nu dau neapărat aceeaşi soluţie, dar ambele sunt minimale. Dacă
avem mai multe variante de despărţire a unui subşir de puncte, se preferă, separarea în
punctul Pi, dacă punctele Pi-1, Pi şi Pi+1 sunt coliniare (aceasta asigură continuitatea
curbei Bezier, deoarece aceasta este tangentă la capetele liniei poligonale determinate
de punctele de interpolare). În acest fel curba are mai puţine puncte de întoarcere, deci
mai puţine asperităţi.

13
În continuare se va prezenta un model de descriere a unei imagini de tip 3
(după clasificarea dată în [3]) utilizând -cuvinte. Aceste cuvinte vor descrie un şir de
puncte care determină o curbă prin interpolare Bezier. Aceasta înseamnă că o mulţime
de -cuvinte descrie o imagine formată din curbe, adică de tip 3.

Plecând de la un anumit punct de start P 1(x1, y1) (care poate fi chiar originea),
printr-un -cuvânt de descriere w=a1a2...am , vom construi şirul punctelor de
interpolare P2(x2, y2), P3(x3, y3), ... , Pn(xn, yn). Din şirul punctelor traversate prin
comnezile -cuvântului w, se vor selecta în vederea interpolării doar punctele
traversate cu creionul coborât ().

Fiecare -cuvânt descrie un şir de puncte aşa cum s-a prezentat mai sus, prin
funcţiile definite anterior Nr şi Pb, iar prin interpolare Bezier a şirurilor construite se
vor obţine curbele care compun imaginea.

De exemplu -cuvintele următoare


w1= dr2u2u2uu2r2r , 6
w2=lddd2d3r2uu2l şi 5
4
w3=dll2uuld 3
2
descriu următoarele trei şiruri de puncte : 1
0
1. (0,0),(0,-1),(1,-1),(2,-1),(2,0),(2,1),(2,4),(5,6);
-1
2. (5,6),(4,4),(4,1),(4,0),(4,-1),(5,-1),(6,-1),(6,0) şi
3. (5,2),(4,1),(2,3),(1,2). 0 1 2 3 4 5 6

Figura 1.1.14.

Prin interpolarea acestor puncte se obţin cele trei curbe reprezentând imaginea
literei A mare de mână, din figura 1.1.14. Asemănător se pot defini -cuvinte de
descriere a unor simboluri matematice.

14
1.2. Reprezentarea imaginilor prin arbori

Arborii memorează informaţiile formelor prin noduri (stocând informaţii despre


forme sau substructuri) şi prin arce (relaţii dintre părinte şi succesori). Arborii sunt
eficienţi în reprezentarea structurală care implică o descompunere ierarhică pentru că
descrierea devine compactă. O altă trăsătură importantă a structurilor arborescente
este capacitatea de a construi şi de a descrie forme complexe, utilizând primitive cu
mai multe puncte de concatenare (la structuri de tip şir am văzut că sunt doar două
puncte cap şi coadă).

Dacă o formă complexă poate fi reprezentată natural prin arbori atunci este de
asemenea natural să generarăm descrierea sa utilizând gramatici arborescente. Figura
1.2.1 arată cum poate fi utilizat un arbore pentru a descrie o formă grafică (o imagine)
descompusă în arii elementare disjuncte. Imaginea este descompusă în patru arii
(pătrate, considerate în ordinea a11 , a12 , a21 , a21) iar dacă o arie conţine puncte de
aceeaşi culoare atunci ea va fi reprezentată printr-un nod terminal (frunză), informaţia
fiind culoarea respectivă, altfel (dacă aria conţine puncte de culori diferite) atunci ea
va fi reprezentată printr-un nod intern şi se va descompune din nou în patru arii
elementare (care vor fi subarbori) şi aşa mai departe până se ajunge la nivel de punct
(pixel).
- culoarea 1,
- culoarea 2,
- culoarea 3,
- culoarea 4,
- alb.

Figura 1.2.1

O modalitate de codificare a ierarhiei descrise


1
de un arbore este prezentată în continuare şi ilustrată
în figura alăturată. Vârfurile sunt etichetate cu
numere naturale şi se utilizează caracterul "." (punct) 1.1 1.2
pentru a descrie nodurile descendente. Arborele este
descris prin simpla enumerare a mulţimii etichetelor 1.2.1 1.2.2 1.2.3
nodurilor astfel:
1.2.2.1 1.2.2.2
T = { 1, 1.1, 1.2, 1.2.1, 1.2.2, 1.2.3, 1.2.2.1, 1.2.2.2 }
Astfel de descrieri sunt adesea utilizate în compararea arborilor (calculul
Figura 1.2.2
măsurii de similaritate, prin distanţe d(T1,T2) T1 şi T2 fiind arborii care se compară).

15
Altă metodă de codificare a unei imagini reprezentată prin Quad-Tree (arbri
care se ramifică în patru, prezentaţi mai sus) utilizează şiruri de caractere care conţin
codul culorilor şi un alt caracter de ramificare (de exemplu ‘*’). De exemplu imaginea
din figura 1.2.3 se codifică prin şirul ‘**annanna’ .

*
annnnannnnaann
aa * n n a

a n n a

Figura 1.2.3

Şirul S codificat poate fi returnat de funcţia Qt definită astfel:

Funcţia Qt (l,t,n) Este: { (l,t) = colţul stânga-sus al ferestrei }


Dacă AccCul(l,t,n) Atunci Qt:=Culoare(l,t) { n = lăţimea pătratului }
Altfel n:=n/2;
Qt:=’*’ + Qt(l,t,n) + { + = conactenare }
Qt(l+n,t,n) +
Qt(l,t+n,n) +
Qt(l+n,t+n,n)
Sf_Qt.

Decodificarea şirului S poate fi realizată utilizând procedura Pt definită astfel:

Procedura Pt ( S, l,t,n ) Este: { Reconstituie imaginea în (l,t) }


Cul:=Primul_caracter(S); Şterge_Primul_Caracter(S); { Extrage primul caracter }
Dacă CulMulţimii_Culorilor Atunci Desenează_Pătratul(l,t,n,Cul)
Altfel n:=n/2;
Pt(l,t,n);
Pt(l+n,t,n);
Pt(l,t+n,n);
Pt(l+n,t+n,n)
Sf_Pt.

16
Codificare a unei imagini prin arbri binari utilizează două caractere de
ramificare ‘─’ şi ‘|’.
De exemplu imaginea din figura 1.2.4 se codifică prin şirul :
‘─|─|an|nan|na’ ─

| |

12 534 annnnannnnaann ─ n n a
aa
| |

a n n a

Figura 1.2.4

Şirul codificat poate fi returnat de funcţia Bt definită astfel:

Funcţia Bt (l,t,m,n) Este: { (l,t) = colţul stânga-sus al ferestrei }


Dacă AccCul(l,t,m,n) Atunci Bt:=Culoare(l,t) { m,n = dim. dreptunghiului}
Altfel Dacă m=n Atunci m:=m/2;
Bt:=’─’ + Bt(l,t,m,n) +
Bt(l,t+m,m,n)
Altfel n:=n/2;
Bt:=’ | ’ + Bt(l,t,m,n) +
Bt(l+n,t,m,n)
Sf_Bt.

Decodificarea poate fi realizată utilizând procedura Pb definită astfel:


Procedura Pb ( S, t,m,n ) Este: { Reconstituie imaginea în (l,t) }
Cul:=Primul_caracter(S); Şterge_Primul_Caracter(S); { Extrage primul caracter }
Dacă CulMulţimii_Culorilor Atunci Desenează_Dreptunghiul(l,t,m,n,Cul)
Altfel Dacă Cul=’─‘ Atunci m:=m/2;
Pb(l,t,m,n);
Pb(l,t+m,m,n)
{Cul=’ | ‘} Altfel n:=n/2;
Pb(l,t,m,n);
Pb(l+n,t,m,n)

Sf_Pb.

17
2. Îmbunătăţirea imaginilor

Scopul acestor prelucrări îl constituie accentuarea sau punerea în evidenţă a


unor caracteristici conţinute în imagine pentru a putea fi observate mai uşor (mai bine)
la studiul acestora. Metodele utilizate în algoritmii de îmbunătăţire a imaginilor
amplifică anumite caracteristici fără a mări cantitatea de informaţii conţinută în acestea.
În cele ce urmează vor fi prezentate câteva tehnici grupate după algoritmii utilizaţi în
următoarele două clase:
Operaţiuni punctuale prin care se poate realiza creşterea contrastului, reducerea

zgomotului, etc. şi
Operaţiuni spaţiale care permit eliminarea zgomotului, filtrări, etc.

Pentru simplificarea prezentării, vom presupune că imaginile prelucrate prin


aceste metode sunt de tip 2 (după clasificarea dată în [3]), deci deci conţin diverse
nuanţe de gri.

2.1. Operaţiuni punctuale

Aceste operaţiuni permit trecerea de la o nuanţă de gri u[0,L] la altă nuanţă


v[0,L] , conform unei transformări v=f(u) , unde f : [0,L][0,L].

a) Accentuarea contrastului
Această transformare este recomandată imaginilor cu contrast scăzut (obţinute
de exemplu într-un mediu cu iluminare slabă).
Fiind date două limite a şi b ( 0 < a < b < L ) pentru care se cunosc valorile
va = f(a)<a, respectiv vb = f(b) < b, transformarea este:
v
L
vb
u * va / a pentru 0  u  a
f(u) = (u-a) / (b-a) * (vb - va ) + va pentru a < u  b
(u-b) / (L-b) * (L - vb ) + vb pentru b < u  L.
va

0 a b L u
Observaţie.
 Valorile a şi b se pot obţine din histograma imaginii;
 Parametrii va şi vb precizează amlificarea contrastului;
 L contrastului).
Pentru va > a şi vb < b se obţine transformarea inversă (reducerea

Pentru o accentuare respectiv reducere (a contrastului) netedă transformările


sunt date de următoarele funcţii:
18

0 L
1) f1(u) = ( sin(* u/L-/2) + 1) / 2 * L ,

2) f2(u) = ( arcsin(2u/L-1) + /2) /  * L .

b) Reducerea zgomotului

Această transformare se realizează prin limitarea culorilor imaginii, ştiind că


acestea se află în domeniul [a,b]. Prin această metodă se pot pune în evidenţă nuanţe
greu vizibile. Operaţia este un caz particular al celei precedente ( a) ) pentru va = 0 şi
vb = L. Transformarea se poate realiza conform unuia din cele două grafice de mai jos:

0 (sau o valoare minimă vmin ) pentru 0  u  a


f(u) = (u-a) / (b-a) * L pentru a < u  b
L pentru b < u  L

v v
vb=L vb=L

sau

vmin
va = 0 a b Lu 0 a b Lu

Observaţie.
Valorile a şi b se pot fixa studiind histograma imaginii.

c) Binarizarea imaginilor
Această operaţie are ca obiectiv obţinerea unei imagini alb-negru dintr-o
imagine care conţine şi alte nuanţe nedorite provenite din diverse motive tehnice (de
exemplu copiere). Aceste zgomote apărute în imagine vor fi eliminate prin studierea
histogramei imagini. Transformarea este un caz particular al celei precedente ( b) )
pentru a=b = valea histogramei (vezi graficul următor):

19
0 (sau o valoare minimă vmin ) pentru 0  u  a
f(u) =
L pentru a< u  L.

v v
Alb Alb

sau

vmin
Negru Negru
Negru a=b Alb u Negru a=b Alb u

d) Negativarea imaginilor
Această operaţie de inversare a imaginilor se poate utiliza în situaţia în care
dispunem de negativul unei imagini (de exemplu în prelucrarea imaginilor medicale).
Operaţia de inversare se realizează prin v
transformarea următoare: L

v = f(u) = L - u

e) Operaţiuni de tip fereastră 0 L u


Transformările de acest tip permit extragerea anumitor caracteristici conţinute
în regiuni reprezentate prin diferite nuanţe de gri.
Decuparea respectiv accentuarea acestor zone (definite prin intervalul
nuanţelor [a,b] ) se poate realiza astfel:

L pentru u  [a,b] L pentru u  [a,b]


fd(u) = fa(u) =
0 pentru u  [a,b] u pentru u  [a,b]
v v
L L

sau

0 a b L u 0 a b L u
fd fa
f) Extragerea unui bit

20
Transformarea se aplică în determinarea biţilor nesemnificativi din punct de
vedere vizual dintr-o imagine (deoarece putem spune că doar primii şase au
semnificaţie vizuală, contribuţia celorlalţi fiind legată doar de redarea detaliilor fine din
imagine, fără a oferi informaţii asupra structurii acesteia).

Operaţia de extragere a bitului k corespunzătoare codificării

u = bn2n + bn-12n-1 + ... + bk2k + ... + b12 + b0

se realizează prin transformarea:


L pentru bk =1
fk(u) =
0 rest
g) Compresia de contrast
.
În situaţia în care dinamica datelor din imagine este foarte largă este
recomandată o astfel de operaţie prin care se îmbunătăţeşte vizibilitatea punctelor de
amplitudine relativ mică faţă de ceilalţi.
Operaţia de compresie se realizează printr-o transformare logaritmică de tipul:

v = f(u) = cst * Log(1+|u|) v


L
Pentru transformarea reprezentată alăturat,
formula de calcul este următoarea:

v = f(u) = L / (Ln(L+1) * Ln(1+u)


0 L u

h) Scăderea imaginilor
Operaţia de scădere a două imagini este necesară la compararea acestora dacă
deosebirile dintre ele sunt relativ mici faţă de complexitatea imaginilor. Prin scăderea
celor două imagini se pun în evidenţă diferenţele dintre cele două imagini.

i) Modelarea imaginilor prin histograme


Prin histogramă înţelegem reprezentarea grafică a frecvenţei de apariţie a
culorilor (nuanţelor de gri) conţinute într-o imagine. Prin această metodă (modelarea
histogramei) se obţine o imagine cu o histogramă dorită. De exemplu o imagine cu
contrast scăzut (având o histogramă îngustă) se poate transforma printr-un procedeu
de egalizare a histogramei într-o imagine cu o histogramă uniformă.
Dacă notăm cu t(u) numărul de pixeli de culoare u ( adică frecvenţa nuanţei u,
u{0,1,...,L} ), iar cu T numărul total de pixeli din imagine ( T= t(0)+ t(1) + ... + t(L) ),
atunci probabilitatea ca un punct să fie de nuanţă mai închisă, eventual egală cu u este
p(u) = ( t(0) + t(1) + ... + t(u) ) / T.

21
Se observă că 0p(u)1, deci transformarea este v = f(u) = p(u) * L.

În exemplul de mai jos se poate vedea histograma iniţială a), graficul


transformării b) şi histograma egalizată obţinută c) rezultate din datele din tabelul
alăturat pentru L=100.

Modificarea histogramei se u t(u) p(u) p(u)*L f(u)


realizează de fapt şi prin compresia de 0 0 0.00 0.00 0
contrast prezentată anterior ( g) ) şi de 10 30 0.07 7.32 7
asemenea se mai poate realiza prin 20 60 0.22 21.95 22
30 90 0.44 43.90 44
alte transformări definite în intervalul
40 100 0.68 68.29 68
[0,L] cu valori în acelaşi interval, de 50 70 0.85 85.37 85
exemplu f(u) = Sqrt(u) * Sqrt(L) . 60 30 0.93 92.68 93
70 20 0.98 97.56 98
80 10 1.00 100.00 100
90 0 1.00 100.00 100
100 0 1.00 100.00 100

t(u) v t(v)

0 Lu 0 Lu 0 Lv
a) b) c)

22
2.2. Operaţiuni spaţiale 1

Transformările spaţiale ţin cont la schimbarea culorii unui punct şi de culorilor


punctelor din apropierea acestuia. De asemenea, imaginea poate fi filtrată utilizând o
mască spaţială. În cele ce urmează vor fi prezentate trei clase de astfel de transformări
spaţiale.

a) Mediere şi filtrare spaţială trece-jos


Aceste metode modifică culoarea fiecărui punct Pi,j dintr-o imagine printr-o medie
ponderată ( pk-i,l-j ) a culorilor punctelor Pk,l dintr-o vecinătate Wi,j a acestuia.
Dacă notăm cu uk,l culoarea punctului Pk,l atunci noua culoare a punctului Pi,j
notată cu vi,j se modifică după formula :
vi,j = pk-i,l-j * uk,l
Pk,l  Wi,j
Ponderile pk-i,l-j sunt date de poziţiile relative ale punctelor Pk,l  Wi,j faţă de
punctul Pi,j pentru care se calculează culoarea. În funcţie de alegerea acestor ponderi se
obţin următoarele filtre spaţiale uzuale:

 pentru ponderi egale pentru toate punctele din vecinătate 1/4 1/4
(conform figurilor alăturate, pentru vecinătăţi de 2x2
respectiv de 3x3) formula de calcul este următoarea: 1/4 1/4
vi,j = 1 * uk,l 2x2
|W| P  W 1/9 1/9 1/9
k,l i,j

unde prin |W| am notat aria ferestrei de calcul, adică 1/9 1/9 1/9
numărul de pixeli pentru care se calculează media (în
exemplele de mai sus fiind 4 respectiv 9). 1/9 1/9 1/9
3x3
 pentru ponderi diferite în funcţie de poziţia punctului 0 1/8 0
vecin (vezi figurile alăturate, pentru vecinătăţi de 3x3)
formula de calcul sunt următoarele: 1/8 1/2 1/8

0 1/8 0
 vi,j = (ui,j + ( ui-1,j + ui+1,j + ui,j-1 + ui,j+1) / 4 ) / 2

vi,j = 2 - | k-i | - | l-j | - 2 * uk,l 1/16 1/8 1/16


Pk,l  Wi,j 1/8 1/4 1/8

1/16 1/8 1/16

23
Mediere spaţială
Pentru o imagine dată de relaţia: vi,j = ui,j + i,j unde i,j reprezintă zgomotul alb
(de valoare medie nulă), operaţia de mediere spaţială este dată de formula :
vi,j = 1 * uk,l + i,j
|W| P  W
k,l i,j

unde prin |W| am notat aria ferestrei de calcul, iar i,j este media zgomotului i,j .

Filtrare direcţională
Această transformare permite protejarea conturului atenuat în general prin
operaţii de mediere spaţială. Relaţia de calcul este următoarea:

vi,j = vi,j (*) unde

 * este acel  pentru care se realizează minimul expresiei | ui,j - vi,j ( ) | (direcţia
optimă, vezi figura alăturată) ,
vi,j ( ) = 1 * uk,l
 
|W | P  W
k,l i,j;

Filtrare mediană
Operaţia de filtrare mediană permite eliminarea punctelor (sau chiar a liniilor)
izolate din imagine menţinând aspectul spaţial al imaginii. Transformarea este
următoarea:
x(n+1)/2 pentru n impar
vi,j =
(xn/2+xn/2+1) / 2 pentru n par
unde xs ( s = 1,2, ... ,n=|W| ) este şirul ordonat (crescător sau descrescător) format din
elementele mulţimii { uk,l / Pk,l  Wi,j }.

b) Accentuarea contururilor
Operaţia de accentuare a conturului se utilizează în scopul punerii în evidenţă a
liniilor şi arcelor conţinute într-o imagine. Această tehnică se bazează pe scăderea din
imaginea iniţială a unri imagini filtrate. Transformarea este de forma:
vi,j = ui,j +  * gi,j
unde >0 iar gi,j este gradientul funcţiei ui,j ales convenabil, de exemplu laplacianul
discret:
gi,j = ui,j - fi,j

24
fi,j reprezentând rezultatul filtrării :

fi,j = ( ui-1,j + ui+1,j + ui,j-1 + ui,j+1) / 4

ui,j fi,j gi,j vi,j

c) Filtrare spaţială trece-sus şi trece-bandă

Extragerea sau accentuarea conturului se poate realiza şi prin printr-o filtrare


trece-sus sau trece-bandă. Aceaste transformări prin care se poate realiza îmbunătăţirea
conturului utilizează operaţiile de tip trece jos (notate cu tr_josx) prezentate anterior şi
sunt de forma:

tr_susi,j = ui,j - tr_josi,j , respectiv


tr_bandăi,j = tr_jos1i,j - tr_jos2i,j .

d) Inversarea contrastului şi scalare statistică

Acest tip de transformare permite obţinerea unei imagini cu un contur de contrast


mărit plecând de la o imagine cu contur de contrast slab şi de asemenea permite punerea
în evidenţă a unor detalii slab reprezentate (nedetectabile) într-o imagine. Operaţia este
de forma:  i,j
vi,j =
i,j
i,j = 1 * uk,l
unde: |W| P  W , iar
k,l i,j

i,j = 1 * ( uk,l - i,j )2


|W| P  W
k,l i,j

25
e) Dilatarea imaginilor

În cele ce urmează vom prezenta două modalităţi de dilatare a imaginilor şi


anume scalarea cu un factor supraunitar f  N şi interpolarea liniară.

 Scalarea se obţine prin repetarea unui pixel de f ori atât pe linii cât şi pe coloane,
astfel încât fiecare pixel se transformă într-un pătrat de latură f. Transformarea unei
imagini de dimensiuni m x n este dată de formula:

vi,j = uk,l , unde : k=[(i-1) / f ] + 1, l=[(j-1) / f ] + 1 , iar


1 i  f * m , 1 j  f * n .

 Interpolarea liniară se realizează în două etape :

 interpolare pe linii :

vi,j = (1-) * uk,p +  * uk,p+f dacă (i-1) Mod f = 0 , unde :


k=[(i-1) / f ] + 1, p = [(j-1) / f ] + 1, iar  = (j-p) / f ;

 interpolare pe coloane :

vi,j = (1-) * uq,l +  * uq+f,l dacă (i-1) Mod f  0 , unde :


l=[(j-1) / f ] + 1, q = [(i-1) / f ] + 1, iar  = (i-q) / f ;

De exemplu, pentru f=2, prelucrarea imaginii dată prin matricea :

u= 2 6 se realizează în următoarele etape :


4 8

 interpolare pe linii : 2 4 6 3

4 6 8 4

 interpolare pe coloane : 2 4 6 3
3 5 7 3.5
4 6 8 4
2 3 4 2

26
e) Îmbunătăţirea imaginilor biomedicale

O clasă importantă de probleme din prelucrarea imaginilor numită segmentare se


ocupă de selectarea unor obiecte sau caracteristici dintr-o imagine. Imaginea studiată este
din păcate destul de frecvent cu contrast scăzut, formată din puţine nuanţe de gri. De
aceea, alegerea metodei de prelucrare depinde de caracteristicile imaginii şi de asemenea
de scopul propus. În scopul recunoaşterii unor obiecte din imagine este necesară
distingerea lor prin separarea regiunilor cu proprietăţi comune. În continuare sunt
prezentaţi câţiva operatori utilizaţi mai frecvent la extragerea conturului:

Operator Valori Operator Valori Operator Valori


1 1 1 -1 -1 -1 1 0 -1
Gradient 1 -2 1 Laplacian -1 9 -1 Prewitt 1 0 -1
direcţional E -1 -1 -1 -1 -1 -1 vertical 1 0 -1
1 1 1 -1 0 -1 1 2 1
Gradient 1 -2 -1 Laplacian 0 4 0 Sobel 0 0 0
direcţional NE 1 -1 -1 diagonal -1 0 -1 orizontal -1 -2 -1
1 1 -1 0 -1 0 1 0 -1
Gradient 1 -2 -1 Laplacian 0 2 0 Sobel 2 0 -2
direcţional SV 1 1 -1 orizontal 0 -1 0 vertical 1 0 -1
0 -1 0 0 0 0 -3 -3 5
Filtru -1 5 -1 Laplacian -1 2 -1 Kirsch -3 0 5
trece-sus 1 0 -1 0 verical 0 0 0 orizontal -3 -3 5
0 -1 0 -1 -1 -1 5 5 5
Filtru -1 4 -1 Prewitt 0 0 0 Kirsch -3 0 -3
trece-sus 2 0 -1 0 orizontal 1 1 1 vertical -3 -3 -3

f) Pseudocolorarea imaginilor medicale

Alegerea culorilor din paletă trebuie făcută astfel încât tranziţia de la o culoare la
alta să fie cât mai lină, fără salturi mari.

Alegerile uzuale sunt următoarele:


a) curcubeu : de la roşu la violet cu aceeaşi luminozitate,
b) spirala : de la violet la roşu simultan cu creşterea luminozităţii, sau
c) variaţia de temperatură : roşu, portocaliu, galben, alb, albastru deschis.

27
Tabelul următor conţine o paletă propusă pentru aplicaţiile biomedicale:

Gri Culoare R G B Gri Culoare R G B


0 Negru 0 0 0 32 Maro deschis 63 31 16
1 Albastru 0 0 1 33 Portocaliu închis 63 31 0
2 0 0 2 34 63 33 0
3 0 0 3 35 63 35 0
4 0 0 4 36 63 37 0
5 0 0 5 37 63 39 0
6 Maro 15 2 0 38 63 41 0
7 17 3 0 39 63 40 0
8 19 3 0 40 63 45 0
9 21 5 0 41 63 47 0
10 23 6 0 42 63 49 0
11 25 7 0 43 Portocaliu 63 51 0
12 27 8 1 44 Galben închis 63 53 0
13 29 9 1 45 63 63 0
14 Roşu închis 26 0 0 46 63 63 2
15 29 5 5 47 63 63 4
16 32 5 5 48 63 63 6
17 35 5 5 49 63 63 8
18 38 5 5 50 63 63 10
19 41 5 5 51 63 63 12
20 44 5 5 52 63 63 14
21 47 5 5 53 63 63 16
22 50 5 5 54 63 63 18
23 53 5 5 55 63 63 20
24 56 5 5 56 63 63 22
25 Roşu 59 5 5 57 63 63 24
26 Maro închis 48 24 9 58 63 63 26
27 53 26 11 59 63 63 28
28 55 27 12 60 Galben deschis 63 63 30
29 57 28 13 61 61 61 61
30 59 29 14 62 62 62 62
31 61 30 15 63 Alb 63 63 63

28
3. Transformări ale imaginilor

În general, putem spune că transformarea unei imagini se adresează ochiului


uman, pentru a puta observa mai bine anumite caracteristici ale imaginii studiate, sau
prelucrării automate în scopul recunoaşterii formelor.
Scopul transformărilor descrise în acest paragraf este de a obţine anumite
structuri formate din linii şi curbe (imagini de tip 3) necesare recunoaşterii formelor.
În analiza imaginilor, o etapă importantă o constituie extragerea caracteristicilor în
scopul descrierii sau interpretării scenelor, urmată de o altă etapă şi anume segmentare
care presupune printre altele determinatrea conturului.

3.1. Determinarea conturului

Determinarea conturului este transformarea unei imagini de tip 2 (alb-negru) în


imagine de tip 3 (formată din linii şi curbe), după clasificarea dată în [3].

Muchiile, care caracterizează conturul obiectului (conturul fiind descris prin


muchii), sunt utile în recunoaşterea obiectelor (clasificarea în cazul reprezentărilor
codificate). Muchiile sunt locaţii de pixeli cu salturi mari de nuanţă (nivel) de gri. În
imaginile alb-negru, muchiile sunt formate din puncte (pixeli) de culoare neagră cu cel
puţin un punct alb în vecinătate.

În rezolvarea aceste probleme trebuie precizate următoarele :

a) Conexitatea, adică definirea vecinătăţii.

Putem considera că un punct P(j,i) are patru vecini ( pe cele patru direcţii,
r(P), u(P), l(P), d(P) ) din fereastra ecran (VE) :

V4(P) = { Q  VE / (P,Q) =1 }

sau opt vecini :

V8(P) = { Q  VE / 1 (P,Q) < 2 }

Figura 3.1.1

b) Precizarea apartenenţei conturului (Interior sau Exterior).

Dacă imaginea este alb-negru, atunci vom preciza culoarea fondului şi culoarea
obiectului. Practic vom preciza o culoare (alb sau negru) care reprezintă culoarea

29
punctelor pentru care se verifică apartenenţa la contur (vezi figurile de mai jos, unde
conturul poate fi unul din cele două).

********** ******************

Figura 3.1.2 Figura 3.1.3

De exemplu PConturului dacă :

 Culoare(P)=Negru şi
 | {QVv(P) / Culoare(Q)=Alb } | >1

Practic se verifică pentru fiecare punct PVE condiţiile de tipul celor de mai
sus, sau mai simplu, putem spune că P  Conturului dacă următoarea expresie este
adevărată:

Ob(P) Xor (Ob(u(P)) Or (Ob(d(P))) Or (Ob(P) Xor (Ob(l(P)) Or (Ob(r(P))) ,


unde Ob(P) = (Culoare(P)= Culoare_Obiect) , Culoare_Obiect { Alb, Negru }.

c) Obţinerea descrierii conturului prin traversarea punctelor determinate.

Mulţimea punctelor P determinate anterior se va ordona, prin parcurgerea


acestei din vecin în vecin (rezultând şi şirul comenzilor de descriere, adică -cuvântul
corespunzător) începând cu un punct ales din contur (de exemplu cel mai din stânga-
sus), până se revine la punctul iniţial sau nu se mai poate deplasa.

Dacă mai există puncte din contur


netraversate se construieşte alt cuvânt de
descriere şi aşa mai departe. In final vom
avea o mulţime de -cuvinte de descriere,
deci un -limbaj (aşa cum se poate vedea în
figura alăturată unde vor fi două cuvinte de
descriere).
Figura 3.1.4

30
3.2. Scheletizare

Obiectele sau scenele pot fi descrise prin diverse structuri compuse din diferite
elemente (linii, curbe, etc). De exemplu în recunoaşterea caracterelor, amprentelor,
cromozomilor, a norilor, etc., sunt necesare transformări ale axei mediane în scopul
obţinerii unei descrieri a obiectului studiat. În cele ce urmează vor fi prezentate două
clase de algoritmi şi anume: de scheletizare şi de subţiere.

Intuitiv, putem să definim scheletul ca fiind


mulţimea punctelor în care se întâlnesc cel puţin două
tangente la contur care pleacă cu aceeaşi viteză (vezi
figura alăturată).
Practic, scheletul unui obiect Ob este definit ca
fiind mulţimea punctelor POb pentru care distanţa
până la cel mai apropiat punct de pe contur (notată cu
(P) ) realizează un maxim local.

Algoritmul de determinare a scheletului unui Figura 3.2.1


obiect este următorul:

 Calculează (P) pentru toate punctele POb:

1. 0(P) = Culoare(P)  {0, 1} , POb;

0 = Negru este culoarea fondului iar


1 = Alb este culoarea obiectului;

2. k(P) = Culoare(P) + Min k -1(Q) , POb,


QV4(P) Figura 3.2.2

k=1,2,...,lăţimea obiectului;

 Determină Scheletul = { S  Ob / (S)   (P) , P  V(S) }

Reconstituirea obiectului având scheletul acestuia se poate realiza utilizând


formula :

Obr = { OVE / d(O,P)<(P) }


PSchel.
(practic prin desenarea discurilor de centru P şi rază (P), pentru fiecare punct POb)

31
3.3. Subţiere
Algoritmii de subţiere urmăresc transformarea obiectelor într-un set de arce
digitale aflate de-a lungul axelor mediane (vezi figura 3.3.1).
O caracteristică importantă a acestor algoritmi
constă în faptul că structura obţinută nu depinde de
neregularităţile mici ale conturului. Strategia acestor
algoritmi poate fi următoarea: se elemină punctele P  Ob
 Contur(Ob), adică acele puncte de pe marginea sau
frontiera obiectului, care îndeplinesc următoarele condiţii:
 au cel puţin doi vecini (Ob): |V8(P)Ob|  2 (Nv(P)>1) Figura 3.3.1
 nu provoacă prin eliminare o deconectare a
obiectului (rupere a legăturilor) :
32148567

Ob este conex  Ob \ {P} este conex.

Definiţia 3.3.1 110111000

R este o regiune conexă dacă pentru  P,Q  R există


P0=P, P1,...,Pn=Q  Ob astefl încât PiV8(Pi-1),  i=1,2,...,n.
Figura 3.3.2
Observaţia 3.3.1
Extremităţile arcelor subţiri nu trebuie eliminate prin aceşti algoritmi.

Notaţia 3.3.1
Numărul vecinilor punctului P (de culoare albă,  Ob) este :
Nv(P)::= |{Q/QOb}V8(P)|.

Notaţia 3.3.2
Numărul tranziţiilor de la 0 la 1 în şirul punctelor P1, P2 ,..., P8, P9=P1 este:
Nt(P) ::= |{i{1,...,8} / PiOb şi Pi+1Ob}V8(P)| (vezi figura 3.3.2, unde Nt(P)=2)

Propoziţia 3.3.1
Punctul POb se poate elimina dacă următoarele condiţii sunt îndeplinite:
 2Nv(P)6 ( dacă Nv(P)=1 atunci P este extremitate, iar dacă Nv(P)>6 atunci P
este punct interior, deci nu se poate elimina nici în acest caz);
 Nt(P)=1 ( pentru a nu deconecta obiectul ).
Algoritmul constă în determinarea şi eliminarea punctelor care îndeplinesc
propoziţia 3.3.1. Verificarea condiţiilor se repetă până când nu mai sunt modificări în
imagine.

32
3.4. Transformări morfologice ( Morphological Processing [4])

Termenul de morfologie provine din studiul formelor plantelor şi animalelor,


dar pentru noi, Morphological Processing ([4]), înseamnă determinarea structurii
obiectelor din imaginile acestora.
Transformările morfologice constau în operaţii prin care un obiect X este
modificat de către un element structural B rezultând o formă convenabilă prelucrărilor
ulterioare (recunoaşterea formei). Cele două elemente care interacţionează (X şi B)
sunt reprezentate ca mulţimi din spaţiul Euclidian bidimensional.
Majoritatea operaţiilor morfologice pot fi definite prin doua operaţii de bază,
eroziune şi dilatare descrise în cele ce urmează.

Notaţia 3.4.1
Bx
Translaţia lui B în x notată cu Bx,
OB
este acea translaţie pentru care originea
elementului structural B (OB) va coincide x
cu x (vezi figura alăturată).
X B
Definiţia 3.4.1

Eroziunea lui X de către B, notată cu XO- B, este mulţimea tuturor punctelor x


pentru care Bx este inclusă în X:

XO- B = { x / Bx  X }.

Exemplul 3.4.1
oooooooooo oooooooooo
oooooooooo oooooooooo
oooooooooo oooooooooo
oo o oo o o o oo
oo o oo o o o oo
O- o o o oo o o o o o
o o o oo o o o o o
oooooooooo oooooooooo
oooooooooo oo oooooooooo
o o oo o oo o oo o o o o o oo o o o
o o o oo o oo o o oo oo oo oo oo
o oo o oo o o o o o oo o oo o oo o

O- =
o oo o oo o oo o o oo o o o oo oo
o o o oo o oo o o oo oo o o oo o o

oo
oo o oo o o o oo o o o oo o o o oo

oooooooooo oooooooooo
o oo o oo o o o o o oo o oo o o o o

oo
oo oooooooooo oooooooooo
oooooooooo oooooooooo
oooooooooo oooooooooo

Legendă:
o - Origine,
Se observă că eroziunea este o operaţie de o - Obiect,
micşorare a obiectului. o - Fond,
o - Şters.

33
Definiţia 3.4.2
Dilatarea lui X prin B, notată cu XO+ B, este mulţimea acelor puncte x pentru
care Bx şi X au cel puţin un element (punct) comun:

XO+ B = { x / Bx  X   }.

Exemplul 3.4.2 ooooooooooooooo


ooooooooooooooo
ooooooooooooooo
ooooooooo ooooooooooooooo
ooooooooo ooooooooooooooo
o oo o oo oo o oo oo o o
o oo o oo oo o oo oo o o

ooooooooo ooooooooooooooo
O+
o oo o oo oo o oo o o o o
o oo o oo oo o oo o oo o

ooo ooooooooooooooo
oo o oo oo o o o oo o oo o o oo o o o oo

ooooooooo
oo o oo oo o o o oo o oo o o oo o o o oo
oo o oo oo o o o oo o oo oo oo o oo o o
oo o oo o o o o o oo o oo oo o o o oo o o
oo o oo o o o o o oo o oo o oo o o oo o o

O+ o o o = ooooooooooooooo
oo o oo oo oo o o o oo o o o oo o oo o o

ooooooooo
oo o o o oo o o o o o oo o o o oo o oo oo
oo o o o oo o o o o o oo o oo oo o oo oo
o oo o oo oo o oo oo o o
o oo o oo oo o oo oo o o

ooo
ooo ooooooooo ooo ooooooooooooooo
ooo
ooooooooo ooooooooooooooo
ooooooooo ooooooooooooooo
ooooooooooooooo
ooooooooooooooo
ooooooooooooooo

Legendă:
o - Origine,
o - Obiect,
o - Fond,
Se poate observa că dilatarea este o operaţie de o - Şters,
o - Adăugat.
extindere a obiectului.

Cele două transformări morfologice de bază prezentate mai sus au următoarele


proprietăţi:

a) Invarianţa la translaţie (Tr) :


- Tr(X) O+ B = Tr(XO+ B) ,
- Tr(X) O- B = Tr(XO- B) ;

b) Nici una nu este inversa celeilalte :


- (X O+ B) O- B  X ,
- (X O- B) O+ B  X ;
c) Distributivitate :
- X O+ (BB') = (XO+ B)  (XO+ B') ,
- X O- (BB') = (XO- B)  (XO- B') ,
- (XY) O- B = (XO- B)  (YO- B) ;
d) Iteraţie :
- (X O+ B) O+ B' = X O+ (BO+ B') ,

34
- (X O- B) O- B' = X O- (BO+ B') ,
e) Incluziune :
- Dacă XX' Atunci X O- B  X' O- B,
B ,
şi X O+ B  X' O+ B, B ;
- Dacă BB' Atunci X O- B  X O- B',
X;
f) Dualitate (eroziunea şi dilatarea sunt duale faţă de complementare notată cu XC):
- (XC O+ B) = (X O- B)C .

În continuare vom prezenta câteva transformări uzuale, derivate din operaţiile


de bază (eroziune şi dilatare) descrise mai sus. Vom vedea că transformările axei
mediane şi subţierea pot fi descrise şi realizate prin astfel de transformări morfologice.
a) Potrivirea, notată cu XO* B, verifică dacă o structură BX şi BCXC:
*
- X O* B= (X O- B)  (XCO- BC) = (X O- B)  (XO+ BC )C =

= (X O- BOb) \ (XO+ BBk) (s-a notat B cu BOb, iar BC cu BBk)


pentru că dacă (XC O+ B) = (X O- B)C (proprietatea f) pentru X şi B) rezultă

(X O+ BC) = (XC O- BC)C (aplicată pentru XC şi BC). (*)
BOb trebuie să se potrivească cu obiectul X, iar BBk cu fundalul (Background);
În exemplul de mai jos se caută colţurile obiectului pe direcţia dreapta-jos:

ooooooooo ooooooooo
ooooooooo ooooooooo
ooooooooo ooooooooo
ooooooooo ooo ooooooooo
ooooooooo O* ooo
ooo
= ooooooooo
ooooooooo ooooooooo
ooooooooo ooooooooo
ooooooooo ooooooooo

respectiv pe direcţia stânga sus:


oooooooooo oooooooooo
oooooooooo oooooooooo
oooooooooo oooooooooo
oooooooooo ooo oooooooooo
oooooooooo oooooooooo
oooooooooo O* ooo
ooo
= oooooooooo
oooooooooo oooooooooo
oooooooooo oooooooooo
oooooooooo oooooooooo

35
b) Deschiderea lui X faţă de B, notată cu XB este domeniul baleiat de toate translaţiile
lui B incluse în X:
- XB = (X O- B) O+ B;
Netezeşte conturul (elimină asperităţile) şi separă insulele mici:

ooooooooo ooooooooo
ooooooooo ooo ooooooooo
ooooooooo ooo ooooooooo
ooooooooo ooo ooooooooo

X B  XB

ooooooooo ooooooooo
ooooooooo ooooooooo
ooooooooo ooooooooo
ooooooooo ooooooooo

XO- B (XO- B)O+ B

c) Închiderea lui X faţă de B, notată cu XB este duala deschiderii:


- XB = (X O+ B) O- B;
Blochează (închide) calanele înguste şi lacurile mici:

ooooooooo ooooooooo
ooooooooo ooo ooooooooo
ooooooooo ooo ooooooooo
ooooooooo ooo ooooooooo

X B  XB

d) Determinarea Conturlui ( X ):
-  X = X \ (X O- G);
Determină punctele de pe contur fără a da o ordine a acestora:

ooooooooo ooooooooo
ooooooooo ooooooooo
ooooooooo ooo ooooooooo
ooooooooo ooo ooooooooo
ooooooooo ooo ooooooooo
ooooooooo ooooooooo

X G  X

Se poate observa în exemplul de mai sus că X O- G reprezintă interiorul lui X, pe


care dacă îl eliminăm din X vom obţine conturul acestuia.

e) Subţierea, ca operaţie mofologică se defineşte astfel:

36
- X O B = X \ (X O* B);

ooo*o*ooo o - obiect,
Elementul structural uzual este B = ; unde: o - fond,
* - neutru.

Pentru o subţiere simetrică se va aplica succesiv operaţia descrisă mai sus,


utilizând ca element structural obiectul B rotit:

X O s B = ((…((X O B1) O B2) O …) O Bn), unde: B1=B şi Bi = Rotit(Bi-1),


1in.

oooooooooooooo oooooooooooooo
oooooooooooooo oooooooooooooo
oooooooooooooo ooo oooooooooooooo
oooooooooooooo ooo oooooooooooooo
oooooooooooooo ooo oooooooooooooo
oooooooooooooo oooooooooooooo
oooooooooooooo oooooooooooooo

X B  X Os B

f) Îngroşarea lui X prin B, notată cu X Oo B este duala subţierii şi se defineşte astfel:


- X Oo B = X  (X O* B);

oooooooooooooo oooooooooooooo
oooooooooooooo oooooooooooooo
oooooooooooooo ooo oooooooooooooo
oooooooooooooo ooo oooooooooooooo
oooooooooooooo ooo oooooooooooooo
oooooooooooooo oooooooooooooo
oooooooooooooo oooooooooooooo

X B  XOo B

g) Scheletul unui obiect X este definit astfel:


Fie rDx discul de rază r şi centru x;
Fie sr(x) mulţimea centrelor discurilor de rază r, maximale, conţinute în X şi care

intersectează conturul obiectului X în cel puţin două puncte.


Scheletul lui X, notat cu S(X) este mulţimea centrelor sr(x):

- S(X) = sr(x) , iar sr(x) = (X O- rD) \ (X O- rD)drD ,


r >0
unde drD este un disc oricât de mic;
Obiectul X reconstituit din scheletul său este:

- X=
r >0
[sr(x) O+ rD ] .
Pentru a obţine scheletul unui ooooooo ooooooo
ooooooo ooooooo
obiect vom înlocui discul rD cu ooooooo ooooooo
ooooooo ooooooo
ooooooo ooooooo
ooooooo ooooooo
ooooooo ooo ooooooo 37
ooooooo ooo ooooooo
ooooooo ooo ooooooo

X G S(X)
elementul de structură (G) definit
de un pătrat de dimensiuni 3x3 aşa
cum se opate vedea în figura
alăturată:

În acest mod putem obţine


 Scheletul lui X:
n max n max

- S(X) = sn(x) = [(X O- nG) \ (X O- nG)G ] ,


n= 0 n= 0

unde nmax este cel mai mic n pentru care X O- nG =  (erodat succesiv devine vid);
 Obiectul X reconstituit:
n max

- X= [sn(x) O+ nG ] .
n= 0

h) Curăţare (Prune ), elimină ramurile nedorite, care pot rezulta la o operaţie de


subţiere:
- Xpn = X1 [ (X2O+ G) X], unde:
 X1 = X O s E ;
8

 X2 = [ X1O* E j ] ;
j= 1

***oooooo o - obiect,
E= o - fond,
* - neutru.
;

oooooooooooooo oooooooooooooo
oooooooooooooo oooooooooooooo
oooooooooooooo ooo oooooooooooooo
oooooooooooooo ooo oooooooooooooo
oooooooooooooo ooo oooooooooooooo
oooooooooooooo oooooooooooooo
oooooooooooooo oooooooooooooo

X B  Xpn

38
Lucr ă ri de laborator

1. Reprezentarea imaginilor prin funcţii picturale şi cuvinte picturale (1.1)



 Conversii între imagini descrise prin funcţii picturale şi cuvinte picturale
(algoritmii 1.1.1-1.1.3), descrieri prin puncte critice şi aproximare Bezier.

2. Reprezentarea imaginilor prin arbori (1.2)



 Codificarea şi decodificarea unei imagini digitale utilizând quad arbori şi
arbori binari.

3. Îmbunătăţirea imaginilor - Operaţiuni punctuale (2.1)



 Să se genereze pe ecran o imagine şi apoi să se aplice o transformare de
îmbunătăţire a imaginilor prin operaţiuni punctuale (accentuarea
contrastului, reducerea zgomotului şi modificarea histogramei).

4. Îmbunătăţirea imaginilor - Operaţiuni spaţiale (2.2)



 Să se genereze o imagine pe ecran iar apoi să se aplice acesteia o
transformare de îmbunătăţire utilizând operaţiuni spaţiale (mediere,
filtrare şi accentuarea conturului).

5. Îmbunătăţirea imaginilor - Operaţiuni spaţiale (2.2)



 Dilatarea, îmbunătăţirea şi pseudocolorarea unei imagini medicale date
de tip 2 (cu nuanţe de gri).

6. Transformări ale imaginilor - Determinare contur, Scheletizare, Subţiere (3.1-3.3)



 Aplicaţi cele trei transformări (Determinare contur, Scheletizare şi
Subţiere) unei imagini generate pe ecran.

7. Transformări ale imaginilor (II) - Transformări morfologice (3.4)



 Aplicaţi cele două transformări de bază (Eroziune şi Dilatare), plus încă
două oparaţii (de acest tip, la alegere), unei imagini aflate pe ecran.

39
Bibliografie

1. A.K. Jain, Fundamentals of DigitalImage Processing, Prentice-Hall, London,


1989.

2. S. Nedevski, Prelucrarea Imaginilor şi Recunoaşterea Formelor, Editura Albastră,


Cluj-Napoca, 1998.

3. T. Pavlidis, Algorithms for Graphics and Image Processing, Springer-Verlag,


Berlin-Heidelberg, 1982.

4. V. Prejmerean, Grafică pe calculator şi prelucrări de imagini, Litografia


Universităţii de Nord Baia Mare, 2000.

5. A. Vlaicu, Prelucrarea digitală a imaginilor, Editura Albastră, Cluj-Napoca, 1997.

6. A. Watt, 3D Computer Graphics, Addison-Wesley, Great Britain, 1993.

40

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