Sunteți pe pagina 1din 50

---------2007----------------

1. Gradientul unei imagini: definitie, utilizare, operatori discreti de aproximare a


gradientului
Vectorul gradient reprezinta directia si marimea variatiei maxime de intensitate intr-un punct al
unei imagini. El este definit în funcţie de derivatele parţiale ale funcţiei imagine, f(x,y):

 ∂ f ( x, y)
 ∂x 
∇ f (x, y)= 
∂ f ( x, y)
 
 ∂y 

 ∂f ( x, y ) 
∂f ( x, y ) ∂f ( x, y )  ∂x   D x 
Notam cu D x = şi D y = , atunci  ∂f ( x, y )  =  
∂x ∂y   D y 
 ∂y 

Amplitudinea gradientului în pixelul (x,y) este:

1
D (x, y) = [D x2 (x, y) + D y2 (x, y)] 2

Ea reprezinta puterea frontului (marimea variatiei de intensitate) în pixelul respectiv


si este adesea aproximata prin:

D( x, y ) =| D x | + | D y |
D( x, y ) = Max(| D x |, | D y |)

Direcţia gradientului (frontului) este:


Dy
θ = arctg ( )
Dx

Vectorul gradient este perpendicular pe directia frontierei:


Punctele de front dintr-o imagine sunt detectate calculând gradientul in fiecare pixel şi
identificând acei pixeli pentru care amplitudinea gradientului este mai mare decât un prag dat.

Pentru implementarea discretă a gradientului au fost propuşi mai mulţi operatori. De exemplu:

Aproximarea prin diferenţe finite. Cele 2 derivate se aproximează prin:

∂f ( x, y ) f ( x + ∆x, y ) − f ( x, y )
D1x = ≈
∂x ∆x
∂f ( x, y ) f ( x, y + ∆y ) − f ( x, y )
D1 y = ≈
∂y ∆y

Aceste aproximari corespund corelării funcţiei imagine cu măşti de convolutie de forma:

[ − 1 1] si 
1

− 1

O altă aproximare este:

f ( x + ∆x, y ) − f ( x − ∆x, y )
D2 x ≈
2(∆x)
f ( x, y + ∆y ) − f ( x, y − ∆y )
D2 y ≈
2( ∆y )

D2x şi D2y sunt aproximări mai bune în mijlocul intervalului, adică în (x,y) şi corespund corelării
funcţiei imagine cu măştile:
½[-1 0 1] si ½ [ 1]
[ 0]
[-1]

Cei mai utilizati detectori de fronturi bazati pe gradient sunt: Roberts (numit si operatorul cruce),
Sobel si Prewitt. Ei sunt definiti pentru imagini in mai multe nivele de gri, dar utilizarea lor poate
fi extinsa pentru imagini color.
Detectorul Roberts (cruce)

Componentele gradientului intr-un pixel (x,y) sunt aproximate prin:

D+ (x,y) = f(x + 1, y + 1) – f(x,y)


D- (x,y) = f(x , y + 1) – f(x + 1, y)

D+ si D- se calculeaza cu urmatoarele 2 masti de convolutie:

D- D +

Cele 2 masti sunt proiectate pentru detectia maxima a fronturilor avand directii de 45 si 135
grade (directii perpendiculare, de unde si numele de “operatorul cruce”):

Amplitudinea gradientului in (x,y) este aproximata prin:

D(x,y) = |D-(x,y)| + |D+(x,y)|

Orientarea frontului in pixelul (x,y) este data de:

θ = arctg(D+ / D-) - 3π/4

Orientarea (unghiul) zero inseamna ca directia contrastului maxim de la negru la alb este de la
stanga la dreapta in imagine, celelalte unghiuri fiind masurate in sensul acelor de ceas fata de
unghiul zero.
De regula, iesirea produsa de acest detector este numai matricea amplitudinilor, vizualizata sub
forma unei imagini in nivele de gri. In acest caz, cele doua componente ale gradientului pot fi
calculate si adunate intr-un singur pas, utilizand urmatoarea masca de pseudo-convolutie:

Principalul avantaj al utilizarii acestui detector este simplitatea calculelor: operatii de adunare si
scadere cu valorile a numai 4 pixeli.

Dezavantajul: deoarece utilizeaza un nucleu foarte mic, este foarte sensibil la zgomot. De
asemenea, raspunsul sau la frontiere reale este slab daca acestea nu sunt foarte “abrupte” (o
tranzitie de intensitate foarte mare).

1.2. Detectorul Sobel

Gradientul este aproximat prin convolutia imaginii cu urmatoarele masti:

Dx Dy

Mastile sunt proiectate pentru raspuns maxim la fronturi cu directiile verticala si orizontala. Ele
pot fi aplicate separat imaginii de intrare, fiind apoi folosite pentru calculul amplitudinii si al
directiei frontului in fiecare pixel al imaginii de intrare.
Amplitudinea este aproximata prin:

D(x,y) = |Dx| + |Dy|


iar directia prin:

θ= arctg (Dy / Dx)

Unghiul zero inseamna ca directia contrastului maxim de la negru la alb este de la stanga la
dreapta in imagine, celelalte unghiuri fiind masurate in sens trigonometric (invers acelor de ceas)
fata de unghiul zero.
Atunci cand iesirea detectorului de fronturi este numai matricea amplitudinilor, componentele Dx
si Dy pot fi calculate si adunate intr-un singur pas, folosind operatorul de pseudo-convolutie:

D(x,y) = | (P3 + 2xP6 + P9) – (P1 + 2x P4 + P7)| + | (P1 + 2xP2 + P3) – (P7 + 2x P8 + P9) |
unde P1,…, P9 sunt pixelii acoperiti de masca de convolutie, ca in figura urmatoare:

Operatorul Sobel solicita mai multe calcule decat operatorul Roberts, dar masca sa de
convolutie fiind mai mare, netezeste mai mult imaginea si de aceea este mai putin sensibil la
zgomot. Produce valori de amplitudine mai mari decat cele produse de operatorul Roberts,
pentru aceleasi frontiere.

Matricea amplitudinilor produsa de acest operator poate fi vizualizata ca o imagine in nivele de


gri.
Datorita efectului de netezire pe care il are, frontierele apar adesea in aceasta imagine ca linii a
caror latime este de mai multi pixeli. Pentru subtierea frontierei este necesare o postprocesare,
cum ar fi aceea de “histerezis”, din algoritmul Canny.
1.3. Detectorul Prewitt
Este asemanator detectorului Sobel. Foloseste mastile:
2. Algoritmul de segmentare prin divizare recursiva a imaginii.
Implementare C sau pseudocod. Avantaje si dezavantaje
Se porneşte de la premisa că întreaga imagine este omogenă. Dacă nu este adevărat, atunci
imaginea este divizată în patru regiuni. Procedura de divizare este aplicată recursiv până când
se obţin numai regiuni omogene.

void divideReg(imagine a, imagine b, int N1, int M1, int N2, int M2,
int T, int *N)
{// a este imaginea de intrare iar b, imaginea de iesire
//N1,M1 - N2,M2 sunt colturile dreptunghiului imaginii segmentate
// reprezinta pragul folosit in criteriul de omogenitate
// in N se memoreaza numarul de regiuni rezultate din divizarea
recursiva
long s;
if(!omogen(a,N1,M1,N2,M2,T) && (N2-N1)>1 && (M2-M1)>1)
{
divideReg(a,b,N1,M1,N1+(N2-N1)/2,M1+(M2-M1)/2, T,N);
divideReg(a,b,N1+(N2-N1)/2,M1,N2,M1+(M2-M1)/2, T,N);
divideReg(a,b,N1,M1+(M2-M1)/2,N1+(N2-N1)/2,M2 T,N);
divideReg(a,b,N1+(N2-N1)/2,M1+(M2-M1)/2,N2,M2, T,N);
}
else
// regiune omogena; calculeaza media sa si o asigneaza
// pixelilor regiunii in imaginea de iesire
{
(*N)++;
s =0;
for(int i= M1; i<M2; i++)
for(int j=N1;j<N2;j++)
s+ = a[i][j];
s/=(N2-N1)*(M2-M1);
for(i=M1; i<M2; i++)
for(j=N1; j<N2; j++)
b[i][j] = (unsigned char) s;
}
return;
}

int omogen(imagine a, int N1, int M1, int N2, int M2, int T)
{
int max =0, min = Lmax; // nivelul maxim de intensitate
for(int i=M1; i<M2; i++)
for(j=N1; j<N2; j++)
{
if(a[i][j] < min) min= a[i][j];
if(a[i][j] > max) max = a[i][j];
}
if(max - min < T) return 1; // criteriul de omogenitater
else return 0;
}

• Algoritmul de segmentare prin divizare recursivă produce o imagine segmentată care


poate fi reprezentată printr-un arbore cuadric :

Fiecare nod are patru fii, corespunzători celor patru regiuni în care se face divizarea de fiecare
dată. Este suficient să se memoreze în fiecare nod al arborelui intensitatea care a fost atribuită
pixelilor regiunii corespunzătoare nodului.
• Algoritmul are însă un dezavantaj major : poate produce regiuni adiacente similare.
Astfel:
dacă P(R) este un predicat logic care defineşte regula de segmentare (de
exemplu Imax – Imin < prag ),
atunci,
dacă P(Ri U Rj) = TRUE
=> Ri si Rj sunt regiuni similare.
Regiunile adiacente similare trebuie să fie unificate.

3. Algoritmul de extragere a conturului exterior al unei regiuni.


Explicatii si reprezentare in pseudocod.
• Punctul de start se alege astfel încât vecinul său 4 să nu aparţină regiunii.
Alegerea se bazează pe cunoaşterea intensităţii pixelilor din regiune.
Punctul de start ales poate fi un pixel izolat.

Notaţii: S - pixelul de start


C - pixelul curent
D - direcţia de căutare a urmatorului pixel de contur, unde 0≤D≤7, iar
direcţiile sunt codificate astfel:

3 2 1
4 P 0
5 6 7

urm - pixelul din vecinatatea celui curent, care ar putea fi următorul


pixel de frontieră (contur)

contur = vector în care se memorează direcţia de deplasare în fiecare


pas; în final se va obţine reprezentarea prin cod de înlănţuire (Freeman)
a conturului traversat.

urm in R = true, daca urm aparţine regiunii R (are intensitatea pixelilor


regiunii).

Operatiile ⊕ si Θ sunt operatii “modulo”. Astfel:

daca D=0 atunci D Θ1=7


daca D=6 atunci D ⊕ 2 =0

Iniţial D=6.

În fiecare iteraţie se caută următorul punct de contur printre vecinii D Θ 1, D, D ⊕1


ai pixelului curent.

Algoritmul se termină când pixelul curent este cel de start.

Este posibil ca pixelul de start sa fie un punct izolat. De aceea, daca dupa trei iteratii
nu s-a gasit un alt punct de contur, inseamna ca punctul de start este punct izolat.

Functia PunctContur prezentata in continuare primeste ca parametru punctul de


contur curent si intoarce urmatorul punct de contur, sau punctul curent daca in

vecinatatile D Θ 1, D, D ⊕ 1 nu se gaseste un punct de contur. Directia in care s-a


gasit urmatorul punct de contur este memorata in vectorul contur.

unsigned char * contur;


int n=0, D;

Punct PunctContur (Punct C)


{ Punct urm;
urm = vecin(C, D Θ 1);
if (urm in R)
{ contur[n++] = (unsigned char) (D Θ 1);
D = D Θ 2;
return urm;
}

urm = vecin(C, D);


if (urm in R)
{ contur[n++] = (unsigned char)D;
return urm;
}
urm = vecin(C, D ⊕ 1);
if (urm in R)
{ contur[n++] = (unsigned char)(D ⊕ 1);
return urm;
}

D = D ⊕ 2;
return C;
}

Functia ExtrageContur primeste ca parametru punctul de start contur.

int ExtrageContur (Punct S)


{ Punct C = S;
D = 6; // directia de cautare initiala

// cauta al doilea punct de contur


for (int k = 0; k<3; k++)
{ C = PunctContur(C);
if (C !=S) break;
}

if( k==3) return 0; // S este punct izolat

// traverseaza conturul
while( C != S)
C = PunctContur(C);
return 1;
}

4. De minim cate puncte e nevoie pt reprezentarea unei curbe B-Spline


(intrebarea asta a fost grila)

5. Proprietatile suprafetelor Hermite


Suprafete Hermite (Coons)
O curba Hermite este definita prin : coordonatele punctelor extreme si
tangentele in punctele extreme.
Ecuatia geometrica a unei curbe Hermite (Coons) este urmatoarea :
p(u) = [ F1(u) F2(u) F3(u) F4(u) ] * [ P0 P1 P0u P1u ]T
unde Fi(u) sunt functiile de ponderare (sau de amestec) specifice
curbelor Hermite.
Functiile de ponderare determina contributia conditiilor geometrice in
calculul punctelor de pe curba. Fie:
F(u) = [F1(u) F2(u) F3(u) F4(u)]
din care extragem matricea MH, matricea de baza Hermite (specifica
curbelor Hermite).

F(u) = U*MH
Atunci, ecuatia curbei Hermite se poate rescrie astfel:
p(u) = U*MH*GH

O suprafata Hermite este definita prin :


coordonatele colturilor suprafetei
vectorii tangenti in cele 4 colturi
vectorii de rasucire

In continuare folosim urmatoarele notatii :


P00= p(0,0);
P01= p(0,1);
P10= p(1,0);
P11= p(1,1);
vectorii tangenti la suprafata ( cate 2 pentru fiecare colt al
peticului ):
Pu00=puuw(0,0);
Pw00=pwuw(0,0);
………………..
unde p uw este derivata partiala in raport cu u iar pwuw este derivata partiala in
u

raport cu w.
vectorii de rasucire ( cate unul pentru fiecare colt ) :
Puw00, Puw01,Puw10,Puw11 , unde

Imaginea unui astfel de petic este prezentata in figura urmatoare:


Peticul Hermite contine 2 familii de curbe Hermite, ortogonale in spatiul parametric.
Coordonatele colturilor si vectorii tangenti definesc curbele marginitoare ale
peticului. De exemplu:

p0w = F(u)* [ P00 P01 P00w P01w ]T


pu0 = F(u)* [P00 P10 P00u P10u ]T

Pentru curbele Hermite, conditiile geomtrice se reprezinta printr-un vector.


Pentru peticele Hermite, conditiile geomtrice sunt cuprinse intr-o matrice, SH,
alcatuita astfel :

Impunand in forma algebrica, generala pentru peticele bicubice, conditiile


geometrice care definesc peticul Hermite, rezulta 16 ecuatii vectoriale din
care se obtin cei 16 coeficienti algebrici. Inlocuind expresiile lor in forma
algebrica si apoi grupand termenii dupa variabilele prin care sunt
reprezentate conditiile geometrice, obtinem forma geometrica :
p(u,w) = [ F1(u) F2(u) F3(u) F4(u) ] SH [ F1(w) F2(w) F3(w) F4(w) ]T
unde F1, F2, F3, F4 sunt functiile de ponderare pentru curbele Hermite.
Ecuatia se poate rescrie :
p(u,w) = F(u) SH F(w)
dar, F(u) = U* MH si F(w) = W* MH.
Rezulta forma (ecuatia) geometrica matriciala a peticului Hermite:
p(u,w) = U * MH * SH * MHT * WT
in care SH contine conditiile geometrice care definesc suprafata, iar MH
este matricea de baza Hermite.
Forma algebrica matriciala este:
p(u,w)= U * A * WT
deci, A = MH * SH * MHT

In majoritatea aplicatiilor se folosesc suprafete determinate prin mai mult de


4 puncte. Acestea se pot obtine, de exemplu, prin compunere din petice
Hermite. Continuitatea la jonctiunea peticelor se poate impune prin conditiile
geometrice ale peticelor.
Dezavantajul peticelor Hermite este ca definirea se face prin vectori
tangenti si vectori de rasucire, ele fiind astfel incomode pentru aplicatiile de
proiectare asistata de calculator interactive.

6. Se da un paralelipiped din care se scotea regiunea de intersectie cu doi


cilindri (iesea un paralelipiped cu doua gauri in el de le cilindri). Se
cerea reprezentarea figurii folosind arbore de constructie si daca se poate
aplica formula Euler
7. Reprezentarea solidelor prin arbori octali, inclusiv operatiile booleene
In reprezentarea printr-un tablou spatial, cu voxeli de aceeasi
marire, un numar mare de voxeli care fac parte din solid pot forma
un cub cu latura mai mare. Asadar, plecand de la cubul incadrator
al solidului (cubul cu laturile paralele cu planele principale ale
sistemului de coordonate 3D, care incadreaza solidul), se determina
prin divizare recursiva cuburile de latura maxima care aproximeaza
solidul . Divizarea se face de fiecare data in 8 subcuburi de marime
egala.

Fiecare subcub rezultat din prima divizare se reprezinta printr-un


nod pe primul nivel al arborelui. Radacina corespunde cubului
incadrator. Nodurile sunt de 3 feluri : pline (P), vide (V), partial
ocupate (N).

Obs: un nod neterminal s reprezinta printr-un patrat pe jumatate

plin:

Divizarea se continua numai cu subcuburile partial ocupate, pana


cand se obtin numai subcuburi pline sau vide sau pana cand latura
subcubului atinge limita minima prestabilita. In final, solidul este
reprezentat printr-un arbore octal.

Reprezentarea este inexacta daca frunzele arborelui sunt noduri


de tip nedefinit (partial ocupate). O imbunatatire a metodei
foloseste arbori octali exacti. Intr-un arbore octal exact fiecare
nod frunza este :

- vid (subcubul este exterior solidului)


- plin (subcubul este interior solidului)
- nod de tip fata : subcubul contine o parte dintr-o singura
fata
- nod de tip latura : subcubul contine o parte dintr-o singura
latura precum si parti din fetele adiacente
- nod de tip varf : subcubul contine un singur varf impreuna
cu parti din laturile si fetele adiacente in varf

Deoarece divizarea se poate opri destul de repede ajungandu-se


la cele 5 tipuri de noduri, numarul de noduri al unui arbore octal
exact este in general mult mai mic decat al unui arbore octal
obisnuit. In schimb, metoda presupune memorarea in fiecare nod
frunza a informatiei geometrice privind frontiera reprezentata in
nod, cum ar fi :

- indici sau pointeri catre coeficientii ecuatiei planului fetei


sau fetelor
( a*x + b*y + c*z + d = 0 )
- informatie de convexitate pentru nodurile de tip latura
- configuratia spatiala a fetelor pentru nodurile de tip varf

Exemplu:

Solidul poate fi de o parte sau de cealalta a semispatiului definit


de cele 3 fete.

Vizualizarea obiectelor reprezentate prin arbori octali

Se folosesc algoritmi spaciali, deoarece solidul este in acest caz un


set de cuburi care se acopera. Eliminarea suprafetelor ascunse
poate fi realizata eficient : cuburile pline din cei 4 octanti din fata
obtureaza cuburile din octantii din spate, precum si pe toate cele
care au rezultat din divizarea lor.

Operatii booleene cu arbori octali

Fie :

∩ - intersectia;
U - reuniunea;
\ - diferenta;
┐ - complementul;

Stiind ca :

A U B = ┐ (┐A ∩ ┐B);
A \ B = A ∩ (┐ (A ∩ B));

este suficient sa se implementeze numai operatia de intersectie (∩


) si operatia de complementare ( ┐).

Complementul unui arbore octal


Se obtine foarte simplu, prin aplicarea operatorului ┐ fiecarei
frunze : P – plin,
V – vid, N – nedefinit.
┐P = V;
┐V = P;
┐N = N.
8. Maparea texturilor in doi pasi
Maparea in doi pasi este o tehnica de mapare independenta de forma
obiectului pe care se aplica textura. Astfel, daca pentru suprafata texturata
nu exista o functie de mapare inversa, atunci, se stabileste o corespondenta
intre punctele suprafetei texturate si punctele unei suprafete 3D pentru care
exista o functie de mapare inversa, numita in continuare « suprafata
intermediara ». Aplicarea texturii este descompusa in doua operatii, al caror
efect este :
- mularea texturii pe suprafata intermediara;
- mularea suprafetei intermediare pe suprafata de texturat.

a) Mularea texturii pe suprafata intermediara se realizeaza prin functia de


mapare inversa. Aceasta este numita « mapare S », adica mapare pe
suprafata intermediara.
b) Mularea suprafetei intermediare pe suprafata de texturat este numita
« mapare O ». Ea trebuie sa puna in corespondenta fiecarui punct (x,y,z) al
suprafetei (obiectului) de texturat, un punct (xi, yi, zi) al suprafetei
intermediare.

Metoda a fost definita de Bier si Sloan (1986).

Maparea S

Sunt definite 4 tipuri de suprafete intermediare :


1. un plan cu o orientare oarecare;
2. sfera;
3. cilindrul;
4. fetele unui cub.

Alegerea tipului suprafetei intermediare este dependenta de forma obiectului


pe care trebuie sa fie aplicata textura.

Maparea O

Exista mai multe modalitati de mapare a suprafetei intermediare pe obiectul


texturat. Autorii metodei au definit urmatoarele 4 :

1. Fie (x,y,z) un punct al obiectului pentru care se doreste determinarea unei


perechi (u,v). Punctul corespunzator lui pe suprafata intermediara, (xi, yi, zi),
se obtine intersectand suprafata cu vectorul reflectat al vederii in punctul
(x,y,z). R este simetric cu V fata de N.
Metoda este dependenta de pozitia observatorului.

2. (xi,yi,zi) este intersectia suprafetei intermediare cu normala la obiect


in (x,y,z).
3. (xi,yi,zi) este intersectia suprafetei cu dreapta care trece prin (x,y,z) si
centroidul obiectului

4. (xi,yi,zi) este intersectia suprafetei cu dreapta care trece prin (x,y,z) si are
directia normalei la suprafata.
Acest tip de mapare O este corelat cu o mapare S pe un plan sau pe fetele
unui cub.

Combinatia « mapare S pe cilindru » - « mapare O de tip 4 » este


numita « shrinkwrap ».

------2008-----------------
9. Comparatie curbe B-spline-Bezier. Ecuatia parametrica a curbelor Nurbs

10. Peticul cubic Bezier


Definit prin 4x4 puncte de control :
Ecuatia matriciala:
p(u,w) = U * MB * SB * MBT * WT
SB este matricea punctelor care determina peticul Bezier. Ea are forma :
 Un petic Bezier bicubic este determinat de 16 puncte, numite puncte de
control.
 Peticul contine numai 4 dintre acestea (colturile : P00, P03, P30, P33),
celelalte controland forma suprafetei.

O alta forma a ecuatiei parametrice este :


p(u,w) = [ (1-u)3 3u(1-u)2 3u2(1-u) u3 ] * SB * [ (1-w)3 3w(1-w)2 3w(1-w) w3 ]T

 Peticul Bezier are urmatoarele avantaje :


a. este definit doar prin puncte
b. se pot defini colturile suprafetei
c. se pot defini tangentele la curbele marginitoare ale suprafetei, prin
alegerea punctelor de control care definesc frontierele
d. proprietatea de inchidere convexa ( peticul este continut in poliedrul
convex determinat de punctele de control)
e. se poate actiona interactiv asupra formei sale prin deplasarea
punctelor de control
f. calculele necesare pentru divizarea suprafetei sunt simple
g. are proprietatea de invarianta afina
h. are forma poligonului de control
 Dezavantaj :
Suprafata Bezier, ca si curba Bezier, nu poseda proprietatea de control
local . Astfel, deplasarea unui punct de control are efect asupra formei
intregii suprafete, chiar daca s-ar dori o modificare locala a formei !

11. Arbori de constructie(CSG)


Metoda este folosita in PAC a solidelor fiind adecvata interactivitatii.

In acest caz proiectantul dispune de o multime de solide primitive


(paralelipipede, sfere, cilindri, conuri, s.a.) ale caror dimensiuni sunt
parametrizate (latimea, inaltimea, lungimea, raza, …) si care sunt
pozitionate in spatiu folosind transformari geometrice (translatii,
rotatii). Solidele primitive sunt compuse, dupa aplicarea
transformarilor, folosind un set de operatori : reuniune, intersectie,
diferenta.

Reprezentarea interna a obiectului definit prin aceasta metoda


este un arbore binar, numit si “arbore CSG”, in care fiecare nod
neterminal este un operator de compunere, iar frunzele sunt solide
primitive.

Figura urmatoare exemplifica metoda pentru un solid definit prin


expresia:

(P1 U P2) – P3

unde: P1 = P (param 1) T1
P2 = P (param 2) T2
P3 = C (param 3 ) T3 ,
P, paralelipiped parametrizat
C, cilindru parametrizat
T1, T2, T3 transformarile geometrice aplicate celor 3
primitive solide
Reprezentarea unui solid prin aceasta metoda nu este unica si este
ne-ambigua numai daca operatiile booleene sunt “regulate”;
combinarea a 2 solide nu trebuie sa produca fete sau laturi
neconectate. Figura urmatoare reda cazul 2D al unei interectii
conventionale si cel al intersectiei regulate.
Un solid este alcatuit din 2 multimi de puncte: puncte interioare si
puncte de frontiera. Fie A si B doua solide, iA, iB multimile punctelor
interioare si f(iA), f(iB) multimile punctelor de frontiera.

A = iA U f(iA)
B = iB U f(iB)

Operatorii booleeni regulati pot fi definiti astfel:

A ∩* B = (iA ∩ iB) U (f(iA ∩ iB))


A U* B = (iA U iB) U (f(iA U iB))
A -* B = (iA - iB) U (f(iA - iB))

Dezavantajul metodei CSG: pentru vizualizare trebuie obtinuta


reprezentarea prin frontiera (calcule complexe)
Avantajele:
Definirea interactiva de obiecte complexe, atragatoare pentru
utilizator
Adecvata procesului de fabricatie

12. Calculul coordonatelor textura al fragmetelor la rasterizarea unui poligon


Imaginea este calculata linie cu linie iar pentru eliminarea partilor nevizibile se
foloseste algoritmul Z-buffer.
Algoritmul primeste la intrare, pentru fiecare varf, coordonatele (x,y,z) (dupa
transformarea finala din lantul de transformari ale varfurilor) si coordonatele (u,v)
din spatiul textura (determinate prin maparea in doua etape sau furnizate de
programator).

Calculul coordonatelor (u,v) pentru punctele interioare poligonului este similar


calculului intensitatilor in modelul Gouraud:
 Pentru punctele de pe laturi - prin interpolare liniara intre valorile
asociate varfurilor
 Pentru fiecare punct interior – prin interpolare liniara intre valorile
asociate extremitatilor segmentului de linie imagine interior
poligonului

Pentru calculul in punctul A:

Analog in B:
Calculul valorilor u si v in punctele intermediare, M, M’:

Rezulta ca, atat pentru punctele de pe laturi cat si pentru cele de pe segmentele
interioare, coordonatele (u,v) se obtin printr-un calcul incremental.

13. Histograma unei imagini


Histograma unei imagini cu nivelele de gri k= 0, 1, ........L-1 este o functie discreta,

h(k) = nk , unde nk este numarul de pixeli din imagine, cu intensitatea k.

Histograma normalizata este definita prin functia:

h(k) = nk / n, unde n este numarul total de pixeli din imagine.


Histograma imaginii da informatii importante asupra continutului imaginii. Astfel:

 daca valorile mari ale histogramei sunt concentrate in zona de intensitati


mici, imaginea este intunecata.
 daca valorile mari ale histogramei sunt concentrate in zona de intensitati
mari, imaginea este luminoasa.

H h

0 L-1 0
Imagine intunecata imagine luminoasa L-1

0 L-1

 daca imaginea contine 2 obiecte cu intensitati diferite sau un obiect care


se distinge clar de fond, histograma prezinta doi lobi (varfuri de maxim
local, respectiv un varf de minim local).

Daca histograma este comcentrata intr-o zona ingusta de intensitati, contrastul


imaginii este slab si caliatatea imaginii (in privinta perceperii) este slaba. Calitatea
imaginii poate fi imbunatatita modificandu-i histograma, printr-o transformare
numita “egalizarea histogramei sau liniarizarea histogramei”.
H g

g k = T (hk )

egalizarea histogramei

L-1 K

Probabilitatea de aparitie in imagine a nivelului de intensitate k este aproximat prin:


pr(k) = nk / n , k=0,..L-1

Transformarea de egalizare a histogramei este definita astfel:

k nj k
gk = ∑ = ∑ hj
j =0 n j =0

Intensitatea k din imaginea de intrare se va inlocui cu intensitatea gk * (L-1) in


imaginea de iesire.

Calculul histogramei normalizate:

typedef unsigned char **imagine;

void histo(imagine a, int H, int W, int L, float *h)


{unsigned long*lh,n;
* alocare lh
for (i=0;i<L;i++) lh[i]=0;
for (i=0; i<H; I++)
for (j=0; j<W;j++)
lh[ (unsigned int) a[i][j]]++;
n=(float) H*W;
for (i=0; i<L; i++)

h[i]=lh[i]/n;
* dealocare lh;
}

14. Filtre de mediere


Filtrele de mediere sunt filtre spatiale liniare. Ele modifica valoarea fiecarui pixel
calculand o medie ponderata a valorilor pixelilor dintr-o vecinatate a sa (fereastra
de filtrare). Ponderile sunt definite intr-o matrice de forma vecinatatii, numita
masca de convolutie sau kernel.
Aplicarea filtrului peste intreaga imagine este numita adesea convolutia imaginii
cu masca de convolutie.

Fie f(x,y) imaginea pe care se aplica filtrul si w masca de convolutie, un dreptunghi


cu laturile de 2*a, 2*b. Imaginea filtrata in pixelul (x,y) este data de convolutia
discreta:
a b
g(x,y) = Σ Σ w(i,j) * f( x+i, y+j)
i= -a j= -b

Daca toate valorile din w sunt pozitive, filtrul realizeaza o netezire medie (average
smoothing) a imaginii.

Filtrul medie

Cel mai simplu filtru de mediere este filtrul medie, care inlocuieste valoarea
fiecarui pixel cu media aritmetica a valorilor pixelilor din fereastra de filtrare. De
exemplu, pentru a=1, b=1 (fereastra de filtrare 3x3 pixeli), filtrul medie este definit
astfel:

1 1
g(x,y) = 1/9 Σ Σ f( x+i, y+j)
i= -1 j= -1

Filtrul medie este un filtru de netezire (FTJ- filtru “trece jos”). Tot un FTJ
este si filtrul cu urmatoarea masca:
Un FTJ atenueaza componentele de inalta frecventa din imagine, care pot
reprezenta zgomote. Imaginea rezultata din aplicarea unui FTJ este mai incetostata
(neclara) decat imaginea originala. Filtrul atenueaza tranzitiile bruste de intensitate
lasand impresia ca imaginea are mai putine detalii.

Un filtru trece sus (FTS) accentueaza componentele de inalta frecventa, avand


un efect mic asupra celor de joasa frecventa. In imaginea rezultata din aplicarea
unui FTS sunt accentuate diferentele de intensitate (detaliile) in zonele de tranzitie
de intensitate.

Un exemplu de FTS este filtrul cu urmatoarea masca:


W(0,0) = 9
w(i,j) = -1, pentru toate celelalte elemente

De asemenea, filtrul Laplacian cu masca:


Functia prezentata in continuare aplica filtrul medie pe un dreptunghi din imaginea
a, reprezentat prin colturile sale (N1, M1), (N2, M2), rezultatul fiind memorat in
matricea b. Masca de filtrare are w x h pixeli.

void f_net (imagine a, imagine b, int w int h, int N1, int M1, int N2, int
M2)
{
float wh, s;

wh= (float)(w*h);

w2 = l/2; h2 = h/2;

for ( k = N1 + w2; k < N2 – w2; k++)


for ( l = M1 + h2; l < M2 – h2; l++)
{
s=0;
for ( i = -h2; i <= h2; i++)
for ( j = -w2; j < w2; j++)
s + = a[l+i][k+j];
b[k][l] = (unsigned char) (s/wh);
}
}

15. Detectia pixelilor de front folosind gradientul.


Vectorul gradient reprezinta directia si marimea variatiei maxime de intensitate intr-un punct al
unei imagini. El este definit în funcţie de derivatele parţiale ale funcţiei imagine, f(x,y):

 ∂ f ( x, y)
 ∂x 
∇ f (x, y)= 
∂ f ( x, y)
 
 ∂y 

 ∂f ( x, y ) 
∂f ( x, y ) ∂f ( x, y )  ∂x   D x 
Notam cu D x = şi D y = , atunci  ∂f ( x, y )  =  
∂x ∂y   D y 
 ∂y 
Amplitudinea gradientului în pixelul (x,y) este:

1
D (x, y) = [D x2 (x, y) + D y2 (x, y)] 2

Ea reprezinta puterea frontului (marimea variatiei de intensitate) în pixelul respectiv


si este adesea aproximata prin:

D( x, y ) =| D x | + | D y |
D( x, y ) = Max(| D x |, | D y |)

Direcţia gradientului (frontului) este:


Dy
θ = arctg ( )
Dx

Vectorul gradient este perpendicular pe directia frontierei:

Punctele de front dintr-o imagine sunt detectate calculând gradientul in fiecare pixel şi
identificând acei pixeli pentru care amplitudinea gradientului este mai mare decât un prag dat.

Pentru implementarea discretă a gradientului au fost propuşi mai mulţi operatori. De exemplu:

Aproximarea prin diferenţe finite. Cele 2 derivate se aproximează prin:

∂f ( x, y ) f ( x + ∆x, y ) − f ( x, y )
D1x = ≈
∂x ∆x
∂f ( x, y ) f ( x, y + ∆y ) − f ( x, y )
D1 y = ≈
∂y ∆y

Aceste aproximari corespund corelării funcţiei imagine cu măşti de convolutie de forma:

[ − 1 1] si 
1

− 1

O altă aproximare este:

f ( x + ∆x, y ) − f ( x − ∆x, y )
D2 x ≈
2(∆x)
f ( x, y + ∆y ) − f ( x, y − ∆y )
D2 y ≈
2( ∆y )

D2x şi D2y sunt aproximări mai bune în mijlocul intervalului, adică în (x,y) şi corespund corelării
funcţiei imagine cu măştile:

½[-1 0 1] si ½ [ 1]
[ 0]
[-1]

Cei mai utilizati detectori de fronturi bazati pe gradient sunt: Roberts (numit si operatorul cruce),
Sobel si Prewitt. Ei sunt definiti pentru imagini in mai multe nivele de gri, dar utilizarea lor poate
fi extinsa pentru imagini color.

16. Transformata Hough- grila(la ce se foloseste).


Initial, transformata Hough a fost definita pentru detectia liniilor drepte din imagini. Ulterior a fost
extinsa pentru detectia mai multor tipuri de curbe parametrice (cercuri, elipse).
Detectoarele de frontiere prezentate mai inainte extrag frontiere de forma oarecare (prin pixelii
de frontiera), fara a furniza informatii despre forma geometrica a frontierei. Pasul urmator intr-un
sistem de analiza a imaginilor este extragerea caracteristicilor de nivel coborat din imagine, care
presupune aproximarea frontierelor prin primitive geometrice: linii drepte, curbe de anumite tipuri
sau curbe generale.
Iesirea transformatei Hough este o matrice binara in care pixelii cu valoarea 1 apartin unor linii
drepte, deci transformata Hough este mai mult decat un detector de frontiere, deoarece
furnizeaza in plus si informatia despre forma frontierei.

Intrarea pentru transformata Hough este matricea obţinută prin binarizarea matricei
amplitudinilor fronturilor.

Fie o imagine de N1xN2 pixeli. Cea mai simplă abordare a determinării liniilor drepte este de a
găsi linii determinate de perechi de pixeli şi apoi a găsi pixeli din imagine care aparţin acestor
linii. Numărul maxim de linii posibile este N(N-1) /2, unde N = N1 x N2. În cazul cel mai
defavorabil, fiecare pixel este verificat dacă aparţine uneia dintre cele N(N-1) /2 linii. Deci,
complexitatea calculului este O(N3), ceea ce face ca metoda să nu poată fi aplicată în practică.

Transformata Hough utilizează o reprezentare parametrică a liniilor pentru reducerea


complexităţii calculului căutării lor în imagini :

--------2006---------------------
17. Ec parametrica a suprafetei care se obtine prin translatia unei drepte oarecare
din planul xoy pe o traiectorie liniara avand directia AVG?? (Nu stiu sigur, nu am
auzit bine)

18. Suprafete Bezier : moduri de definire, ec. param, etc


O suprafata Bezier este alcatuita din doua familii de curbe Bézier, ortogonale
in spatiul parametric.
Ecuatia parametrica a unei curbe Bezier definita prin n+1 puncte este :

0<= u <= 1
unde Bi,n(u) este polinomul Bernstein de gradul n.
Ecuatia parametrica a peticului Bezier definit prin (m+1 x n+1) puncte este :

0<= u, w <= 1
In practica se folosesc curbele cubice Bezier si suprafetele bicubice Bezier,
acestea fiind satisfacatoare din punct de vedere al continuitatii geometrice.

Cubica Bezier are ecuatia:


p(u) = (1-u)3 * P0 + 3 * u * (1-u)2 * P1 + 3 * u * (1-u) * P3 + u3 * P3
iar forma matriciala este :
p(u) = [ F1(u) F2(u) F3(u) F4(u) ] * [ P0 P1 P2 P3 ]T.
sau
p(u) = F(u)* GB
F(u) se descompune astfel :

unde ultima este matricea de baza Bezier, notata MB. Putem deci scrie
ecuatia parametrica in forma matriciala :
p(u) = U * MB * GB
Matricea de baza, MB, este aceeasi pentru toate curbele Bezier, iar GB este
cea care difera de la o curba la alta.

19. Cond geometrice care determina un petic bicubic Bezier. Forma geometrica
matriciala
cu precizarea semnif. fiecarei matrici
(sub 10)
20. Formula Euler pentru solide oarecare
Conectivitatea unui solid oarecare este definita prin formula Euler
generalizata:

unde P este numarul de varfuri de parti distincte ale solidului


T este numarul de treceri prin solid
C este numarul de cicluri de laturi interne fetelor
(cavities).

Sunt definiti 10 operatori Euler. Fiecare dintre ei permit transformarea unui


solid [ V, L, F, C, T, P ] intr-un alt solid [ V’, L’, F’, C’, T’, P’ ] care
satisface formula Euler generalizata.

Operatorii Euler sunt:

1. MEV - Make an Edge and a Vertex


2. MFE - Make a Face and an Edge
3. MBFV - Make a Body, a Face and a Vertex
4. MRB - Make a Cavity/Passage and a Body
5. ME-KH - Make an Edge and Kill a Hole (Cavity)
6. KEV - Kill an Edge and a Vertex
7. KFE - Kill a Face and an Edge
8. KBEV - Kill a Body, a Face and a Vertex
9. KRB - Kill a Cavity/Passage and a Body
10. KE-MH - Kill an Edge and Make a Hole

21. Functia de mapare sferica a texturilor


Ecuatiile parametrice ale sferei sunt:

Punand in corespondenta spatiul (u,v) = (0,1) al texturii, spatiului parametric al


suprafetei rezulta:

obtinem:

O forma mai generala a functiei de mapare sferica este:


Functia de mapare produce distorsiuni ale texturii pe axa z (x=0, y=0), adica in
jurul polilor.

22. Redarea suprafetelor cu rugozitati prin metoda Bam...ceva


?????
23. Gradientul unei imagini :definitie, utilizare, operatori discreti
de aproximare a gradientului (Roberts,Sobel, Prewitt)
(sub 1)
24. Algoritm de extragere a conturului exterior al unei regiuni.
Explicatii, reprezentare in pseudocod (algoritmul imbunatatit care se
foloseste si la ExtrageToateContururile)
(sub 3)
25. Algoritm de scheletizare prin pixeli multipli. Explicatii,
reprezentare in pseudocod.
Scheletul unei regiuni este o regiune liniara deci o regiune alcatuita numai din pixeli multipli.

Algortimii clasici de scheletizare considera drept pixeli schelet pixelii multiplii care satisfac
conditia (1) din definitia pixelului multiplu (vezi “Regiuni liniare in spatiul discret”), adica satisfac
unul dintre cele 6 sabloane.

Intr-un grup de pixeli marcati cu aceeasi litera cel putin unul are valoarea diferita de zero.
Imaginea de intrare este binara. Se considera ca pixeli de contur pixelii care au un vecin-d egal
cu zero. Numai pixelii de contur pot fi pixeli de schelet.

In fiecare iteratie se parcurge imaginea marcand pixelii de contur si pixelii de schelet, pe toate
cele 4 laturi ale fiecarei regiuni existente in imagine. Dupa ce toata imaginea a fost traversata,
pixelii marcati ca fiind de contur sunt eliminati (li se da valoarea zero).

In descrierea algoritmului se apeleaza functia sablon care primeste coordonatele unui pixel si
indicele unuia dintre cele 6 sabloane. Functia intoarce 1 daca vecinatatea pixelului satisface
sablonul.

Exemplu:

0 2 0 A A A
0 P 0 satisface sablonul 0 P 0
1 0 0 B B B

void subtiere3 (imagine x, int N!, int M1, int N2, int M2)
{ int k, l, gata, D;
do
{ gata = 1;
for ( D = 0; D<7; D+=2 ) // D = 0, 2, 4, 6
{
for ( k = N1 + 1; k< N2 – 1; k++ )
for ( l = M1 + 1; k< M2 – 1; l++ )
if (x[k][l] == 1 && vecin (x, k, l, D) == 0) // pixel de contur
{ for ( i = 0, j = 0; i < 6 && !j; i++ )
j= sablon(x, k, l, i);
if ( j) // pixel schelet
x[k][l] = 3; // se marcheaza ca pixel schelet
else { x[k][l] = 2; // pixel contur
gata = 0; // mai sunt pixeli de contur ne-eliminati
}
}
}// for D

//se elimina pixelii de contur


if ( !gata )
for ( k = N1 + 1; k<N2 – 1; k ++ )
for ( l = M1 + 1; l < M2 – 1; l ++ )
if ( x[k] [l] = = 2 )
x[k][l] = 0;
} while (!gata)

-----------2005---------------------
26. Algoritmi scan-line folositi pentru maparea texturilor pe
un poligon : Calculul matematic al coordonatelor poligonului;
algoritmii in pseudocod.
1. Pe liniile scan care trec prin varfuri apar discontinuitati ale texturii datorita
schimbarii bruste a lui du si dv atunci cand se trece printr-un varf.

Pentru reducerea acestor efecte se propune divizarea poligonului si calculul


exact al valorilor u si v in noile puncte, care se aleg pe mijloacele laturilor
poligonului initial. Numarul de poligoane in care se divide un poligon este
estimat in functie de marimea poligonului si de inclinarea sa fata de planul de
vizualizare.

2. Nu produce efectul de scalare al proiectiei perspectiva atunci cand planul


poligonului este inclinat fata de planul de vizualizare.

Atunci cand poligonul este paralel cu planul de vizualizare, la incremente egale


in spatiul ecran corespund incremente egale in spatiul textura. In consecinta,
interpolarea liniara pentru u si v este consistenta cu aceasta transformare
spatiala numita mapare afina.

Atunci cand poligonul este inclinat fata de planul de vizualizare, datorita scalarii
inegale, punctele nu mai sunt egal distribuite de-a lungul liniilor. Textura ar
trebui sa fie scalata inegal pe suprafata poligonului. O astfel de mapare se
numeste mapare perspectiva.
Maparea texturii poate fi exprimata ca o transformare de imagine spatiala generala, care aplica suprafata unui
patrat din spatiul (u,v) pe suprafata unui patrulater :

Transformarea distorsioneaza patratul unitate la forma poligonului. Fiecare punct


(u,v) se transforma intr-un punct (xw/w,yw/w).

Pentru o transformare afina, si fara a pierde generalitatea, ecuatia se transforma


in :

Dezvoltam pe componente ecuatia matriceala si alegem, pentru simplitate, a33=1.


Obtinem u si v in functie de x,y,w :

Fie x0=x si x1=x+1 doua puncte succesive de pe linia scan curenta, (u0,v0) si
(u1,v1) coordonatele in spatiul textura al celor 2 puncte.
Obtinem :

Pentru o transformare afina, w0 = w1 = 1, rezulta:


du si dv sunt incrementi constanti (nu depind de x0 si x1).

Pentru obtinerea efectului perspectiva se introduce si variabila w:

Eroarea interpolarii liniare descreste cand dw-->0.

27. Sa se scrie ecuatia parametrica pe componente pentru o suprafata


generata prin translatia unui arc de cerc oarecare de-a lungul unei
drepte [a b c] pe distanta d = sqrt(a*a + b*b + c*c)

28. Reprezentarea solidelor prin enumerare spatiala.


Se bazeaza pe descompunerea solidului in parti.
Descompunrea poate fi: celulara, regulata sau adaptiva.

2.1. Descompunerea celulara:

Orice solid poate fi reprezentat ca o reuniune de celule solide


(fara goluri) cu interioare disjuncte.

Descompunerea in celule are drept scop simplificarea


reprezentarii, deci se efectueaza pana la nivelul la care fiecare
celula poate fi reprezentata ca un poliedru simplu: cub,
paralelipiped, prisma, … . Descompunerea celulara se foloseste in
analiza structurala (modelarea elementului finit). Solidul este
reprezentat ca o reuniune de celule cu interioarele disjuncte.

2.2. Enumerarea spatiala (descompunerea regulata si


descompunerea adaptiva)

2.2.1. Descompunerea regulata

Este un caz particular de descompunere celulara; fiecare celula


este un cub si are o pozitie fixa, pe o grila spatiala regulata. Se
obtine divizand cubul incadrator al solidului, recursiv, de fiecare
data in 8 subcuburi pana la un nivel de rezolutie predeterminat.
Subcuburile rezultate se numesc voxeli. Voxelii sunt clasificati in
voxeli interiori si voxeli exteriori.

Reprezentarea este cu atat mai exacta cu cat latura voxelilor este


mai mica. Cubul incadrator are fetele paralele cu planele sistemului
de coordonate 3D.

Reprezentare

Metoda necesita un mod convenabil de reprezentare a setului de


voxeli. Un mod consta in reprezentarea printr-o lista in care se
memoreaza coordonatele centrelor voxelilor interiori. Lista este
ordonata astfel incat solidul este un set de celule adiacente.

Primele scheme de reprezentare prin voxeli erau foarte


redundante : solidul era reprezentat printr-un tablou tridimensional,
cu un numar de elemente egal cu numarul de voxeli, fiecare
element al tabloului avand valoarea 0 sau 1. O astfel de schema de
reprezentare nu tine cont de coerenta spatiala.

Avantajele metodei :
 Reprezentarea se obtine simplu,
 Permite sa se calculeze proprietatile fizice ale solidului
(volumul, momentul de inertie, s.a.)
 Permite realizarea cu usurinta a operatiilor booleene intre
solide.
 Reprezentarea este invarianta in raport cu translatia dar nu
si cu rotatia, deoarece fetele voxelilor trebuie sa fie paralele
(daca se roteste obiectul trebuie reconstruita reprezentarea)
cu planele sistemului de coordonate 3D.

Avantajele metodei :

Reprezentarea este o aproximare a solidului a carei precizie


creste pe masura ce latura voxelului scade si deci memoria
necesara reprezentarii creste.

Metoda este adecvata pentru obiecte solide modulare, compuse din forme
paralelipipedice (arhitectura) si pentru obiecte de forme foarte neregulate, cum
sunt obiectele biologice (o aplicatie este tomografia computerizata).
29. Gradientul unei imagini : definitie, la ce se foloseste,
operatori discreti de aproximare.
(sub 1)
30. Algoritmul de extragere a tuturor contururilor dintr-o regiune.
Descriere, explicatii, pseudocod.
(nu e sub 3 )
Pentru simplificare, vom considera ca:

o pixelii regiunii au intensitatea =1;


o pixelii din afară au intensitatea =0

Acestea nu sunt restrictii, algoritmul prezentat in continuare putand fi generalizat.

O regiune poate avea mai multe contururi interioare care marginesc „gauri” ale
regiunii.

Se incepe cu extragerea conturului exterior, executand algoritmul „ExtrageContur”


modificat astfel încât:
o punctul de start să fie memorat într-un vector PStart
o codurile de înlănţuire să fie memorate în vectorul contur, în
care delimitarea contururilor se face prin valoarea 8 (adică 8=sfarsit
contur)
o la traversarea unui contur, valoarea pixelilor conturului se
incrementeaza, devenind 2 sau > 2 in cazul in care un pixel este parcurs
de mai multe ori la traversarea conturului. In acest fel se pot recunoaste
contururile deja traversate.

Functia ExtrageContur modificata pentru traversarea tuturor contururilor este:

Punct * PStart; int ncont=0;


unsigned char ** Img;

int ExtrageContur (Punct S)


{ Punct C = S;
D = 6; // directia de cautare initiala

// cauta al doilea punct de contur


for (int k = 0; k<3; k++)
{ C = PunctContur(C);
if (C !=S) break;
}

if( k==3) return 0; // S este punct izolat

PStart[ncont++] = S;
Img[S.y][S.x]++;
// traverseaza conturul
while( C != S)
{ Img[C.y][C.x]++ ;
C = PunctContur(C);
}
contur[n++] = 8;
return 1;
}

Dupa ce toate contururile au fost traversate, vectorul P va conţine punctele de start


pentru toate contururile, iar vectorul contur va conţine lista codurilor de inlantuire
pentru toate contururile, separate prin valoarea 8

Pasii algoritmului:

1) Se extrage conturul exterior.


2) Se caută un punct pe contur din care va începe parcurgerea regiunii
pentru găsirea contururilor interioare.

Parcurgerea regiunii are loc întotdeauna spre dreapta, de aceea punctul de start
pentru parcurgere se alege de pe un arc coborâtor.
Condiţia ca un punct sa fie punct de start parcurgere este:
o codul punctului de contur anterior să fie cuprins între 4-7
o codul punctului de contur curent să fie cuprins între 5-7
3) Se parcurge regiunea din punctul de start determinat, spre dreapta, căutând fie
un punct de start pentru un contur interior, fie marginea regiunii (ieşirea din
regiune).

Parcurgerea regiunii pe linia curenta se termină la întâlnirea secvenţei 120 sau 01.

Secventa 120 marcheaza intalnirea unui contur deja traversat.

Secventa 01 marcheaza intalnirea unui contur interior netraversat. In acest moment


se termina parcurgerea liniei curente si se extrage conturul interior. Dupa extragere,
pixelii conturului vor avea valoarea 2, deci, pe liniile imagine urmatoare el va fi
identificat ca un contur deja parcurs prin intalnirea secventei 120.

Atunci cand un contur interior are pixeli comuni cu un alt contur (cel exterior sau
unul interior), dupa traversarea sa pixelii comuni vor avea o valoare >2.

Exemple:  curs

Implementarea in C a algoritmului:
Punct * PStart; int ncont=0;
unsigned char ** Img;
unsigned char * contur;
int n=0, D;

int ExtrageToateContururile(Punct S)
{
int A, B, C, l, c, c0;
int ks =0; Punct P, PS;

if( ! ExtrageContur(S)) return 0;

l=0;
c0 = 6; // codul punctului de contur anterior
P = S; // punctul de contur anterior

while( l< n-1) // ! sfarsit lista coduri de contururi


{
c = contur[l++]; //codul punctului de contur urmator

if( c==8) // start contur nou


{ c0 = 6;
P = PStart[ks++];
c = contur[l++];
}
else
P = PunctUrm(P,c); // calculeaza adresa urmatorului punct
//de contur

if( c0 >=4 && c0 <= 7 && c>=5 && c <= 7) // P este punct de start
// parcurgere spre dreapta
{ x = P.x; y = P.y; gata = 0;
while( ! gata)
{ A = (int)Img[y][x]; B = (int)Img[y][x+1]; C = (int)Img[y][x+2];
if( A==0 && B==1 || A==0 && B==2 && C==0)
{ // B este punct de start contur interior
PS.y = y; PS.x = x+1;
ExtrageContur(PS);
gata =1;
}
else
if( A==0 && B>2 && C==0 // contur interior deja parcurs
|| A==1 && B==2 && C==0) // contur exterior regiune
{ //sfarsit parcurgere linie
gata = 1;
}
x++;
}// while (! gata)
}
c0 = c;
}//while (l<n-1) – sfarsit lista contururi
return 1;
}

OBSERVATIE
In cadrul implementarii algoritmului nu au fost prevazute unele cazuri particulare,
cum ar fi:
- iesirea din spatiul imaginii, in ciclul de parcurgere spre dreapta a imaginii
- posibile configuratii de contururi interioare lipite intre ele sau de conturul exterior,
care nu satisfac sabloanele utilizate pentru a depista un contur interior neparcurs
sau unul deja parcurs

31. Determinarea arcelor de cerc folosind codul diferential inlantuit.


?- prin cursuri scrise
32. Metode de vizualizare a suprafetelor.
Sunt doua metode principale de afisare a suprafetelor de forma libera :
• afisare wireframe : suprafata S(u,w) este aproximata prin cele
doua familii de curbe ortogonale in spatiul parametric (curbe de
u=const si curbe de w=const).
• afisare prin fete opace : suprafata este aproximata printr-o retea
de fete conectate prin varfuri ;
• Varfurile sunt puncte de pe suprafata, S(ui, wj)
• Fiecare fata este un patrulater care conecteaza 4 puncte
vecine de pe suprafata
• Suprafata este afisata aplicand un algoritm de eliminare a
partilor nevizibile
• Deoarece fetele nu sunt plane, pentru o mai buna
aproximare a suprafetei, se poate recurge la:
triunghiularizarea fetelor;
divizarea fetelor pana la obtinerea de fete plane( pe
baza unui criteriu de planeitate) sau fete care se
proiecteaza intr-un singur pixel;
Pentru calculul punctelor de pe suprafata se poate folosi ecuatia matriciala :
p(u,w) = U*M*G* MT* WT ,

unde G este matricea conditiilor geometrice, specifica suprafetei


iar M este matricea specifica tipului suprafetei (Hermite,
Bezier, B-spline)
sau

p(u,w) = [F1(u) F2(u) F3(u) F4(u)] * G * [F1(w) F2(w) F3(w) F4(w)]T.


0<= u, w <=1
unde F1, F2, F3, F4 sunt functiile de ponderare, specifice tipului
suprafetei
Divizarea suprafetei se face recursiv. La fiecare pas suprafata se divide in punctul
(u=0.5 si w=0.5), rezultand patru subpetice (Vezi fisierul « Divizarea curbelor si a
suprafetelor de forma libera »).
33. Algoritmul scan-line pentru aplicarea unei texturi pe suprafata unui
poligon cu calculul incremental al coordonatelor texturii: explicatii, pseudocod,
aprecieri.
(sub 26)
34. Laplacianul unei imagini: definitie, aproximarea discreta, implementarea in
pseudocod.
Operatorii pentru determinarea gradientului presupun calculul componentelor Dx si Dy apoi
combinarea lor pentru a obţine puterea (amplitudinea) frontului.

Operatorul Laplacian, care detecteaza tranzitiile bruste de intensitate din imagine, cere mai
puţin calcule. El este definit în funcţie de derivatele parţiale de ordinul 2, astfel :

∂ 2 f (x, y) ∂ 2 f (x, y)
∇ 2 f (x, y) = +
∂x 2 ∂y 2
Derivatele parţiale de ordinul al 2 –lea, de-a lungul direcţiilor x si y, sunt aproximate prin
diferente finite astfel:

∂ 2 f ( f ( x + ∆x, y ) − f ( x, y )) − ( f ( x, y ) − f ( x − ∆x, y ))
=
∂x 2 ( ∆x ) 2

∂ 2 f ( f ( x, y + ∆y ) − f ( x, y )) − ( f ( x, y ) − f ( x, y − ∆y ))
=
∂y 2 (∆y ) 2

Pentru ∆x = ∆y = 1 . Rezultă :

∂2 f
= f ( x + 1, y ) − 2 f ( x, y ) + f ( x − 1, y ).
∂x 2
∂2 f
= f ( x, y + 1) − 2 f ( x, y ) + f ( x, y − 1).
∂y 2
∇ 2 f = f ( x + 1, y ) − 4 f ( x, y ) + f ( x − 1, y ) + f ( x, y + 1) + f ( x, y − 1).

Laplacian-ul poate fi implementat prin urmatoarea masca de convolutie:

Aplicarea operatorului consta in convolutia imaginii cu masca respectiva. Intrarea operatorului


este o imagine, f(x,y), in mai multe nivele de gri iar iesirea, g(x,y), de asemenea, o imagine in
mai multe nivele de gri:
G(x,y) = 0 in zonele de intensitate constanta si in punctele de frontiera
<0 sau > 0 in vecinatatea frontierei
Laplacian-ul unei imagini este utilizat si pentru implementarea unor filtre de imbunatatire
a imaginilor prin evidentierea frontierelor (image sharpening). Astfel sunt filtrele cu mastile de
convolutie:

Alte filtre de imbunatatie a imaginilor bazate pe Laplacian sunt definite astfel:

g(x,y) = f(x,y) - f(x,y)

f(x,y) + f(x,y)

Adunand sau scazand imaginea rezultata prin aplicarea Laplacianului se obtine o imagine cu
frontierele evidentiate.

Pentru detectia frontierelor folosind Laplacianul, se poate proceda in mai multe moduri:
1) Se aplica un prag peste g(x,y), rezultand o imagine binara, B(x,y):

B(x,y) = 1 , daca |g(x,y)| > prag


0, altfel

Cat de aproape de frontiera reala sunt pixelii cu valoarea 1 in B(x,y) depinde de


alegerea pragului. In functie de pragul ales, frontiera va fi localizata fie in partea
luminata fie in cea intunecata a frontierei. O abordare mai exacta consta in examinarea
pixelilor de ambele parti ale granitei si alegerea acelora care au cea mai mica valoare
absoluta a Laplacianului, considerand ca aceste puncte sunt cele mai apropiate de
punctele de trecere prin zero.
2) Sunt considerate puncte de frontiera acele puncte in care g(x,y) =0 si gradientul are valoarea
locala maxima (sau peste un prag dat). Directia frontului se obtine utilizand directia in care are
loc trecerea prin zero a Laplacianului.
35. Algoritmii de extragere a conturului unei regiuni in pseudocod si explicatii.
(sub 3)
36. Recunoasterea unei linii drepte intr-un contur reprezentata in cod de inlantuire
diferentiala.
? – prin cursuri scrise
37. Algoritmul de scheletizare bazat pe notiunea de pixel multiplu.
(sub 25)

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