Depa rtamentul Automatică și Tehnologia Informației [613906]

Facultatea de Inginerie Electrică și Știința Calculatoarelor
Depa rtamentul Automatică și Tehnologia Informației
Automatică și Informatică Aplicată

1 Cuprins
Cuprins ………………………….. ………………………….. ………………………….. ………………………….. ………… 1
Listă de figuri ………………………….. ………………………….. ………………………….. ………………………….. .. 3
Introducere ………………………….. ………………………….. ………………………….. ………………………….. …… 5
CONSIDERAȚII GENERALE ………………………….. ………………………….. ………………………….. …… 6
1.1 Introducere ………………………….. ………………………….. ………………………….. ………………………. 6
1.2 Metodele pasive de achiziție ………………………….. ………………………….. ………………………….. . 7
1.3 Metodele active de achiziție ………………………….. ………………………….. ………………………….. .. 8
1.4 Alte metode de achiziție ………………………….. ………………………….. ………………………….. …… 11
1.5 Probleme în cadrul scanării ………………………….. ………………………….. ………………………….. . 12
TRIANGULAȚIA ȘI RELAȚIILE GEOMETRICE DINTRE CAMERĂ ȘI LASER ……………. 14
2.1 Modelul camerei ideale și pro iecția perspectivei ………………………….. ………………………….. 14
2.2 Reprezentările geometrice ………………………….. ………………………….. ………………………….. .. 15
2.2.1 Puncte și vectori ………………………….. ………………………….. ………………………….. ……….. 16
2.2.3 Reprezentarea parametrică a planelor ………………………….. ………………………….. ………. 17
2.2.4 Reprezentarea implicită a planelor ………………………….. ………………………….. …………… 18
2.2.5 Reprezentarea implicită a liniilor ………………………….. ………………………….. …………….. 18
2.3 Reconstrucția prin triangulație ………………………….. ………………………….. ………………………. 19
2.3.1 Intersecția linie -plan………………………….. ………………………….. ………………………….. ….. 19
2.4 Sistemul de coordonate ………………………….. ………………………….. ………………………….. ……. 23
2.4.1 Coordonatele imaginii și camera de tipul „pinhole” ………………………….. ……………….. 24
2.4.2 Camera de tipul „pinhole” ideală ………………………….. ………………………….. …………….. 24
2.4.4. Linii din punctele imaginii ………………………….. ………………………….. …………………….. 26
2.4.5 Plane din liniile imaginii ………………………….. ………………………….. ………………………… 27
CALIBRAREA CAMEREI. LIBRĂRIA OPENCV ………………………….. ………………………….. ….. 29
3.1 Calibrarea camerei ………………………….. ………………………….. ………………………….. ………….. 29
3.2 Librăria Open CV ………………………….. ………………………….. ………………………….. ……………. 32
3.2.1 Clase și funcții utile din librăria OpenCV ………………………….. ………………………….. …. 32
IMPLEMENTAREA UNUI DEMONSTRATOR PENTRU RECONSTRUCȚIA 3D A
OBIECTELOR F OLOSIND O CAMERĂ WEB ȘI UN FASCICUL LASER. ……………………… 36
4.1 Arhitectura hardware ………………………….. ………………………….. ………………………….. ……….. 36

Facultatea de Inginerie Electrică și Știința Calculatoarelor
Depa rtamentul Automatică și Tehnologia Informației
Automatică și Informatică Aplicată

2 4.1.1 Arduino UNO ………………………….. ………………………….. ………………………….. …………… 38
4.1.2 Servomotoare ………………………….. ………………………….. ………………………….. …………… 40
4.1.3 Servomotorul TowerPro MG995 ………………………….. ………………………….. …………….. 41
4.1.4 Modulul laser ………………………….. ………………………….. ………………………….. …………… 42
4.1.5 Camera web ………………………….. ………………………….. ………………………….. …………….. 45
4.2 Arhitectura software ………………………….. ………………………….. ………………………….. ………… 47
4.2.1 Program Arduino ………………………….. ………………………….. ………………………….. ………. 48
4.2.2 Program C++ ………………………….. ………………………….. ………………………….. ……………. 48
4.2.3 Program Matlab ………………………….. ………………………….. ………………………….. ……….. 50
4.3 Rezultate obținute ………………………….. ………………………….. ………………………….. …………… 52
4.4 Dezvoltări ulterioare ………………………….. ………………………….. ………………………….. ……….. 54
4.5 Concluzii ………………………….. ………………………….. ………………………….. ……………………….. 54
Bibliografie: ………………………….. ………………………….. ………………………….. ………………………….. .. 55
Rezumat ………………………….. ………………………….. ………………………….. ………………………….. …….. 56
Summary ………………………….. ………………………….. ………………………….. ………………………….. ……. 57

Facultatea de Inginerie Electrică și Știința Calculatoarelor
Depa rtamentul Automatică și Tehnologia Informației
Automatică și Informatică Aplicată

3 Listă de figuri
Fig. 1.1: Clasificare a extr agerii de formă tridimensi onală……………………………………………………. 6
Fig.1.1.1 : Camera A vede obiectul în partea dreaptă a câmpului vizual în timp ce camera B vede
obiectul în partea stângă. Obiectul D are o distanță mai mare față de punctul de observare, c eea ce
arată ca obiectul D este mai apropiat de cele două camere. ……………………….. ………………………….8
Fig.1.2.1 : Laserul proiectează un fascicul pe obiectul O. Intersecția razei cu obiectul în punctul P
este vizualizată de cameră, iar în planul imaginii I se va forma punctul P’. În condițiile în care se
cunosc informații despre ansamblul laser -cameră, putem calcula coordonatele tridimensionale ale
punctului P. ……………………………………………………………….. ……………………….. ………………………….9
Fig.1.2.2 : Triangularea este modificată prin transformarea unui singur punct cu o linie (generată
de laser). Scanarea este restricționată pe o singură direcție, transversală liniei. …………. ……………..10
Fig.1.2.3 : Exemple de proiecție a sursei de lumină codificate. ……………………………………………… .11
Fig. 2.1.1: a) Încercare de a înregistra un obiect pe un film fotografic plasând filmul în fața
obiectului. b) Princ ipiu de înregistrare a unui obiect pe un film fotografic folosind o barieră, numită
apertură. …………………………………………………………………………………………….. …………………………14
Fig. 2.1.2: Model simpl ificat al camerei de tipul „pinhole” ………………………. …………………………15
Fig.2.2.2: Reprezentare parametrică a liniilor și razelor. …………………………… …………………………16
Fig.2.2.3: Reprezentarea parametric ă a planelor (stânga) și reprezentarea implicită a planelor
(dreapta) …………………………………………………………………………………………….. …………………………17
Fig.2.3: Exemplu de segmente curbe a razelor de proiecție ……………………….. …………………………19
Fig.2.3.1: Triangulație prin intersecția dintre un plan și o linie ………………….. …………………………20
Fig.2.3.2: Triangulația intersecției linie -linie………….. ………………………………. …………………………21
Fig.2.3.2.1: Punctul median 𝑝12(𝜆1,𝜆2) pentru valori arbitrare ale lui 𝜆1 și 𝜆2 (stânga) și pentru
valori optime ale lui 𝜆1 și 𝜆2(dreapta) ……………….. ………………………………….. …………………………22
Fig.2.4.2: Camera de tipul „pinhole” ideală …………………………………………….. …………………………23
Fig.2.4.3: Modelul camerei de tipul „pinhole” reală …………………………………. …………………………25
Fig.2.4.4: Planul definit de o linie din imagine și centrul de proiecție …………. …………………………27
Fig.3.1.1: Exemple de distorsiuni: fără distorsiuni – cazul ideal ( stânga), cu distorsiune de tip
butoi (mijloc), cu distorsiune de tip pernă (dreapta) ………………………………… …………………………29
Fig.3.1.2: Distorsiune de tip butoi (lentile fisheye) ………………. …………………. ………………………..30
Fig.3.1.3: Distorsiune de tip pernă …………………………………………………….. …………………………….30
Fig.3.2 Sigla librăriei OpenCV ……………………………………………………….. ……………………………….32
Fig.4.1 Concept proiect ………………………………………………………………… ………………………………..36

Facultatea de Inginerie Electrică și Știința Calculatoarelor
Depa rtamentul Automatică și Tehnologia Informației
Automatică și Informatică Aplicată

4 Fig.4.1.2 : Sistemul pan -tilt și poziționarea camerei și a modulului laser pe a cesta (concept) ……..37
Fig. 4.1.3 : Componente principale Arduino UNO…………………………………….. …………………………39
Fig.4.1.4: Servomotorul TowerPro MG995 …………………………………………….. …………….. ………….41
Fig.4.1.5: Diagramă de timp pentru comanda servomotorului TowerPro MG995 ……………………42
Fig.4.1.6: Circuitul electric folosit pentru controlul modulului laser. ………….. …………………………43
Fig.4.1.7: Exemplu de proiecție a fasci culului de la laser. …………………………….. …………………….44
Fig.4.1.8: Sistemul de răcire al modulului laser. ………………………………………. …………………………44
Fig.4.1.9: Camera web folosită pentru achiziț ia imaginilor ……………………….. …………………………45
Fig.4.1.10: Ansamblu de scanare imagini în vederea reconstrucției 3D ………. …………………………46
Fig.4.1.11: Ansamblu de scanare imagini în vederea reconstrucției 3D ( 2)……………………………..47
Fig.4.2.1 : Conexiunile electrice ale componentelor din proiect ………………….. …………………………48
Fig.4.2.2 : Execuția inițială a programului ……………………………………………….. ………………… ………49
Fig.4.2.3 : Meniul de pre vizualizare al fluxului video de la camera web ………………………………..49
Fig.4.2.4: Scanarea obiectelor și afișarea informațiilor din consolă…………………….. …………….. …50
Fig.4.2.5: Obiectele ce urmează a fi reconstruite. ………………………………………….. …………………… 52
Fig.4.2.6: Rezultat obținut reconstrucție cană + router (1) …………………………….. …………………… 52
Fig.4.2.7: Rezultat obținut reconstrucție cană + router (2) …………………………… …………………….. 53
Fig.4.2.8: Rezultat obținut reconstrucție cană + router (3) ………………………….. ……………………… 53

Facultatea de Inginerie Electrică și Știința Calculatoarelor
Depa rtamentul Automatică și Tehnologia Informației
Automatică și Informatică Aplicată

5 Introducere
Proiectul ce urmează a fi prezentat are ca temă realizarea unui sistem portabil ce poate fi
folosit pentru scanarea și reconstrucția obiectelor, pentru a putea vizualiza mai ușor aceste obiecte
în mediul virtual și pentru a le modela în caz de necesitate.
Sistemul este realizat dintr -o cameră web, un modul laser cu fascicul tip linie și două
servomotoare. Acesta este alimentat de la 4 baterii și necesită prezența unui calculator sau a unui
laptop pentru această achiziție a informației.
Sistemul funcționeaz ă în felul următor:
Obiectele sunt filmate cu camera web, folosind ca sursă de iluminare controlată modulul
laser. Se stabilește un punct de început pentru scanare și un punct de sfârșit. Servomotoarele sunt
acționate și deplasează camera împreună cu modul ul laser. După achiziția completă a obiectului,
aceasta este salvată într -un fișier video, și este încărcată în Matlab, în vederea reconstrucției. În
Matlab, se folosește un script pentru reconstrucție, care se va folosi de fișierul video salvat mai
înaint e și de unghiul total de scanare al obiectului.
Scopul proiectului este ca sistemul să fie montat pe o platformă mobilă și de a realiza
reconstrucția unei încăperi. Deoarece modelarea unei încăperi într -un mediu virtual, necesită mai
întâi construcția aces teia de la început, acest proiect are ca un scop facilitarea acestei modelări,
prin faptul că este reconstruită forma inițială a încăperii.
Până în momentul de față, în cadrul acestui proiect am reușit să realizez scanarea și
reconstrucția obiectelor de di mensiuni relativ mici, urmând ca ulterior să montez sistemul pe o
platformă mobilă și să avansez în reconstrucția unei încăperi.
Domeniul de aplicabilitate al acestui sistem este unul foarte vast, acesta putând fi aplicat
de la reproducerea obiectelor cu a jutorul imprimantelor tridimensionale, la realizarea de proiecte
în cadrul arhitecturii și reconstrucția de clădiri orașe, realizarea de tururi virtuale etc.

Facultatea de Inginerie Electrică și Știința Calculatoarelor
Depa rtamentul Automatică și Tehnologia Informației
Automatică și Informatică Aplicată

6 Capitolul 1
CONSIDERAȚII GENERALE

1.1 Introducere
În zilele noastre, au apărut din ce în ce ma i multe aplicații unde este nevoie de scanarea,
reconstrucția și vizualizarea tridimensionala a obiectelor. Se încearcă reconstrucția de la obiecte
de mici dimensiuni (un exemplu ar fi pentru reproducerea lor cu ajutorul imprimantelor
tridimensionale), la nivele mult mai mari, cum ar fi reconstrucția de clădiri sau orașe întregi.
Datorită necesității de reconstrucție, s -a produs o evoluție majoră în ultimii ani în această direcție.
De asemenea, s -au dezvoltat mai multe metode de achiziție a obiectelor.

Figura 1.1 Clasificare a extragerii de forma tridimensională.
O taxonomie a achiziției tridimensionale este prezentată în figura de mai sus. O primă
distincție este între metodele active și cele pasive de achiziție. În cadrul metodelor pasive de
achiziție, sursa de iluminare nu este controlată în mod direct, acesta bazându -se strict pe lumina
ambientală. Sistemul este foarte răspândit și încearcă imitarea sistemului de vedere uman. Pentru
aceste metode se folosesc două c amere și se calculează adâncimea obiectelor din diferența celor
două imagini. Problema se pune când lumina ambientală este insuficientă sau când aceasta nu este
împrăștiată uniform pe obiect. În acest caz, procesarea imaginii este foarte dificilă. Prin met odele
active de achiziție s -a eliminat această problemă, deoarece sursa de lumină este controlată în mod
direct. Totuși, se ridică altă problemă: tipul de material al obiectului scanat. În cazul scanării unui Achiziție 3D
Pasivă
Cu mai multe
puncte de interes Cu un singur
punct de interes
Activă
Cu un sin gur
punct de interes Cu mai multe
puncte de interes

Facultatea de Inginerie Electrică și Știința Calculatoarelor
Depa rtamentul Automatică și Tehnologia Informației
Automatică și Informatică Aplicată

7 obiect lucios, ce reflec tă lumina, ar fi foarte dificilă , aproape imposibilă, procesarea achiziției . Prin
urmare, metodele active se pot aplica obiectelor mate, care nu reflectă lumina.
Pentru reconstrucția unui obiect, trebuie să se aibă în vedere conceptul de triangulație. În
trigonometrie și geometr ie, conceptul de triangulație este folosit pentru a afla poziția unui punct
formând triunghiuri de la alte două puncte cunoscute. În aplicațiile 3D, se folosește acest sistem
pentru a afla dimensiunile spațiale și geometria unui obiect.[11] Principial, se folosesc doi senzori
orientați pe obiect, aceștia putând fi amplasați sub un unghi, unul față d e celălalt sau pot fi paraleli.
În general, unul dintre senzori este o cameră, iar celălalt este fie o altă cameră fie o sursă
de proiecție a luminii. Proiecția din centrul senzorilor către obiect definesc un triunghi. În cadrul
acestui triunghi trebuie ca distanța dintre cei doi senzori să fie cunoscută.

1.2 Metodele pasive de achiziție
Metodele pasive de achiziție a imaginilor în vederea reconstrucției tridimen sionale sunt
cele mai răspândite metode atât în cadrul medicinii cât și în cazul ingineriei. Aceste metode nu
necesită controlul iluminării și se bazează în totalitate pe lumina ambientală. Sistemele de
imagistică stereoscopică care folosesc aceste metode încearcă imitarea sistemului de vedere uman.
Pentru început, se realizează achiziția 2D din fiecare camer ă, iar apoi se identifică
coordo natele unui punct din obiectul real în cele două imagini .[8] Principiul este în felul următor:
având două camere orient ate spre același obiect, coordonatele unui punct 3D de pe obiect se
determină prin intersecția celor doua proiecții ale camerelor. Repetând această operație, se poate
obține forma 3D a obiectului în cauză. Această operație este destul de complexă deoarece necesita
cunoașterea parametrilor camerelor în totalitate: centrul optic al imaginii, dimensiunile pixelilor,
oblicitatea, poziția reală a camerei, rotația camerei, distanța focală. Procesul prin care se determină
acești parametri se numește calibrare.
Pe lângă toate acestea, este necesar a se calcula corespondența punctelor 3D în imagini,
ceea ce reprezintă cea mai dificilă parte în reconstrucția obiectelor. De obicei, această
corespondență este realizată în două etape: prima dată se realizează coresponde nța punctelor care
se găsesc mai ușor, iar apoi se caută și pentru restul de puncte. Un exemplu al acestei tehnici de
reconstrucție este oferit în figura 1.2.1
O problemă la aceste metode de scanare a obiectelor apare atunci când sursa de iluminare
este in suficientă. Această problema este combătută de metodele active de achiziție și va fi discutată
în capitolul 1.2.

Facultatea de Inginerie Electrică și Știința Calculatoarelor
Depa rtamentul Automatică și Tehnologia Informației
Automatică și Informatică Aplicată

8
Fig.1.1.1 Camera A vede obiectul în partea dreaptă a câmpului vizual în timp ce camera B vede obiectul în partea
stângă. Obiectul D are o di stanță mai mare față de punctul de observare, ceea ce arată ca obiectul D este mai
apropiat de cele două camere.[22]
1.3 Metodele active de achiziție
Metodele active de achiziție folosesc o sursă de iluminare controlată[8], în acest fel,
eliminându -se cazu rile în care lumina este neuniformă sau insuficientă. În ciuda faptului că aceste
metode au rezolvat problema iluminării, iluminarea activă este mult mai sensibilă la proprietățile
constructive ale materialului. Materialele care reflectă lumina, sunt lucio ase sau cele transparente
generează erori în cazul procesării în vederea reconstrucției, deoarece se fac presupuneri false în
legătură cu forma materialului. În aceste cazuri, sunt necesare măsurători adiționale, sau
reconstrucția obiectului cu altfel de m etode. Principiul metodei este destul de simplu și se elimina
nevoia de a realiza corespondența punctelor. Se înlocuiește una din camere cu o sursă de lumină
controlată. Se păstrează conceptul de triangulație, dar acesta va fi realizat între camera, sursa de
lumina și obiectul ce urmează a fi scanat.
De exemplu, se poate proiecta un punct pe un obiect cu ajutorul unui laser. Punctul va fi
vizibil în imagine și se va detecta ușor. Dacă se cunosc poziția și orientarea atât a laserului cât și
a camerei, coordo natele punctului 3D pe obiect se poate afla prin intersecția dintre cameră și
fasciculul laser. Principiul este ilustrat în figura 1.2.1. Din nefericire, coordonatele 3D ale unui
singur punct sunt rareori suficiente, iar pentru a putea a afla mai multe des pre suprafața obiectului,
ar trebui ca laserul să fie proiectat în diferite puncte pe suprafața obiectului și realizat câte un cadru
pentru fiecare punct. Acest lucru ar fi prea dificil, atât din punct de vedere mecanic (ar fi nevoie

Facultatea de Inginerie Electrică și Știința Calculatoarelor
Depa rtamentul Automatică și Tehnologia Informației
Automatică și Informatică Aplicată

9 de precizie foarte mar e pentru deplasarea laserului) cât și din punctul de vedere al duratei de
achiziție a informației pentru reconstrucție.

Fig.1.2.1 Laserul proiectează un fascicul pe obiectul O. Intersecția razei cu obiectul în punctul P este vizualizată de
cameră, iar în planul imaginii I se va forma punctul P’. În condițiile în care se cunosc informații despre ansamblul
laser-cameră, putem calcula coordonatele tridimensionale ale punctului P.[8]
Pentru a remedia această problemă s -a concluzionat ca se poate înlocui laser ul pointer cu
tipare mult mai complicate. De exemplu, o înlocuire simplă este a laserului de tip pointer cu unul
de tip linie, prin înlocuirea lentilei cu una cilindrica. Astfel, dintr -un singur punct se obține un plan
întreg care se intersectează cu obiec tul. Intersecția acestuia cu obiectul va genera o linie curbă.
Acest configurație se poate observa în figura 1.2.2 .
Principiul acesta presupune că lumina de la fasciculul laser este o linie dreaptă. Intersecția
acestuia cu obiectul scanat generează o linie curbă. Întrucât distanța dintre laser și cameră, precum
și distanța de la cameră la obiect ne sunt cunoscute, putem discuta de adâncimea obiectului, în
funcție de diferența dintre linia de bază și linia modificată de obiect. Poziția liniei de bază diferă
în funcție de așezarea laserului față de cameră. Din aceasta putem observa că se obțin o multitudine
de informații dintr -un singur cadru. Astfel, se poate reduce deplasarea laserului, de la o mișcare pe
două axe, la o mișcare pe o singură axă. Se poate ext rage forma obiectului dintr -o singură deplasare
a ansamblului laser -cameră peste obiect. Deoarece s -au putut analiza mai multe puncte dintr -un
singur cadru, a apărut ideea de a încerca să se proiecteze un tipar pe obiect și să se obțină informații
importa nte dintr -un singur cadru. Astfel, au apărut metodele active ce folosesc lumină structurată .

Facultatea de Inginerie Electrică și Știința Calculatoarelor
Depa rtamentul Automatică și Tehnologia Informației
Automatică și Informatică Aplicată

10
Fig.1.2.2 Triangularea este modificată prin transformarea unui singur punct cu o linie (generată de laser). Scanarea
este restricționată pe o singură direcție, transversală liniei.
Din păcate, această metodă nu este una directă și necesită programarea distribuirii luminii.
Dacă se proiectează o serie de linii paralele pe obiect, nu mai există o distincție clara între acestea,
relativ la planurile de intersecție. Ca să se rezolve această probleme trebuie ca liniile să fie
diferențiate într -un fel. Pentru aceasta există diferite metode. Una dintre ele este de a codifica
liniile în funcție de culoare, dar ar putea apărea o problemă legată de culoarea obiectului și as tfel
s-ar putea pierde informații. Alternativ, se pot proiecta un model cu linii paralele de tipul alb -negru
folosind o codificare binara. Acest lucru presupune ca la fiecare cadru să se modifice numărul de
linii proiectate, în funcție de codificarea reali zată. Un exemplu este prezentat în figura 1.2.3 Acest
model nu este unul optim, iar în practică se folosesc alte tipare. Avantajul acestei tehnici este acela
că elimină părțile mobile din ansamblu, prin urmare se elimină zgomotul generat de ansamblul
mecan ic. Dezavantajul este că necesită un timp mai mare de procesare și de programare adițională
a proiectării sursei de lumină.

Facultatea de Inginerie Electrică și Știința Calculatoarelor
Depa rtamentul Automatică și Tehnologia Informației
Automatică și Informatică Aplicată

11
Fig.1.2.3 Exemple de proiecție a sursei de lumină codificate.[22]

1.4 Alte metode de achiziție
Achiziția imaginilor în vederea r econstrucției este un domeniu vast, iar tehnologiile
prezentate mai sus nu sunt singurele tehnologii disponibile. Există și alte metode de scanare, iar
unele dintre acestea le voi prezenta pe scurt în rândurile ce urmează.
– Metodele de tipul „timpul de prop agare” („time -of-flight”) au ca principiu de
funcționare măsurarea duratei de timp pe care o parcurge o sursă de lumină de când a
fost emisă și până când se întoarce la un senzor. Timpul rezultat este proporțional cu
distanța până la obiect. În funcție de tipul de senzor folosit, acestea se numesc: radar
(folosește unde electromagnetice de frecvență joasă), sonar (folosește unde acustice)
sau radar optic (unde electromagnetice din spectrul vizual și infraroșu). Cu ajutorul
acestei metode nu se detectează forma obiectelor, ci doar poziția lor în spațiu.
– Metodele de tipul „forma -din-umbra” („shape -from -shading”). Aceste metode se
folosesc de obicei în cazul obiectelor netede. Metoda folosește diferite tipare cunoscute
pentru a crea umbre pe obiect. Metoda este similara cu metoda iluminării structurate,
dar se folosește de umbrele create de un model, în loc de proiecția luminii.
– Metodele de tipul „forma -din-defocusare” („shape -from -defocus”) se folosesc de
câmpul de adâncime limitat al camerelor. Orice cameră ar e un câmp de vedere în care
obiectele sunt focalizate. Cu ajutorul focalizării camerei, mai precis a locului de
focalizare când obiectul nu mai este focalizat, se poate calcula forma obiectului.

Facultatea de Inginerie Electrică și Știința Calculatoarelor
Depa rtamentul Automatică și Tehnologia Informației
Automatică și Informatică Aplicată

12 Deoarece nici una din metodele descrise mai sus nu este perfectă, fiecare având avantaje
și dezavantaje, diferite sisteme au încercat exploatarea mai multor metode pentru un rezultat mai
eficient. Un exemplu ar fi combinarea vederii stereoscopice, ce folosește achiziția pasivă cu
metoda iluminării structurate. În m ulte cazuri, extragerea de informații strict din vederea
stereoscopică este destul de dificilă. Astfel, s -au combinat aceste doua metode, asigurând nivelul
de textură suficient pentru a calcula adâncimea obiectului. Și cum sunt folosite două camere, în
loc de una, s -a rezolvat problema corespondenței dintre liniile proiectate de sursa de lumină.
Similar, pot fi folosite multe alte metode pentru o eficientizare a reconstrucției tridimensionale.
Acestea fiind spuse, putem concluziona că nu există niciun siste m perfect în cadrul
achiziției în vederea reconstrucției. Acestea pot fi influențate de tipul materialului ce urmează a fi
reconstruit. Există obiecte ce pot cauza probleme la reconstrucție și acestea pot fi: obiecte lucioase,
transparente, foarte fine, cu structuri repetitive, etc., în funcție de sistemul de scanare folosit. Cu
toate acestea, încă există nevoia de progres în acest domeniu, deși sunt încă multe provocări și
dificultăți, pe care le vom discuta în continuare mai în detaliu.

1.5 Probleme în c adrul scanării
Așa cum am discutat în subcapitolele anterioare, exista o diversitate vastă atât a metodelor
de achiziție a imaginilor pentru reconstrucția 3D, cât și a tipurilor de obiecte scanate. Există
varietate de modele, de la geometrie la caracterist icile materialului, la nivelul de iluminare etc. În
funcție de acestea, tehnica folosită la scanare poate diferi. În continuare vor fi prezentate câteva
dintre probleme actuale:
– forma complicata a obiectelor: Obiectele cu un grad ridicat de complexitate
necesita o precizie ridicată în scanare, pentru a putea capta toat e orificiile sau
detaliile fine.
– tipul de obiect sau material: Nu există nici o tehnologie care să poate achiziționa
imagini pentru toate tipurile de materiale. De exemplu, într -un muzeu exist ă o
varietate foarte mare de materiale. Monedele, realizate din metal, obiecte textile,
obiecte din sticla, metal, toate acestea nu pot fi scanate cu aj utorul unei singure
tehnologii.
– dimensiunea: Există nevoia de a scana atât obiecte mici, de ordinul mili metrilor,
cât și nevoia de a scana obiecte foarte mari, cum ar fi clădiri sau chiar orașe.
Acestea nu pot fi scanate cu același sistem . Ideal ar fi sa existe un singur dispozitiv
pentru toate.
– portabilitatea: Sunt multe obiecte care nu pot fi transportate până la un loc special
unde să fie scanate, fie din cauza materialului din care sunt confecționate, fie din
cauza mediului în care se află, de aceea este nevoie ca dispozitivele folosite pentru
scanare, să fie portabile, transportabile până la locul unde se află obiectul.

Facultatea de Inginerie Electrică și Știința Calculatoarelor
Depa rtamentul Automatică și Tehnologia Informației
Automatică și Informatică Aplicată

13 – fragilitate: Deoarece există obiecte foarte fragile, în cazul lor este necesară scanarea
fără a le atinge în vreun fel. Prin urmare a apărut necesitatea de a scana obiectul
efectuându -se rotirea în j urul lui, acesta fiind static.
– costul: În multe domenii bugetul este limitat, prin urmare trebuie ca produsul final
să fie rentabil.
– precizia: Precizia va fi întotdeauna un scop al reconstrucției 3D. În multe aplicații
este nevoie de precizie din ce în ce mai mare, obținută cât mai rapid și câ t mai
ieftin.
Un lucru categoric este faptul că odată achiziționată informația despre obiecte, este
necesară procesarea ulterioară. Scopul poate fi terminat odată cu obținerea unei structuri
tridimensionale sau poate fi procesat ulterior pentru a automatiz a diverse sisteme. Un domeniu
important în această situație este domeniul automotive, care urmărește conducerea autonomă de
automobile, dar sunt numeroase alte domenii în care pot fi aplicate reconstrucțiile tridimensionale
de obiecte.

Facultatea de Inginerie Electrică și Știința Calculatoarelor
Depa rtamentul Automatică și Tehnologia Informației
Automatică și Informatică Aplicată

14 Capitolul 2
TRIANG ULAȚIA ȘI RELAȚIILE GEOMETRICE DINTRE CAMERĂ ȘI
LASER
În acest capitol vom discuta despre procesul de formare al imaginilor, despre modul cum
se formează un plan tridimensional într -o imagine bidimensională și despre ecuațiile ce ne ajută
la reconstrucția tridimensională folosind triangulația geometrică.

2.1 Modelul camerei ideale și proiecția perspectivei
O cameră poate fi descrisă ca un sistem ce realizează o transformare ireversibilă a
coordonatelor spațiului tridimensional real în coordonate bidimensio nale ale planului imaginii.[10]
Simpla poziționare a unui film fotografic în fața unui obiect sau a unei scene, nu va ajuta deoarece
nu va exista un punct de focalizare pe acest film. Un exemplu al acestui caz se poate vedea în
figura 2.1.1a. Deoarece imag inea nu se poate capta în felul acesta, în fața obiectului sau a scenei,
trebuie pusă o barieră care să blocheze majoritatea razelor de lumină. Aceasta barieră are o
deschizătură ce poartă denumirea de apertură (vezi figura 2.1.1 .b).

Fig. 2.1.1: a) Î ncercare de a înregistra un obiect pe un film fotografic plasând filmul în fața obiectului. b) Principiu
de înregistrare a unui obiect pe un film fotografic folosind o barieră, numită apertură.[9]
Dimensiunea aperturii este foarte importantă deoarece ea po ate determina claritatea
imaginii, mai precis a nivelului de focalizare al obiectului. Cu cât apertura este mai mică, cu atât

Facultatea de Inginerie Electrică și Știința Calculatoarelor
Depa rtamentul Automatică și Tehnologia Informației
Automatică și Informatică Aplicată

15 imaginea este mai clară. Totuși, aceasta prezintă anumite limitări, prin faptul că după o anumită
dimensiune, intervin erorile de difracție.
Un model geometric simplu al unei camere este modelul „pinhole” (prezentat în figura
2.1.2), compus dintr -un plan și un punct în afara planului. În continuare, ne vom referi la plan ca
și planul imaginii, iar la punct ca și centrul optic de proi ecție. În modelul unei camere, fiecare
punct în afara centrului optic de proiecție, generează o linie între acest punct și centrul optic de
proiecție. Dacă această linie nu este paralelă cu planul imaginii, atunci ea intersectează planul într –
un singur pun ct. Punctul rezultat se numește punct bidimensional al imaginii. Această mapare a
punctelor tridimensionale în puncte bidimensionale poartă denumirea de proiecția perspectivei.
Transformarea punctelor tridimensionale reale în puncte bidimensionale din plan ul imaginii are
ca efect o pierdere ireversibilă a unghiurilor și a distanțelor față de obiecte. Acestea fiind spuse,
având un punct 2D în planul imaginii, exista o singură linie care unește acest punct cu centrul optic
de proiecție și punctul tridimension al cu coordonate reale. Sumarizând aceste lucruri, lumina vine
dinspre punctul tridimensional înspre cameră pe o singură linie ce conectează acest punct cu
centrul optic de proiecție, iar punctul este proiectat cu coordonate bidimensionale în planul
imagin ii.

Fig. 2.1.2: Model simplificat al camerei de tipul „pinhole”[22]

2.2 Reprezentările geometrice
Deoarece razele de lumină se propagă în linii drepte (într -un mediu omogen, precum aerul),
ecuațiile necesare pentru reconstrucția tridimensională pot fi g enerate din construcțiile geometrice

Facultatea de Inginerie Electrică și Știința Calculatoarelor
Depa rtamentul Automatică și Tehnologia Informației
Automatică și Informatică Aplicată

16 obținute din intersecția de linii și plane sau de intersecția aproximativă a unei perechi de linii (în
spațiul tridimensional, intersecția nu este obligatorie pentru două linii neparalele). Ecuațiile ce se
vor forma, vo r avea la baza doar algebra și geometria analitică elementară (vor exista operații doar
cu puncte, vectori, linii, raze și plane). Pentru notația punctelor și a vectorilor vom folosi litere
mici. Toți vectorii vor fi considerați ca fiind vectori coloana cu coordonate reale 𝑣∈ℝ3, dar pot
fi considerați și ca o matrice cu 3 rânduri și o coloana 𝑣∈ℝ3𝑥1. Lungimea unui vector este un
scalar ‖𝑣‖∈ℝ. Înmulțirea a doi vectori 𝑣1 și 𝑣2, folosind relațiile matriceale va fi notată 𝑣1𝑡𝑣2∈
ℝ, iar rezultatul va fi tot un scalar. Produsul a doi vectori, folosind unghiul dintre ei va fi egal cu
‖𝑣1‖‖𝑣2‖cos𝛼, unde α este unghiul format de cei doi vectori (0≤𝛼≤180° ). Produsul 𝑣1×𝑣2∈
ℝ3 a doi vectori 𝑣1 și 𝑣2 este un vect or perpendicular atât pe 𝑣1 cât și pe 𝑣2, de lungime
‖𝑣1×𝑣2‖=‖𝑣1‖‖𝑣2‖sin𝛼, iar direcția lui este determinată de regula mâinii drepte. Doi vectori
𝑣1 și 𝑣2 sunt liniari dependenți dacă și numai dacă produsul vectorilor 𝑣1×𝑣2 este egal cu 0 .[19]

Fig.2.2.2: Reprezentare parametrică a liniilor și razelor.[19]

2.2.1 Puncte și vectori
Vectorii formează un spațiu vectorial, prin urmare, aceștia pot fi multiplicați cu niște scalari
și adunați. Pe de altă parte, punctel e nu formează un spațiu vectorial. Totuși, punctele și vectorii
au un lucru în comun: Un vector adunat unui punct 𝑝+𝑣 rezultă un alt punct, iar diferența dintre
două puncte 𝑞−𝑝, rezultă un vector. Dacă 𝑝 este un punct, 𝜆 este un scalar si 𝑣 este un vector,
atunci 𝑞=𝑝+𝜆𝑣 este un alt punct. În această expresie, 𝜆𝑣 este un vector de lungime |𝜆| ‖𝑣‖.[19]
Înmulțirea unui punct cu un scalar, 𝜆𝑝, nu este posibilă, dar înmulțirea unui număr N de puncte
asemănătoare este bine definită:
𝜆1𝑝1+⋯+𝜆𝑁𝑝𝑁=𝑝1+𝜆2(𝑝2−𝑝1)+⋯+𝜆𝑁(𝑝𝑁−𝑝1) (2.1)

2.2.2 Reprezentare parametrică a liniilor si a razelor
O linie L poate fi determinată de unul din punctele ei 𝑞 și un vector de orientare 𝑣 (vezi
Figura 2.2.2). Orice alt p unct 𝑝 de pe această linie 𝐿 poate fi descris ca rezultatul unui scalar
multiplu 𝜆𝑣, al vectorului de direcție 𝑣, la punctul 𝑞 (𝜆 poate fi pozitiv, negativ sau zero):

Facultatea de Inginerie Electrică și Știința Calculatoarelor
Depa rtamentul Automatică și Tehnologia Informației
Automatică și Informatică Aplicată

17 𝐿= {𝑝=𝑞+𝜆𝑣∶𝜆 ∈ℝ} (2.2)
Aceasta este reprezentarea parametrică a unei l inii, unde scalarul 𝜆 este un parametru. De notate
este faptul ca reprezentarea nu este unică, din moment ce 𝑞 poate fi înlocuit de orice alt punct de
pe linia 𝐿, și 𝑣 poate fi înlocuit de orice număr nenul, multiplu de 𝑣.
Pentru fiecare valoare aleas ă pentru 𝑞 și 𝑣, corespondența între parametrii 𝜆∈ℝ și punctul 𝑝 de
pe linia 𝐿 este de unu -la-unu. O rază reprezintă jumătate dintr -o linie. Din moment ce într -o linie,
parametrul 𝜆 poate lua orice valoare, într -o rază, acesta poate lua doar valori mai mari sau egale
cu zero. [19]
𝑅= {𝑝=𝑞+𝜆𝑣∶𝜆 ≥0} (2.3)
În acest caz, daca punctul 𝑞 este modificat, va rezulta o altă rază. Datorită unicității sale,
punctul 𝑞 este definit ca origine a razei. Vectorul de direcție 𝑣 poate fi înlocuit de o rice număr
scalar pozitiv, dar nu și de un număr scalar negativ. Înlocuind vectorul de direcție 𝑣 cu un număr
scalar negative va rezulta raza opusă ca și direcție. Ca și convenție în proiectoare, lumina
traversează raza de -a lungul direcției determinate d e vectorul de direcție. Corespunzător
camerelor, lumina traversează razele în direcția opusă vectorului de direcție.

2.2.3 Reprezentarea parametrică a planelor
Similar reprezentării într -o formă parametrică a liniilor, un plan 𝑃 poate fi descris într -o
formă parametrică specificându -i unul din puncte 𝑞 și doi vectori de direcție liniari independenți
𝑣1 și 𝑣2 (vezi Figura 2.2.3) . Orice alt punct 𝑝 din planul 𝑃 poate fi descris ca rezultatul adunării
numerelor scalare multiple 𝜆1𝑣1 și 𝜆2𝑣2 celor doi vectori ale punctului 𝑞.
𝑃= {𝑝=𝑞+𝜆1𝑣1+𝜆2𝑣2∶ 𝜆1,𝜆2 ∈ℝ} (2.4)
Ca și în cazul liniilor, această reprezentare nu este unică. Punctul 𝑞 poate fi înlocuir cu
orice alt punct din plan, și vectorii 𝑣1 și 𝑣2 pot fi înlocuiți de oricare alte două combinații de
vectori liniari independenți 𝑣1 și 𝑣2.

Fig.2.2.3: Reprezentarea parametrică a planelor (stânga) și reprezentarea implicită a planelor (dreapta) .[19]

Facultatea de Inginerie Electrică și Știința Calculatoarelor
Depa rtamentul Automatică și Tehnologia Informației
Automatică și Informatică Aplicată

18 2.2.4 Reprezentarea implicită a pla nelor
Un plan 𝑃 poate fi de asemenea descris într -o formă implicită, ca o ecuație liniară cu trei
variabile. Din punct de vedere geometric, planul poate fi descris de unul din punctele sale 𝑞 și
vectorul normal 𝑛. Un alt punct 𝑝 aparține planul 𝑃 dacă și numai dacă vectorii 𝑝−𝑞 și 𝑛 sunt
ortogonali, astfel încât:
𝑃= {𝑝∶ 𝑛𝑡(𝑝−𝑞)=0} (2.5)
Este de precizat faptul că, la fel ca și în cazul anterior, această reprezentare nu este unică.
Punctul 𝑞 poate fi înlocuit de oricare alt punct din plan, iar vectorul normal 𝑛 poate fi înlocuit de
un scalar multiplu 𝜆𝑛.
Pentru a transforma reprezentarea parametrică în reprezentare implicită, putem considera
vectorul normal 𝑛= 𝑣1×𝑣2 ca fiind produsul a doi vectori de bază 𝑣1 și 𝑣2. Pentru transformarea
inversă, trebuie să găsim doi vectori 𝑣1 și 𝑣2 ortogonali pe 𝑛. De fapt, avem nevoie să găsim un
singur vector ortogonal pe 𝑛. Al doilea vector poate fi definit ca 𝑣2= 𝑛×𝑣1. În ambele cazuri,
același punct 𝑞 dintr-o reprezentare poate fi folosit în cealaltă reprezentare.

2.2.5 Reprezentarea implicită a liniilor
Similar unui plan, o linie 𝐿 poate avea de asemenea o reprezentare implicită, această formă
fiind descrisă ca fiind intersecția a două plane, ambele repreze ntate în forme implicite, astfel încât
doi vectori normali 𝑛1 și 𝑛2 sunt liniari independenți (dacă ci doi vectori 𝑛1 și 𝑛2 sunt liniari
dependenți atunci ecuațiilor lor descriu același plan).
𝐿= {𝑝∶ 𝑛1𝑡(𝑝−𝑞)=𝑛2𝑡(𝑝−𝑞)= 0} (2.6)
De notat este faptul că atunci când 𝑛1 și 𝑛2 sunt liniari independenți, cele două reprezentări
implicite pentru plane pot defini un punct comun aparținând celor două plane.
Deoarece o line poate fi descrisă ca intersecția mai multor p erechi diferite de plane, această
reprezentare nu este unică. Punctul 𝑞 poate fi înlocuir de orice alt punct aparținând intersecției
dintre cele două plane, iar cei doi vectori normali pot fi înlocuiți de orice altă pereche de vectori
liniari independenți .
Pentru a transforma reprezentarea parametrică a ecuației (2.2) în reprezentarea implicită
descrisă de ecuația (2.6), trebuie să găsim doi vectori liniari independenți 𝑛1 și 𝑛2 ortogonali pe
vectorul de direcție 𝑣. O metodă de a realiza asta este ca mai întai să găsim un vector nenul 𝑛1
ortogonal pe 𝑣, iar apoi să considerăm vectorul 𝑛2 ca fiind vectorul produs dintre 𝑣 și 𝑛1(𝑛2=
𝑣×𝑛1). Pentru transformarea inversă, trebuie să găsim un vector nenul 𝑣 ortogonal pe ambii
vecto ri normali 𝑛1 și 𝑛2. Vectorul produs 𝑣=𝑛1×𝑛2 este un astfel de vector și orice alt multiplu
al lui.

Facultatea de Inginerie Electrică și Știința Calculatoarelor
Depa rtamentul Automatică și Tehnologia Informației
Automatică și Informatică Aplicată

19 2.3 Reconstrucția prin triangulație
În modelul camerei de tipul „pinhole”, o linie proiectată creează un plan de lumină (planul
unic con ține linia pe planul imaginii și centrul de proiecție), și un punct proiectat creează o rază
de lumină (linia unică conține punctul de pe imagine și centrul de proiecție).
Deoarece intersecția unei raze de lumină cu un obiect în timpul scanări poate fi con siderat
un singur punct iluminat, intersecția unui plan de lumina cu obiectul, în general conține mai mult
segmente curbe iluminate (vezi Figura 2.3). Fiecare dintre aceste segmente este compus din mai
multe puncte iluminate. O singur punct iluminat, vizib il camerei, definește o rază de cameră .
Pentru moment, vom presupune ca locațiile și orientările camerei respectiv a sursei de lumină
(proiecție) ne sunt cunoscute, într -un sistem global de coordonate. Având aceste presupuneri,
ecuațiile planelor și a raze lor proiectate, precum și ecuațiile razelor camerei corespunzătoare
punctelor iluminate sunt bine definite de parametri ce pot fi măsurați. Din aceste măsurători,
localizarea punctelor iluminate poate fi obținuta din intersecția planelor sau a razelor de lumina
cu razele camerei corespunzătoare punctelor iluminate. Prin aceste proceduri, ambiguitățile de
adâncime generate de proiecția camerei de tipul „pinhole” pot fi eliminate, fiind posibilă
reconstruirea tridimensională a unei suprafețe. [6]

Fig.2.3: E xemplu de segmente curbe a razelor de proiecție .[19]

2.3.1 Intersecția linie -plan
Calcularea intersecției dintre o linie și un plan se poate face direct atunci când linia este
reprezentată în forma parametrică
𝐿= {𝑝=𝑞+𝜆𝑣∶𝜆 ∈ℝ} (2.7)
Iar planul este reprezentat în formă implicită
𝑃= {𝑝∶ 𝑛𝑡(𝑝−𝑞)=0} (2.8)

Facultatea de Inginerie Electrică și Știința Calculatoarelor
Depa rtamentul Automatică și Tehnologia Informației
Automatică și Informatică Aplicată

20
Fig.2.3.1: Triangulație prin intersecția dintre un plan și o linie .[19]

Este de remarcat faptul ca există posibilitatea ca linia și planul să nu se intersecteze, caz în
care put em spune ca linia și planul sunt paralele. În acest caz, vectorii 𝑣 și 𝑛 sunt ortogonali 𝑛𝑡𝑣=
0. Vectorii 𝑣 și 𝑛 sunt ortogonali și atunci cand planul 𝑃 conține linia 𝐿. [19] Dacă punctul 𝑞𝐿 aparține
sau nu planului 𝑃 reprezintă factorul d ecizional între cele două cazuri. În cazul în care vectorii 𝑣
și 𝑛 nu sunt ortogonali 𝑛𝑡𝑣 ≠0, rezultatul intersecției dintre linie și plan este exact un punct 𝑝.
Din moment ce acest punct aparține liniei, poate fi scris ca 𝑝=𝑞𝐿+𝜆𝑣, unde 𝜆 trebuie să fie
determinat. Cum punctul aparține de asemenea și planului, valoarea 𝜆 trebuie să satisfaca
următoarea ecuație liniară:
𝑛𝑡(𝑝−𝑞𝑝)=𝑛𝑡(𝜆𝑣+𝑞𝐿−𝑞𝑝)=0 (2.9)

Sau în forma echivalentă:
𝜆=𝑛𝑡(𝑞𝑃−𝑞𝐿)
𝑛𝑡𝑣 (2.10)
Deoarece am presupus că linia și planului nu sunt paralele, această expresie este bine
definită. O interpretare geometrică a intersecției linie -plan se poate vedea în figura 2.3.1 .

Facultatea de Inginerie Electrică și Știința Calculatoarelor
Depa rtamentul Automatică și Tehnologia Informației
Automatică și Informatică Aplicată

21 2.3.2 Intersecția linie -linie
V om considera intersecț ia dintre două linii arbitrare 𝐿1 și 𝐿2, la fel cum este prezentat și în
figura 2.3.2 .
𝐿1={𝑝= 𝑞1+𝜆1𝑣1∶ 𝜆1∈ℝ} (2.11)
Și
𝐿2={𝑝= 𝑞2+𝜆2𝑣2∶ 𝜆2∈ℝ} (2.12)
În primul rând vom defini cazurile particulare . Vectorii 𝑣1 și 𝑣2 pot fi atât liniar dependenți
cât și liniar independenți. Dacă cei doi vectori, 𝑣1 și 𝑣2, sunt liniar dependenți, atunci cele două
linii sunt paralele. Dacă pe lângă acestea, vectorul 𝑞2−𝑞1 poate fi scris ca un m ultiplu scalar al
lui 𝑣1 sau 𝑣2, atunci cele două linii sunt identice.

Fig.2.3.2: Triangulația intersecției linie -linie.[19]

Dacă , 𝑣1 și 𝑣2 sunt liniar independenți, este posibil ca cele două linii să se intersecteze sau
nu. Dacă cele două linii se intersectează, rezultatul intersecției lor va fi un singur punct. Condiția
necesară și suficientă pentru ca două linii să se intersecteze, atunci când 𝑣1 și 𝑣2 sunt liniar
independenți, este ca cele două valori scalare 𝜆1 și 𝜆2 să existe astfel încât
𝑞1+𝜆1𝑣1=𝑞2+𝜆2𝑣2 (2.13)
Deoarece există posibilitatea ca cele două linii să nu se intersecteze, vom defini intersecția
aproximativă ca fiind punctul cel mai aproape de cele două linii. Mai precis, chiar dacă liniile se
intersectează sau nu, vom defini intersecția aproximativa ca fiind punctul 𝑝 care minimizează
suma pătratelor distanțelor celor două linii

Facultatea de Inginerie Electrică și Știința Calculatoarelor
Depa rtamentul Automatică și Tehnologia Informației
Automatică și Informatică Aplicată

22 𝜙(𝑝,𝜆1,𝜆2)=‖𝑞1+𝜆1𝑣1−𝑝‖2+‖𝑞2+𝜆2𝑣2−𝑝‖2 (2.14)
Ca și mai înainte, vom presupune că 𝑣1 și 𝑣2 sunt liniari independenți, astfel încât
intersecția aproximativă este un punct unic.
Pentru a demonstra veridicitatea afirmației de mai sus și pentru a determina valoarea lui 𝑝,
vom folosi o metodă algebrică. Fun cția 𝜙(𝑝,𝜆1𝜆2) este o funcție cuadrică, nenegativă definită cu
5 variabile ( cele trei coordonate ale punctului 𝑝 și cei doi scalari 𝜆1 și 𝜆2).

Fig.2.3.2.1: Punctul median 𝑝12(𝜆1,𝜆2) pentru valori arbitrare ale lui 𝜆1 și 𝜆2 (stânga) și pentru valori optime ale lui
𝜆1 și 𝜆2(dreapta) .[19]
În primul rând vom reduce problema minimizând funcția la o funcție cuadrică nenegativă
de două variabile 𝜆1 și 𝜆2. [19] V om considera 𝑝1=𝑞1+𝜆1𝑣1 ca fiind un punct pe linia 𝐿1, iar
punctul 𝑝2=𝑞2+𝜆2𝑣2 ca fiind un punct pe linia 𝐿2. V om defini punctul 𝑝12, ca fiind punctul de
la mijlocul segmentului ce unește punctele 𝑝1 și 𝑝2 astfel:
𝑝12=𝑝1+1
2(𝑝2−𝑝1)=𝑝2+1
2(𝑝1−𝑝2) (2.15)
O condiție necesară pentru minimizarea variabilelor (𝑝,𝜆1,𝜆2) ale funcției 𝜙 este ca
derivatele parțiale ale lui 𝜙 să fie 0.
𝜕𝜙
𝜕𝑝=(𝑝−𝑝1)+(𝑝−𝑝2) =0 (2.15)
Este necesar ca punctul de min imizare 𝑝 să fie mijlocul segmentului ce unește punctele 𝑝1
și 𝑝2 (vezi Figura 2.3.2.1 ).
Efectuând această minimizare, problema se reduce la pătratul distanței de la un punct 𝑝1
de pe o linie 𝐿1 la un punct 𝑝2 de pe o linie 𝐿2. Practic, în continuare putem minimiza funcția
cuadrică nenegativă de două variabile.
𝜓(𝜆1,𝜆2)=2𝜙(𝑝12,𝜆1,𝜆2)=‖(𝑞2+𝜆2𝑣2)−(𝑞1+𝜆1𝑣1)‖2 (2.16)
De remarcat este faptul că încă sunt necesare derivatele parțiale al e lui 𝜓 în raport cu 𝜆1 și
𝜆2, iar rezultatul acestora să fie egal cu 0.
𝜕𝜓
𝜕𝜆1=𝑣1𝑡(𝜆1𝑣1−𝜆2𝑣2+𝑞1−𝑞2)=𝜆1‖𝑣1‖2−𝜆2𝑣1𝑡𝑣2+𝑣1𝑡(𝑞1−𝑞2)=0 (2.17)

Facultatea de Inginerie Electrică și Știința Calculatoarelor
Depa rtamentul Automatică și Tehnologia Informației
Automatică și Informatică Aplicată

23 𝜕𝜓
𝜕𝜆2=𝑣2𝑡(𝜆2𝑣2−𝜆1𝑣1+𝑞2−𝑞1)=𝜆2‖𝑣2‖2−𝜆2𝑣2𝑡𝑣1+𝑣2𝑡(𝑞2−𝑞1)=0 (2.18)

Cu aceste relații putem forma două ecuații liniare în 𝜆1 și 𝜆2, care pot fi exprimate și sub
formă matriceală astfel:
(‖𝑣1‖2−𝑣1𝑡𝑣2
−𝑣2𝑡𝑣1‖𝑣2‖2)(𝜆1
𝜆2)=(𝑣1𝑡(𝑞2−𝑞1)
𝑣2𝑡(𝑞1−𝑞2)) (2.19)
Unica soluție a sistemului liniar este dată de:
(𝜆1
𝜆2)=(‖𝑣1‖2−𝑣1𝑡𝑣2
−𝑣2𝑡𝑣1‖𝑣2‖2)−1
(𝑣1𝑡(𝑞2−𝑞1)
𝑣2𝑡(𝑞1−𝑞2)) (2.20)
Sau în forma echivalentă:
(𝜆1
𝜆2)=1
‖𝑣1‖2‖𝑣2‖2−(𝑣1𝑡𝑣2)2(‖𝑣1‖2𝑣1𝑡𝑣2
𝑣2𝑡𝑣1 ‖𝑣2‖2)−1
(𝑣1𝑡(𝑞2−𝑞1)
𝑣2𝑡(𝑞1−𝑞2)) (2.21)
În concluzie, punctul 𝑝 de intersecție aproximativă poate fi obținut fie din valorea lui 𝜆1,
fie din valoarea lui 𝜆2, din aceste expresii.

2.4 Sistemul de coordonate
Până în momentul de față, am discutat despre triangulație fără a descrie un sistem de
coordonate. În practică, măsurătorile imaginilor sunt exprimate într -o unitate de măsură: pixelul.
În acest subcapitol, vom integra coordonatele în ecuațiile obținute anterior și vom descrie diferitele
sistem e de coordonate implicate. [5]

Fig.2.4.2: Camera de tipul „pinhole” ideală .[19]

Facultatea de Inginerie Electrică și Știința Calculatoarelor
Depa rtamentul Automatică și Tehnologia Informației
Automatică și Informatică Aplicată

24 2.4.1 Coordonatele imaginii și camera de tipul „pinhole”
Se consideră un model „pinhole” cu centrul de proiecție 𝑜 și planul imaginii 𝑃=
{𝑝=𝑞+𝑢1𝑣1+𝑢2𝑣2∶ 𝑢1,𝑢2∈ℝ}. Orice punct tridimensional 𝑝 are coordonatele
(𝑝1,𝑝2,𝑝3)𝑡, în raport cu originea sistemului real de coordonate. Pe planul imaginii, punctul 𝑞 și
vectorii 𝑣1 și 𝑣2 descriu un sistem de coordonate local. Coordona tele unui punct 𝑝=𝑞+ 𝑢1𝑣1+
𝑢2𝑣2 din imagine, sunt date de parametrii 𝑢1 și 𝑢2, ce pot fi reprezentați ca un vector
tridimensional 𝑢=(𝑢1,𝑢2,1). Folosind aceste notații, punctul 𝑝 poate fi exprimat ca:
(𝑝1
𝑝2
𝑝3)=[𝑣1|𝑣2|𝑞](𝑢1
𝑢2
1) (2.22)

2.4.2 Camera de tipul „pinhole” ideală
În modelul camerei de tipul „pinhole” ideală prezentă în figura 2.4.2, centrul de proiecție
𝑜 este la originea sistemului de coordonate real, cu coordonat ele (0,0,0)𝑡, iar punctul 𝑞 și
vectorii 𝑣1 și 𝑣2 sunt definiți astfel:
[𝑣1|𝑣2|𝑞]=(100
010
001) (2.23)
Se remarcă faptul că nu orice punct tridimensional are proiecția pe planul imaginii.
Punctele care nu sunt proiec tate pe planul imaginii sunt conținute într -un plan paralel cu imaginea
ce trece prin centrul de proiecție. Un punct tridimensional arbitrar 𝑝 având coordonatele
(𝑝1,𝑝2,𝑝3)𝑡, aparține planului daca 𝑝3=0. În caz contrar, se proiectează ca fiind un punct din
imagine cu următoarele coordonate:
𝑢1=𝑝1
𝑝3
𝑢2=𝑝2
𝑝3
(2.24)
Sunt și alte modalități prin care se pot descrie relațiile între coordonatele unui punct și
coordonatele din imagine ale proiecției lui. De exemplu, proiecția unui punct tridimensional 𝑝 ce
are coordonatele (𝑝1,𝑝2,𝑝3)𝑡, are coordonatele în imagine 𝑢=(𝑢1,𝑢2,1) daca pentru orice
număr scalar 𝜆≠0 putem scrie:
𝜆(𝑢1
𝑢2
1)=(𝑝1
𝑝2
𝑝3) (2.25)

Facultatea de Inginerie Electrică și Știința Calculatoarelor
Depa rtamentul Automatică și Tehnologia Informației
Automatică și Informatică Aplicată

25 2.4.3 Camera de tipul „pinhole” reală
Centrul de proiecție al unei camere reale nu este neapărat plasat în originea sistemului de
coordonate real și poate fi orientat arbitrar. Cu toate acestea, el prezintă un sistem propriu de
coordonate atașat la cameră, în complementul sistemului de coordonate real (vezi figura 2.4.3).
Un punct 𝑝 tridimensional are coordonatele reale descrise de vectorul 𝑝𝑅=(𝑝𝑅1,𝑝𝑅2,𝑝𝑅3)𝑡 și
coordonatele camerei descrise de vectorul 𝑝𝐶=(𝑝𝐶1,𝑝𝐶2,𝑝𝐶3)𝑡. Acești doi vectori sunt în legătură
cu ajutorul unui vector de translație 𝑇∈ ℝ3 și o matrice de rotație 𝑅∈ℝ3×3, astfel încât:
𝑝𝐶=𝑅𝑝𝑅+𝑇 (2.26)

Fig.2.4.3: Modelul camerei de tipul „pinhole” reală .[19]
În coordonatele camerei, legătura dintre coordonatele unui punct tridimensional si
coordonatele proiecției bidimensionale sunt descrise proiecția camerei „pinhole” ideale (relația
2.25) în care 𝜆𝑢=𝑝𝐶. În coordonatele reale, această relație devine:
𝜆𝑢=𝑅𝑝𝑅+𝑇 (2.27)
Parametrii (𝑅,𝑇) la care se face referire ca fiind parametrii extrinseci ai camerei, descriu
poziția și orientarea camerei în sistemul de coordonate real.
Ecuația (2.27) presupune ca unitatea de măsură pentru lungime în planul i maginii este
aceeași cu unitatea de măsură în sistemul de coordonate real, distanța de la centrul de proiecție la
planul imaginii este egal cu o unitate de lungime, iar originea sistemului de coordonate al imaginii
are coordonatele imaginii 𝑢1=0 și 𝑢2=0. Nici una din aceste presupuneri nu sunt valabile în
practică. De exemplu, unitatea de măsură pentru lungime în cadrul sistemului de coordonate al
imaginii este pixelul, iar în sistemul de coordonate real folosește metri sau inch ca unitate de
măsură . Distanța de la centrul optic de proiecție la planul imaginii poate fi arbitrară, iar originea
sistemului de coordonate al imaginii este de obicei în colțul din stânga sus al imaginii. Mai mult
de atât, planul imaginii poate fi rotit față de planul ideal al imaginii. Pentru a compensa aceste
limitări ale modelului curent, se introduce o matrice 𝐾∈ℝ3×3 în ecuația proiecției pentru a descrie
parametrii intrinseci după cum urmează:
𝜆𝑢=𝐾(𝑅𝑝𝑅+𝑇) (2.28)

Facultatea de Inginerie Electrică și Știința Calculatoarelor
Depa rtamentul Automatică și Tehnologia Informației
Automatică și Informatică Aplicată

26 Matricea K are următoarea formă: [9]
𝐾=(𝑓𝑠1𝑓𝑠𝜃𝑜1
0 𝑓𝑠2𝑜2
0 0 1) (2.29)
Unde 𝑓 ste distanța focală (distanța dintre centrul optic de proiecție și planul imaginii).
Parametrii 𝑠1 și 𝑠2 sunt primul și respectiv al doilea parametru de scalare a coordonatel or. De
remarcat este faptul ca acești parametri de scalare sunt necesari deoarece unele camere nu au
pixelii pătrați. Parametrul 𝑠𝜃 este folosit pentru a compensa rotația planului imaginii. În cele din
urmă, (𝑜1,𝑜2)𝑡 sunt coordonatele în i magine ale intersecției dintre linia verticală în coordonatele
camerei cu planul imaginii. Acest punct se numește centrul imaginii sau punctul principal. Toți
parametrii intrinseci încorporați din matricea 𝐾 sunt independenți de poziția camerei. Aceștia
descriu proprietăți fizice aflate în strânsă legătură cu construcția mecanică și optică a camerei. Din
moment ce aceștia nu se schimbă, această matrice poate fi determinată prin intermediul unei
proceduri de calibrare, iar mai apoi stocată. După aceasta, mă surătorile planului imaginii în pixeli
poate fi normalizat multiplicând vectorul de coordonate al imaginii cu 𝐾−1, astfel încât relația
dintre un punct tridimensional în coordonate reale și un punct în coordonatele bidimensionale ale
imaginii este descrisă de ecuația ( 2.27).
Camerele reale prezintă de asemenea, și o deformare neliniară a lentilelor care poate fi
considerată intrinsecă. Compensarea deformării lentilelor trebuie realizată anterior normalizării
descrise mai sus.

2.4.4. Linii din punctele imaginii
Așa cum este prezentat în figura 2.4.4, un punct al imaginii cu coordonatele 𝑢=(𝑢1,𝑢2,
1) definește o linie unică ce conține acest punct și centrul optic de proiecție. Provocarea este să se
găsească ecuația parametrică a acestei linii, de forma 𝐿= {𝑝=𝑞+𝜆𝑣∶ 𝜆∈ℝ}. Din moment ce
linia trebuie să conțină centrul optic de proiecție, proiecția tuturor punctelor pe care le străbate au
aceleași coordonate ale imaginii. Daca 𝑝𝑅 este un vector cu coordonate reale pentru un punct
conți nut de această linie, atunci coordonatele sistemului real si coordonatele imaginii sunt în
legătură prin ecuația (2.27), astfel încât 𝜆𝑢=𝑅𝑝𝑅+𝑇. Din moment ce 𝑅 este o matrice de rotație,
𝑅−1=𝑅𝑡, rezultă că putem rescrie ecuația proiecție i astfel:
𝑝𝑅=(−𝑅𝑡𝑇)+𝜆(𝑅𝑡𝑢) (2.30)
În concluzie, linia pe care o căutăm este descrisă de punctul 𝑞 cu coordonatele în sistemul
real 𝑞𝑅= −𝑅𝑡𝑇, ce reprezintă centrul de proiecție și vectorul 𝑣 cu coordonatele în sistemul re al
𝑣𝑅=𝑅𝑡𝑢

Facultatea de Inginerie Electrică și Știința Calculatoarelor
Depa rtamentul Automatică și Tehnologia Informației
Automatică și Informatică Aplicată

27
Fig.2.4.4: Planul definit de o linie din imagine și centrul de proiecție .[19]

2.4.5 Plane din liniile imaginii
O linie din planul imaginii poate fi descrisă atât sub formă parametrică cât și sub formă
implicită, ambele exprimate în coordonatele imaginii. Pentru început vom considera cazul în care
linia este descrisă sub formă implicită. O linie în planul imaginii este descrisă de una din ecuațiile
implicite ale coordonatelor imaginii:
𝐿= {𝑢∶ 𝑙𝑡𝑢=𝑙1𝑢1+𝑙2𝑢2+𝑙3=0 } (2.31)
Unde 𝑙𝑡=(𝑙1,𝑙2, 𝑙3) este un vector cu 𝑙1≠0 sau 𝑙2≠0. Folosind iluminarea activă,
tiparele emise de proiector, conținând linii verticale și/sau orizontale sunt comune. Prin urmare,
ecuația implicită a unei lin ii orizontale este:
𝐿𝐻= {𝑢∶ 𝑙𝑡𝑢=𝑢2−𝑣=0 } (2.32)
Unde 𝑣 este a doua coordonaă a punctului de pe linie. În acest caz, putem considera
𝑙=(0,1,−𝑣)𝑡.
Similar, ecuația implicită a unei linii verticale este:
𝐿𝑉= {𝑢∶ 𝑙𝑡𝑢=𝑢1−𝑣=0 } (2.33)
Unde 𝑣 este acum prima coordonată a punctului de pe linie. În acest caz, putem considera
𝑙=(1,0,−𝑣)𝑡. Este un plan unic 𝑃 ce conține linia 𝐿 și centrul de proiecție. Pentru fiecare punct
din imagine cu coordonate exprima te în sistemul îmaginii 𝑢 pe linia 𝐿, linia ce conține punctul
acesta și centrul de proiecție este conținută în 𝑃. Fie 𝑝 un punct în planul 𝑃, cu coordonatele în
sistemul real de coordonate 𝑝𝑅, proiectând un punct pe planul imaginii cu coordonate în sistemul
imaginii 𝑢. Din moment ce acești doi vectori de coordonate satisfac ecuația (2.27), pentru care
𝜆𝑢=𝑅𝑝𝑅+𝑇 și vectorul 𝑢 satisface ecuația implicită ce definește linia L, vom avea:
0=𝜆𝑙𝑡𝑢= 𝑙𝑡(𝑅𝑝𝑅+𝑇)=(𝑅𝑡𝑙)𝑡(𝑝𝑅−(−𝑅𝑡𝑇)) (2.34)

Facultatea de Inginerie Electrică și Știința Calculatoarelor
Depa rtamentul Automatică și Tehnologia Informației
Automatică și Informatică Aplicată

28 În concluzie, reprezentarea implicită a planul P, corespunzătoarea ecuației pentru care 𝑃=
{𝑝∶𝑛𝑡(𝑝−𝑞)=0}, poate fi obținută cu 𝑛 ca fiind un vector cu coordonate reale 𝑛𝑅=𝑅𝑡𝑙 și 𝑞
un punct cu coordon ate reale 𝑞𝑅=−𝑅𝑡𝑇, care reprezintă centrul de proiecție.

Facultatea de Inginerie Electrică și Știința Calculatoarelor
Depa rtamentul Automatică și Tehnologia Informației
Automatică și Informatică Aplicată

29 Capitolul 3
CALIBRAREA CAMEREI. LIBRĂRIA OPENCV
Triangulația, deși prezintă la bază un concept simplu, ea poate fi foarte înșelătoare. Acest
lucru nu se datorează calculelor sau erorilor de estimare a pozițiilor obiectelor din imagine, ci este
vorba de erorile pe care le introduce camera, ca urmare a distorsiunilor generate de lentilele Ceea
ce trebuie realizat pentru ca măsurătorile să fie corecte este o calibrare a camerei cu care se produce
înregistrarea imaginii. Practic, această calibrare înseamnă corectarea erorilor de distorsiune,
estimarea parametrilor camerei și alte caracteristici pe care le vom discuta pe parcursului acestui
capitol.
În legătură cu calibrarea camerei, pe parcu rsul acestui capitol vom discuta și despre câteva
dintre metodele de calibrare și a programelor software folosite pentru a obține această calibrare.
De asemenea, în a doua parte a acestui capitol, vor fi prezentate câteva din librăriile
OpenCV , necesare pr eprocesării imaginilor sau a clipului achiziționat cu ajutorul camerei.

3.1 Calibrarea camerei
În optică, distorsiunile sunt aberații optice ce deformează liniile drepte și le face să pară
linii curbate. Distorsiunile apar datorită modului de proiectare al lentilelor, deoarece acestea sunt
proiectate în așa fel încât să se corecteze aberațiile sferice și alte aberații cromatice. În cazul ideal,
o imagine are pixelii perfect pătrați (vezi Figura 3.1.1) [10]. În realitate, astfel de lentile sunt foarte
rare, deoarece majoritatea lentilelor generează cel puțin un fel de distorsiune. Lentilele de foarte
bună calitate au elemente de lentilă de foarte bună calitate, iar aceste distorsiuni nu sunt sesizabile
cu ochiul liber, însă ele există. Distorsiunile cele ma i pronunțate sunt cele ale razelor ce trec prin
marginea lentilelor. Distorsiunile sunt de două tipuri: de tip pernă și de tip butoi (lentile fisheye).
Un exemplu pentru aceste tipuri de distorsiuni sunt prezentate în figurile 3.1.2 și 3.1.3.
Distorsiunile descresc odată cu micșorarea distanței la axa optică. [2]

Figura 3.1.1: Exemple de distorsiuni: fără distorsiuni – cazul ideal (stânga), cu distorsiune de tip butoi (mijloc), cu
distorsiune de tip pernă (dreapta) .[22]

Facultatea de Inginerie Electrică și Știința Calculatoarelor
Depa rtamentul Automatică și Tehnologia Informației
Automatică și Informatică Aplicată

30 Calibrarea camerei este un aspect foarte important în sistemele de vedere artificială,
deoarece fără această calibrare, se pot obține erori de estimare, unele foarte importante. Calibrarea
geometrică a camerei estimează parametrii lentilelor și a senzorului de imagine.

Figura 3.1.2: Dis torsiune de tip butoi (lentile fisheye) .[22]
Parametrii estimați pot fi folosiți pentru a corecta distorsiunile lentilelor, pentru a calcula
dimensiunea obiectelor în unități reale sau pentru a determina poziția camerei.

Figura 3.1.3: Distorsiune de ti p pernă .[22]

Facultatea de Inginerie Electrică și Știința Calculatoarelor
Depa rtamentul Automatică și Tehnologia Informației
Automatică și Informatică Aplicată

31 Când discutăm despre parametrii camerei, facem referire atât la parametrii intrinseci și
extrinseci, cât și la distorsiunile lentilelor. Pentru a estima parametrii camerei, avem nevoie de
puncte în coordonate reale tridimensionale raportate la punctele corespondențe acestora în
coordonatele imaginii bidimensionale. Putem obține aceste corespondențe folosind imagini
multiple ce conțin un anumit tipar, cum ar fi o tablă de șah. Pentru a putea calibra camera, modelul
de calibrare trebuie să fie a priori cunoscut (dimensiunea pătratelor din tabla de șah). În procesul
de calibrare, modelul este achiziționat sub diferite unghiuri. Numărul minim de imagini necesar
pentru calibrare este 3, dar pentru o calibrare cât mai corectă, se recomandă să se achiz iționeze
minimum 10 imagini. Există mai multe metode pentru obținerea parametrilor camerei, însă cele
mai cunoscute metode sunt: [1]
– Metoda Zhang
– Metoda Tsai
– Metoda transformării liniare directe
Metoda Zhang este cea mai folosită și o vom prezenta în con tinuare. Aceasta este o metodă ce
folosește tehnici de calibrare tradițională (puncte de calibrare cunoscute) și tehnici de auto –
calibrare (corespondența punctelor atunci când acestea sunt în poziții diferite). Metoda presupune
că se cunoaște distribuția c olțurilor modelului de calibrare (colțurile tablei de șah). Pasul următor
este de a determina punctele cheie ale tablei de șah. După acest pas, trebuie să se determine
corespondențele dintre punctele cheie calculate 𝑝𝑖𝑗 și punctele cheie estimate 𝑝̂.
𝑃− puncte reale tridimensionale ale modelului de calibrare
𝑝− puncte din imagine
𝑝=𝐾[𝑅 𝑡]𝑃
K- reprezintă matricea de proiecție
𝐾= [𝛼 𝑠𝑢0
0𝛽𝑣0
00 1] , unde 𝛼 ș𝑖 𝛽 reprezintă lungimea respectiv lățimea pixelului, 𝑢0 și 𝑣0
reprezintă coordonatele centrului optic de proiecție, iar 𝑠 reprezintă oblicitatea pixelului. [9]
𝑅, 𝑡 sunt matricele de rotație respectiv translație.
În procesul de calibrare se minimizează funcția de cost 𝑞, în care parametrii intrinseci din
𝐾 variază.

𝑞= ∑∑‖𝑝𝑖𝑗−𝑝̂ (𝐾,𝑅𝑖,𝑡𝑖,𝑃𝑗‖2𝑚
𝑗=1𝑛
𝑖=1
(3.1)

Facultatea de Inginerie Electrică și Știința Calculatoarelor
Depa rtamentul Automatică și Tehnologia Informației
Automatică și Informatică Aplicată

32 3.2 Librăria OpenCV
OpenCV este o librărie ce îndeplinește ca scop dezvoltarea aplicațiilor din cadrul
domeniului de vedere artificială. Această librărie deține o licență BSD, drept pentru care poate fi
folosită gratuit atât în scopuri academice cât și în scopuri comerciale. OpenCV a fost proiectată
pentru o eficiență computațională, având o puternică înclinare spre aplicațiile în timp real. Fiind
scrisă în limbaj ul C/C++, aceasta poate beneficia de avantajele procesării paralele.

Figura 3.2 Sigla librăriei OpenCV .[22]
Librăria are peste 2500 de algoritmi optimizați. Acești algoritmi pot fi folosiți pentru a
detecta și recunoaște fete, identifica obiecte, clasif ica acțiuni umane într -un videoclip, urmări
mișcările camerei, urmări mișcările obiectelor, extragerea modelelor tridimensionale ale
obiectelor, producerea de puncte tridimensionale din camere stereoscopice și multe altele.[23]
Această librărie are interfe țe pentru limbajele de programare C++, C, Python, Java și
MATLAB și suportă sistemele de operare Windows, Linux, Android și Mac. OpenCV este
înclinată către aplicații de vedere artificială în timp real și profită de avantajele folosirii
instrucțiunilor MMX și SSE, atunci când acestea sunt disponibile.

3.2.1 Clase și funcții utile din librăria OpenCV
Clasa VideoCapture este o clasă folosită pentru captură video din fișiere video, secvențe
de imagini sau de la cameră. Clasa VideoCapture furnizează un API C++ pentru captură video de
la cameră sau pentru a citi fișiere video sau secvențe de imagini. Această clasă are trei constructori:
unul implicit, fără niciun parametru, și încă alți doi cu un parametru. În cazul în care
constructorului i se pasează un parame tru de tipul „string”, el folosește acest parametru ca și
denumire pentru numele unui fișier. Dacă i se pasează un parametru de tipul „int”, el va înțelege
acest parametru ca fiind id -ul dispozitivului de captură video. [17]
Funcția VideoCapture::isOpened este o funcție a clasei VideoCapture. Această funcție este
de tipul „bool” și verifică dacă obiectul pentru captură video a fost inițializat. În acest caz,
returnează adevărat. Funcția nu primește niciun argument ca parametru.
Funcția VideoCapture::read e ste atât o funcție cât și o metodă cu rolul de a pentru a prelua,
decodifica și returna următorul cadru video printr -o singură apleare a funcției. Este cea mai
convenabilă metodă de a captura informație, deși mai există două alte funcții prin care se pot f ace

Facultatea de Inginerie Electrică și Știința Calculatoarelor
Depa rtamentul Automatică și Tehnologia Informației
Automatică și Informatică Aplicată

33 separat aceste operații. Dacă nu a fost preluat niciun cadru video (fie din motivul că a fost
deconectată camera, fie din motivul că s -a ajuns la finalul fișierului), metodele returnează fals, iar
funcțiile vor returna un pointer NULL.
Funcția VideoCap ture::get este o funcție de tipul „double” ce returnează o anumită
proprietate pentru VideoCapture. Funcția primește ca parametru un argument de tipul „int”.
Proprietățile care pot fi obținute sunt destul de numeroase, iar câteva dintre aceste proprietăți sunt:
lățimea și lungimea cadrului, numărul de cadre pe secundă, codul de codificare al videoclipului,
numărul de cadre al fișierului video, luminozitatea, contrastul, saturația. Atunci când se apelează
funcția cu un parametru care nu este disponibil, acea sta va returna valoarea 0.
Funcția VideoCapture::set este o funcție de tipul „bool”, cu efectul invers față de funcția
VideoCapture::get. Aceasta are ca parametri un argument de tipul „int” cu rolul de a selecta
proprietatea dorită și un argument de tipul „double” cu rolul de atribui valoarea dorită pentru
proprietatea aleasă. Funcția returnează o valoarea de tipul „bool” cu valoarea de adevăr a setării
proprietății. Proprietățile care se pot seta sunt aceleași ca și la funcția VideoCapture::get.
Clasa Vid eoWriter poate fi folosită atunci când se dorește salvarea un fișier în format video
ca urmare a procesării lui cu ajutorul librăriei OpenCV . Fiecare fișier video este un „container” în
care se stochează informații. Tipul de container este dat de extensia fișierului, acesta conținând
mai multe elemente, cum ar fi linia audio, linia video și altele. Acestea sunt stocate folosind o
codificare specifică. În cazul fișierelor video, există mai multe tipuri de codificări, iar pentru a
simplifica lucrurile, OpenCV folosește un sistem de codificare din 4 caractere. Un obiect de tipul
VideoWriter poate fi creat fie prin constructorul implicit al clasei (fără parametri), fie cu un
constructor prin care se pot specifica anumite setări pentru fișierul ce urmează a fi sa lvat. Acești
parametri sunt: numele fișierului, codificarea video a fișierului, numărul de cadre pe secundă,
dimensiunea cadrului și dacă fișierul este unul de tipul color sau nu, acesta din urmă fiind un
parametru opțional, ce este setat în mod implicit c a fiind color. [17]
Funcția VideoWriter::open este o funcție de tipul „bool” cu rolul de a inițializa sau
reinițializa un obiect de tipul VideoWriter. Se poate aplica atât pe un obiect deja inițializat (cu rolul
de a modifica setările obiectului respectiv) cât și pe un obiect neinițializat (dacă a fost declarat
folosind constructorul implicit). Parametrii acestei funcții sunt aceeași cu parametrii din
constructorul clasei VideoWriter. Funcția returnează o valoare de tipul „bool” ce indică dacă
obiectul a fo st sau nu inițializat cu succes.
Funcția VideoWriter::isOpened este o funcție a clasei VideoWriter. Această funcție este de
tipul „bool” și verifică dacă obiectul pentru scriere de fișier video a fost inițializat cu succes. În
acest caz, returnează adevăr at. Funcția nu primește niciun argument ca parametru.
Funcția VideoWriter::release este o funcție cu rol de a finaliza fișierul video și de a închide
obiectul creat de VideoWriter. Această funcție se apelează fără niciun parametru, iar după apelarea
acest eia, se apelează si destructorul clasei VideoWriter.

Facultatea de Inginerie Electrică și Știința Calculatoarelor
Depa rtamentul Automatică și Tehnologia Informației
Automatică și Informatică Aplicată

34 Clasa Mat este o clasă compactă de matrice. Această clasă reprezintă o matrice numerică n –
dimensională compactă structurată pe unul sau mai multe canale. Poate fi folosită pentru a stoca
vector și matri ce cu valori complexe sau reale, imagini color sau alb -negru, câmpuri de vectori,
nori de puncte, histograme și altele. [14] Pentru a crea o clasă Mat, există mai multe metode, iar pe
cele mai folosite le vom prezenta în continuare:
– Folosind metoda „creat e(nrand, ncol, tip)” sau constructorul Mat(nrand, ncol, tip,
valoareElemente), unde nrand reprezintă numărul de rânduri, ncol reprezintă numărul de
coloane, tip este tipul de matrice, iar valoareElemente reprezintă valoarea care se dorește
a fi atribuită i nițial elementelor.
– Folosind constructorul de copiere sau operatorul de asignare. Se poate folosi funcția
Mat::clone() pentru a obține o copiere completă
După ce matricea a fost creată, este gestionată în mod automat de un mecanism de numărare a
referinței . Obiectul este dealocat când niciun alt obiect nu indică către ea. Operațiile implementate
pe aceste matrice, pot fi combinate pentru a obține expresii complexe. În continuare, vom prezenta
o parte din operațiile posibile cu aceste obiecte (A, B sunt matr ice de tipul Mat, iar s este un scalar
cu valoare reală de tipul „double”).
• Adunarea, scăderea și negația: A+B, A -B, -A
• Scalarea: A * s
• Înmulțirea și împărțirea pentru fiecare element: A.mul(B), A/B, s/A
• Înmulțirea de matrice: A*B
• Transpunere: A.t()
• Invers iunea de matrice: A.inv()
• Compararea matricelor A<B, A>B, A==B
• Operații la nivel de bit: A|B, A&B, A^B
• Inițializări de matrice: Mat::eye(), Mat::zeros(), Mat::ones()
Funcția Mat::copyTo copiază datele dintr -o matrice în alta. Funcția poate fi apelată cu un ul sau
cu doi parametri. Dacă este apelată cu un parametru, atunci acel parametru trebuie să fie matricea
de destinație În cazul în care este specificat și al doilea parametru, acesta este privit ca o mască ce
specifică ce elemente din matricea sursă să fi e copiate în matricea destinație.
Funcția Mat::convertTo convertește o matrice existentă într -o matrice de alt tip. Scalarea în
acest caz poate fi opțională. Funcția primește ca parametri 4 argumente, în care primul reprezintă
matricea destinație, al doile a este tipul de matrice în care se dorește conversia, iar ultimii doi sunt
folosiți pentru scalare, sunt opționali și au valori implicite 1 și 0.
Funcția imshow() este o funcție OpenCV cu ajutorul căreia se afișează actualizarea unei
imagini într -o fereas tră creată anterior. Ca și parametri pentru această funcție, trebuie specificat

Facultatea de Inginerie Electrică și Știința Calculatoarelor
Depa rtamentul Automatică și Tehnologia Informației
Automatică și Informatică Aplicată

35 numele ferestrei existente sub forma de ”string” și imaginea care se dorește a se actualiza în cadrul
ferestrei. Un exemplu al rulării acestei funcții este: imshow(”Fereastra 1”, imagineActualizata);
Funcția cvtColor() este folosită pentru conversia dintr -un spațiu de culoare în altul. Funcția are
4 parametri la numărul argumentelor, din care doar primii 3 sunt obligatorii. Aceștia sunt: imaginea
sursă, imaginea destinație și cod ul pentru conversia spațiului de culoare. [15] Funcția poate realiza
conversii în toate spațiile de culoare, iar mai jos le vom prezenta doar pe cele mai utilizate:
– Din RGB în GRI și invers, folosind codurile pentru conversia spațiului: CV_BGR2GRAY,
CV_RG B2GRAY, CV_GRAY 2RGB, CV_GRAY 2BGR.
– Din RGB în HSV și invers, cu următoarele coduri pentru conversia spațiului:
CV_BGR 2HSV , CV_RGB 2HSV , CV_HSV 2RGB, CV_HSV 2BGR.
– Din RGB în HLS și invers, cu următoarele coduri pentru conversia spațiului:
CV_BGR 2HLS, CV_RGB 2HLS, CV_HLS 2RGB, CV_HLS 2BGR.
Funcția inRange() verifică dacă elementele unei matrice se află în limitele altei matrice sau a
unor numere scalare. Această funcția primește 4 argumente ca și parametri, aceștia fiind: matricea
sursă, limita inferioară, limita su perioară, matricea destinație. [14] Funcția verifică dacă elementele
se află între limite astfel:
𝑑𝑠𝑡(𝐼)=𝑙𝑖𝑚𝑖𝑡𝑎𝐼𝑛𝑓 (𝐼)≤ 𝑠𝑢𝑟𝑠𝑎 (𝐼)𝑜≤𝑙𝑖𝑚𝑖𝑡𝑎𝑆𝑢𝑝 (𝐼)
(3.2)
Matricea de destinație va avea toți biții care se află între l imitele impuse egali cu 1, iar cei
din afara limitelor vor fi egalați cu 0.
Funcția split() separă o matrice multi -canal în mai multe matrice cu un singur canal.
Funcția are 2 argumente ca parametri. Primul este matricea sursă multi -canal, iar al doilea es te un
vector de matrice, în care vor fi stocate matricele cu un singur canal generate de această funcție.
Funcția imread() are rolul de a salva o imagine într -un fișier specificat ca parametru.
Funcția primește 3 argumente ca parametri, aceștia fiind nume le fișierului, imaginea care se
dorește a fi scrisă și un vector de proprietăți opționali. Formatul imaginii se bazează pe extensia
fișierului. Cu ajutorul acestei funcții se pot salva doar imagini pe 8 sau 16 biți cu un singur canal
sau cu trei canale. Du pă apelare, funcția returnează un „bool” pentru a specifica daca salvarea a
fost efectuată cu succes sau nu.
Funcția waitKey() așteaptă ca o tastă să fie apăsată. Dacă este specificat un parametru
acestei funcții, aceasta așteaptă un interval egal cu număr ul pasat ca parametru în milisecunde.
Funcția returnează codul tastei care a fost apăsată sau în caz contrar -1. Funcția poate fi apelată
doar dacă este un element HighGUI creat și activ. [18]
Funcția destroyAllWindows() distruge toate ferestrele de tipu l HighGUI deschise. Aceasta
este o funcție de tipul „void” și nu acceptă niciun argument ca parametru.

Facultatea de Inginerie Electrică și Știința Calculatoarelor
Depa rtamentul Automatică și Tehnologia Informației
Automatică și Informatică Aplicată

36 Capitolul 4
IMPLEMENTAREA UNUI DEMONSTRATOR PENTRU
RECONSTRUCȚIA 3D A OBIECTELOR FOLOSIND O CAMERĂ WEB ȘI
UN FASCICUL LASER.
Scopul reconstrucției tri dimensionale este de a recupera proprietățile tridimensionale ale
unei forme geometrice din imaginile bidimensionale ale acesteia. În cadrul acestui proiect, am
implementat vederea stereoscopică activă, tehnică pentru reconstrucția tridimensională ce se
folosește de o cameră pentru captarea imaginilor și de o sursă de proiecție a luminii. În cazul
acesta, am folosit o cameră web pentru captura imaginilor și laser cu fasciculul tip linie ca sursă
de iluminare.
Acest proiect urmărește a fi cât se poate de mo bil și com pact. În acest proiect, am ales
folosirea unei camere web deoarece este destul de compactă, ușor de întreținut, prezintă un grad
ridicat de fiabilitate și nu în ultimul rând costul de achiziție. Modulul laser folosit este unul de tip
linie, acest a fiind modificat în așa fel încât să poată fi controlat de la un microcontroler.
Servomotoarele folosite sunt suficient de puternice pentru a mișca ansamblul cameră -laser și sunt
montat pe un sistem pan -tilt.
Conceptul proiectului este prezentat în figura 4.1.

Figura 4.1 Concept proiect
Arhitectura acestui proiect se poate împărți în două mari ramuri. Arhitectura software și
arhitectura hardware.

4.1 Arhitectura hardware
În cadrul arhitecturii hardware sistemul folosește următoarele componente:
• O cameră web Creative Live! Cam Sync HD
• Modul diodă laser linie, adaptat pentru a fi controlat ușor de către un microcontroler
Arduino, cu protecție la supratensiune
• Două servomotoare TowerPro MG 995
• Mini -sistem pan -tilt
• Microcontroler Arduino pentru controlul moto arelor
• Sursă tensiune

Facultatea de Inginerie Electrică și Știința Calculatoarelor
Depa rtamentul Automatică și Tehnologia Informației
Automatică și Informatică Aplicată

37
Figura 4.1.2 Sistemul pan -tilt și poziționarea camerei și a modu lului laser pe acesta (concept)
Arduino este o companie ce realizează mai multe tipuri de microcontrolere, fiecare dintre
acestea având caracteristicii și puteri de c alcul diferite. Deoarece electronicele Arduino sunt open
source din punctul de vedere al arhitecturii hardware, acestea pot fi modificate în funcție de
necesitățile fiecărui utilizator, oferind mai mulți factori de funcționalitate.
Există o vastă varietate de plăci Arduino care pot fi folosite pentru scopuri diferite, însă majoritatea
acestor plăci au următoarele componente comune:
– Alimentarea (USB/ Jack). Orice placă Arduino are nevoie de o sursă de tensiune pentru a
funcționa. La plăcile Arduino alimentar ea se face fie printr -un cablu USB, fie printr -un
conector de tipul Jack. Placa Arduino UNO, folosită în cadrul acestui proiect, se conectează
la portul USB al calculatorului printr -un cablu de tipul USB A -B. Odată cu alimentarea cu
energie a plăcii de la USB, prin același cablu se poate transfera și codul ce trebuie încărcat
pe placă. Tensiunea de alimentare recomandată pentru această placă trebuie să se încadreze
în plaja de valori 6 -20 V , și deși este permisă depășirea acestei limite, se recomandă a nu
se alimenta cu o tensiune mai mare de 20V .
– Pinii (5V , 3.3V , GND, Analog, Digital, AREF). Pinii de pe placa Arduino reprezintă
modalitățile de conectare cu dispozitive, circuite sau senzori externi acestei plăcuțe. Pinii
plăcuței de dezvoltare Arduino sunt:
o GND – este prescurtarea de la GROUND și reprezintă nivelul de masă al placii.
o Analog (pentru Arduino UNO, A0 -A5) – sunt pini pe care se poate realiza citirea
de la senzori analogici. Pe aceste intrări este prezent un convertor analog -numeric
ce converteșt e semnalul analogic într -un semnal discret, ce poate fi interpretat de
microcontroler
o Digital (pentru Arduino UNO, D0 -D13) – sunt pinii care se pot folosi atât ca intrări
digitale, cât și ca ieșiri digitale. O parte dintre acești pini pot fi folosiți pentr u
modulația în lățime a ieșirilor. În cadrul proiectului, se vor folosi 3 pini digitali.

Facultatea de Inginerie Electrică și Știința Calculatoarelor
Depa rtamentul Automatică și Tehnologia Informației
Automatică și Informatică Aplicată

38 Doi dintre acești pini sunt folosiți pentru controlul servomotoarelor TowerPro
MG995, iar unul este folosit pentru controlul laserului.
o Pinul AREF poate fi folosit pe ntru a schimba sursa de referință internă pentru
comparația pinilor analogici cu o sursă externă de referință (între 0 și 5V).
– Butonul de reset – cu rolul de a reporni atât placa cât și codul încărcat pe placă.
– Ledurile RX și TX sunt ledurile pentru recepț ionare respectiv transmiterea datelor.
– Regulatorul de tensiune – nu este indicat să se opereze cu această componentă, dar când
este necesar, el are rolul de a controla nivelul tensiune de intrare al plăcuței Arduino.
Majoritatea plăcilor Arduino sunt alcă tuite dintr -un microcontroler A VR Atmel pe 8 biti
(ATmega8, ATmega168, ATmega328, ATmega1280, ATmega2560) cu diferite configurații pentru
memoria flash, numărul de pini și alte caracteristici. Pe aceste plăci sunt prezenți fie un singur
rând de pini cu con ectori tip „mama”, fie rânduri duble, deoarece facilitează integrarea acestor
plăci în alte circuite. În acești pini pot fi conectate diferite scuturi sau module. De asemenea, pot
fi adăugate mai multe scuturi, înlănțuindu -se.
Majoritatea plăcilor includ un regulator de tensiune de 5V și un cristal oscilator de 16 MHz.
Microcontrolerele Arduino sunt pre -programate cu un așa numit „boot loader” ce simplifică
operația de încărcare a programelor pe memoria integrată. [21]

4.1.1 Arduino UNO
Arduino UNO dispun e de 14 pini digitali de intrare/ieșire pentru utilizare în circuite
externe, dintre care 6 pot fi folosiți pentru a produce semnale PWM, și 6 intrări analogice care pot
fi folosite de asemenea ca pini digitali de intrare/ieșire, un oscilator cu cuarț de 1 6 MHZ, o
conexiune USB, o mufă de alimentare, o mufă ICSP și un buton de resetare.
Microcontrolerul ATmega328 este un cip microcontroler creat de către Atmel și face parte
din seria de megaA VR. Atmega328 A VR 8-bit este un circuit integrat de înaltă perform anță ce se
bazează pe un microcontroler RISC, cu o memorie cu capacitatea de a citi în timp ce scrie.
În continuare, voi prezenta componentele principale ale acestei plăci. Acestea se pot vizualiza în
figura 4.1.3 și vor fi explicați pe scurt în continuare .
Arduino UNO poate fi alimentat prin intermediul conexiunii USB sau cu o sursă de
alimentare externă. Sursa de alimentare este selectată automat. Alimentarea externă (non -USB)
poate veni fie de la un adaptor AC -la-DC sau baterie. Adaptorul poate fi conec tat printr -un
conector de 2.1mm cu centru -pozitiv. Conectare de la o baterie poate fi realizată conectând la pinii
GND și Vin capetele de la conectorii de alimentare.
Pinii de tensiune și alimentarea sunt după cum urmează:
• Vin: Tensiune de intrare pe placa de dezvoltare atunci când este utilizată o sursă de
alimentare externă (spre deosebire de cei 5 volți de la conexiunea USB sau alte

Facultatea de Inginerie Electrică și Știința Calculatoarelor
Depa rtamentul Automatică și Tehnologia Informației
Automatică și Informatică Aplicată

39 surse de energie stabilizată). Se poate introduce tensiune de alimentare prin
intermediul acestui pin, sau în cazul în care tensiunea de alimentare se face prin
intermediul conectorului de alimentare externă, se poate accesa prin acest pin.
• 5V: Regulator de tensiune utilizat pentru alimentarea microcontrolerului si a altor
componente de pe placa de dezvoltare. Aceasta poate fi alimentată fie de la VIN
printr -un regulator de pe placa de dezvoltare, fie furnizat de către USB sau de o altă
sursă de tensiune de 5V .
• 3V3: O tensiune de 3.3 volți generată de către regulatorul de tensiune de pe placă.
Curentul maxim pe care îl furniz ează este de 50 mA.
• GND: Pinii de masă.

Fig. 4.1.3 Componente principale Arduino UNO .[21]
În continuare, vom discuta despre servomotoarele folosite în acest proiect. Aceste
servomotoare sunt realizate de compania TowerPro și funcționează la o tensiune între 4.8V și 6.6V .
În cadrul proiectului, aceste servomotoare sunt alimentate de la o tensiune de 6V , generată de 4
baterii de tipul AA. În legătură cu partea de control, servomotoarele sunt conectate la placa de
dezvoltare Arduino prin intermediul a două fire. Unul dintre aceste fire este conectat la un pin
digital de ieșire, folosit pentru a îi specifica poziția dorită de ieșire, iar celălalt este conectat la
masă.
Pini digitali
Pini
analogici
Microcontrole
r ATmega328
Pini
ICSP
Mufă USB
Mufă
alimentare
externă
Pini
referință
Buton reset
Pin
alimentare
externă
Pin masă

Facultatea de Inginerie Electrică și Știința Calculatoarelor
Depa rtamentul Automatică și Tehnologia Informației
Automatică și Informatică Aplicată

40 Pinul de control care este conectat la microcontrolerul Arduino este folosit pentru a
comanda motorul prin intermediul modulării de bandă în lățime. Pentru o înțelegere mai bună, voi
prezenta mai întâi câteva considerații generale despre servomotoare.

4.1.2 Servomotoare
Un servomotor reprezintă un actuator rotoric sau liniar cu care se poate realiza controlul
precis al poziției unghiulare sau liniare, a vitezei și a accelerației. El este alcătuit dintr -un motor
căruia ii sunt anexați diferiți senzori pentru feedback. Servomotoarele ca și termen de sine stătător,
nu reprezintă o clasă de motoa re. Aceste motoare sunt potrivite pentru sistemele de reglare în buclă
închisă datorită faptului că nu mai sunt necesari traductori adiționali pentru a detecta poziția, viteza
sau accelerația. Un servomotor este un servomecanism construit în buclă închisă, ce folosește
feedbackul de poziție pentru a îi putea fi controlata mișcarea și poziția finală. [20]
Cel mai simplu servomotor folosește un potențiometru pentru a detecta poziția, iar pentru
comandă folosește un sistem ce poate oferi doar două valori: OPR IT/PORNIT. Acest sistem nu
este foarte eficient și nu este folosit în industrie. Cele mai sofisticate servomotoare folosesc
traductoare incrementale optice pentru a măsura viteza la ieșire și un driver variabil de control al
vitezei. Acestea în combinație cu un algoritm de control PID, realizează comanda de ieșire într -un
timp mult mai scurt și cu un suprareglaj mi mic.
În comparație cu motor pas cu pas, acesta consumă curent doar pentru a ajunge la poziția
dorită, spre deosebire de un motor pas cu pas car e consumă curent tot timpul, chiar și pentru a fi
menținut la o anumită poziție.
Servomotoarele cele mai moderne sunt proiectate pentru a folosi modulul de control
fabricate de un singur producător. Aceste module de control pot fi dezvoltate și în anumite
microcontrolere, în vederea eficientizării costului pentru aplicații foarte mari.
Servomotoarele integrate sunt proiectate în așa fel încât să includă motorul, driverul, traductorul
și electronica asociată într -o singură carcasă.

Facultatea de Inginerie Electrică și Știința Calculatoarelor
Depa rtamentul Automatică și Tehnologia Informației
Automatică și Informatică Aplicată

41
Fig.4.1.4: Servomotoru l TowerPro MG995 .[22]

4.1.3 Servomotorul TowerPro MG995
Servomotorul TowerPro MG995 este un servomotor de mare viteză ce se poate roti
aproximativ 120˚ (60 în fiecare direcție). Angrenajul acestui servomotor este metalic, iar comanda
este digitală, realiz ându -se în PWM. Este foarte stabil, rezistent la șocuri, iar angrenajul este
proiectat cu rulmenți dubli.
Perioada semnalului PWM este de 20 ms, iar comanda lui se realizează între 0.7 ms și 2
ms, unde 0.7 ms reprezintă valoarea pentru maxim dreapta, 2 ms reprezintă valoarea pentru maxim
stânga, iar 1.5 ms reprezintă valoarea pentru poziția de la jumătate. Diagrama de timp cu aceste
valori este prezentată în figura 4.1.5.
Cuplul maxim al acestui motor este de 9.4 kg/cm dacă se alimentează la o tensiune de 4.8V ,
iar în cazul nostru, dacă este alimentat la o tensiune de 6V , va ajunge la un cuplu maxim de 11
kg/cm. Viteza maximă de operare este de 0.2 secunde/ 60˚, în cazul în care este alimentat de la o
tensiune de 4.8V și 0.16 secunde/ 60˚ atunci când este alimentat cu o tensiune de 6V . În ciuda
faptului ca vom alimenta servomotorul la 6V , viteza în cadrul proiectului o vom reduce substanțial
pentru a putea achiziționa cât mai bine informația în cadrul scanării.

Facultatea de Inginerie Electrică și Știința Calculatoarelor
Depa rtamentul Automatică și Tehnologia Informației
Automatică și Informatică Aplicată

42
Fig.4.1.5: Diagramă de timp pentru comanda servomotorului TowerPro MG995 .[22]

4.1.4 Modulul laser
Pentru a genera fasciculul tip linie de la modulul laser a trebuit să modific un laser cu un
fascicul de tip punct cu o diodă de culoare verde, folosind o lentila cilindrică. În acest mod, dintr –
un pu nct, se poate proiecta o linie.
Deoarece laserul provine dintr -un laser normal de tip pointer, acționat manual, a fost nevoie
să se realizeze două operațiuni: să se proiectez un circuit electric separat, pentru controlul acestuia
dintr-un microcontroler și să se înlocuiască lentila laserului cu una cilindrică .
Lentila cilindrică a trebuit să fie adaptată la carcasa laserului, pentru că nu s -a putut înlocui
direct. Astfel, lentila cilindrică a fost pusă în continuarea lentilei laserului pointer pe un sist em cu
filet. Acesta permite rotirea liniei laser (vertical/orizontal/oblic), dar și focalizarea acesteia în
funcție de distanța până la obiect. O reprezentarea a proiecției liniei laser după ce s -a produs
înlocuirea este prezentă în figura 4.1.7
Atât proie ctarea circuitul electric de comandă, cât și testarea și implementarea circuitului
au fost realizate în totalitate de mine. Simularea a fost realizata în programul LTspice IV .
Implementarea a fost realizată pe un cablaj imprimat perforat.
În circuit se folosește un tranzistor cu efect de câmp MOS logic IRLZ44N. Acesta poate fi
comandat pe poartă cu nivelul de tensiune de la un microcontroler Arduino, la tensiunea de 5V
deschizându -se complet și suportând un curent de până la 25A cu radiator.

Facultatea de Inginerie Electrică și Știința Calculatoarelor
Depa rtamentul Automatică și Tehnologia Informației
Automatică și Informatică Aplicată

43 Pentru prot ecția microcontrolerului am folosit un optocuplor 4N35. Acesta are rolul de a
izola optic circuitul prin faptul că din construcția lui folosește o diodă luminiscentă și un
fototranzistor. Astfel în cazul unui supracurent sau supratensiune, pagubele se vor limita în partea
de putere a circuitului, adică partea ce conține laserul optic.

Fig.4.1.6: Circuitul electric folosit pe ntru controlul modulului laser.
Schema electrică folosită pentru controlul modulului laser este prezentată în figura 4.1.6 .
După rea lizarea acestui circuit, am reușit controlul laserului folosind un pin de ieșire digitală de la
microcontrolerul Arduino pentru controlul aprinderii respectiv stingerii laserului.
Dioda laser împreună cu circuitul de control al acesteia, au fost încapsulat e într -o cutie de
plastic și asamblate pe sistemul pan -tilt. Datorită faptului că dioda laser disipa foarte mult căldură,
am ales să folosesc o răcire pasivă pentru aceasta, drept pentru care am folosit un radiator din
aluminiu, pe care l -am adaptat la pri nderea diodei laser. Inițial, această diodă avea tot o răcire

Facultatea de Inginerie Electrică și Știința Calculatoarelor
Depa rtamentul Automatică și Tehnologia Informației
Automatică și Informatică Aplicată

44 pasivă, pe un radiator din cupru, pe care l -am păstrat, atașându -l pe cel din aluminiu de acesta.
Rezultatul se poate vedea în figura 4.1.8 .
Culoarea laserului am ales -o verde deoarece este mai ușor de se gmentat ulterior în
procesare.

Figura 4.1.7 : Exemplu de proiecție a fasciculului de la laser

Fig.4.1.8 : Sistemul de răcire al modulului laser

Facultatea de Inginerie Electrică și Știința Calculatoarelor
Depa rtamentul Automatică și Tehnologia Informației
Automatică și Informatică Aplicată

45 4.1.5 Camera web
Camera web folosită în acest proiect este o cameră marca Creative. Am ales aceas tă
cameră deoarece o aveam disponibilă și pentru că se conectează foarte ușor cu calculatorul , ea
neavând nevoie de un CD cu drivere de instalare.

Fig.4.1.9: Camera web folosită pentru achiziția imaginilor .[22]

Din punctul de vedere al arhitecturii hard ware, produsul este finalizat, direcția de scanare
putând fi controlată atât stânga dreapta, cât și sus jos. Modulul laser poate fi controlat din
microcontrolerul Arduino, iar alimentarea lui cu energie se realizează de la o sursă externă de
tensiune (4 ba terii de tipul AA).
Cele două servomotoare folosite pentru mișcarea sistemului sunt suficient de puternice,
sunt controlate din microcontrolerul Arduino, alimentate de la o sursă externă de tensiune (aceeași
sursă ce alimentează și modulul laser), însă pr ezintă câteva dezavantaje.

Facultatea de Inginerie Electrică și Știința Calculatoarelor
Depa rtamentul Automatică și Tehnologia Informației
Automatică și Informatică Aplicată

46
Fig.4.1.10 : Ansamblu de scanare imagini în vederea reconstrucției 3D
Dezavantajele sunt următoarele:
• Deoarece se prezintă necesitatea sistemului de a se roti cu o viteză unghiulară
relativ mică, iar servomotoarele nu au un con troler variabil pentru comandarea
motoarelor, deplasarea acestora se faci în „trepte”, iar la un moment dat, pot apărea
anumite trepidații. Aceste trepidații pot genera anumite zgomote în cadrul
reconstrucției. Din nefericire, pentru a elimina aceste zgomo te, trebuie înlocuite
servomotoarele cu altele mai performante, care prezintă un controler variabil pentru
alimentarea motorului sau înlocuite cu motoare de curent continu, la care să se
aplice o tensiune variabilă la borne, prin intermediul pinilor de PWM de la Arduino
și să se monteze suplimentar un traductor de poziție.
• Suportul servomotoarelor pan -tilt este unul realizat din aluminiu, care nu prezintă
o rigiditate prea ridicată. Prin urmare, datorită greutății modulului laser și
trepidațiilor produse d e servomotoare, acesta se poate deforma, lucru ce poate
afecta reconstrucția tridimensională.
• Partea electrică nu este protejată, fapt ce poate conduce la scurtcircuite în cadrul
transportului (sistemul se dorește a fi unul relativ portabil)
• Suportul came rei și al laserului este realizat dintr -un plastic nu foarte rigid. Prin
urmare, odată cu trecerea timpului acesta se poate deforma, generând erori
geometrice în cadrul reconstrucției.

Facultatea de Inginerie Electrică și Știința Calculatoarelor
Depa rtamentul Automatică și Tehnologia Informației
Automatică și Informatică Aplicată

47 Ansamblul până în momentul actual este prezentat în figurile 4.1.10 și 4.1.11.

Fig.4.1.11: Ansamblu de scanare imagini î n vederea reconstrucției 3D (2)

4.2 Arhitectura software
Funcționarea generală a proiectului, din punctul de vedere al software -ului este
următoarea: Obiectul este înregistrat video cu ajutorul camerei w eb. Sursa de iluminare activă
provine de la laser, iar ansamblul se rotește cu ajutorul servomotoarelor. După achiziția video,
rezultatul obținut este preprocesat pentru a obține un videoclip binar, în care linia rezultata
intersectării planului camerei we b cu planul generat de laser să fie albă, iar restul să fie negru.
După această preprocesare, videoclipul rezultat este folosit în programul Matlab pentru generarea
informației tridimensionale despre obiectul original achiziționat.
Din aceste lucruri, put em distinge trei părți ale aplicației software: o parte din cod scrisă
în limbajul C++, pentru achiziția și procesare videoclipului ce conține obiectul, o din cod scrisă în
limbajul C, scrisă în software -ul Arduino IDE, pentru controlul servomotoarelor și al fasciculului
laser, iar a treia parte din program scrisă în Matlab, program ce preia informațiile de la linia laser
rezultată și generează informațiile tridimensionale despre obiect. V om descrie mai detaliat aceste
părți din program în cele ce urmează.

Facultatea de Inginerie Electrică și Știința Calculatoarelor
Depa rtamentul Automatică și Tehnologia Informației
Automatică și Informatică Aplicată

48 4.2.1 Program Arduino
Programul pe microcontrolerul dezvoltat de Arduino se încarcă cu ajutorului software -ului
de dezvoltare open -source Arduino IDE. Acesta se încarcă cu ajutorul unui cablu USB,
specificându -se portul de comunicație și tipul de plăcuță folosit.
În programul dezvoltat pentru Arduino a fost integrată librăria „Servo.h”. Această librărie
a fost necesară pentru controlul celor două servomotoare.
Schema conexiunilor electrice este prezentată în figura 4.2.1 și este realizată în programul
Fritzing.

Fig.4.2.1 Conexiunile electrice ale componentelor din proiect
Codul încărcat pe plăcuța Arduino este unul relativ simplu. Comandarea servomotoarelor
se realizează prin conexiune serial , la o rata de transfer de 9600 bps, din programul C++.
Prog ramul primește o valoare reprezentând valoare în microsecunde ce trebuie scrisă la semnalul
PWM al servomotoarelor. Acesta returnează o valoare de confirmare, tot pe serial, a ultimei
comenzi. Comanda pentru modulul laser se realizează în mod automat atunc i când servomotoarele
sunt comandate, deoarece comandarea acesteia nu este necesară și în alte cazuri.

4.2.2 Program C++
Programul dezvoltat în limbajul C++ a fost realizat în programul Microsoft Visual Studiu.
Acest program folosește librăria OpenCV , cu ajutorul căreia realizează captura video a obiectului
ce urmează a fi reconstruit, după care procesează acest videoclip pentru a segmenta linia laser.
Progr amul se folosește atât de interacțiunea utilizatorului cu consola cât și de interfața cu

Facultatea de Inginerie Electrică și Știința Calculatoarelor
Depa rtamentul Automatică și Tehnologia Informației
Automatică și Informatică Aplicată

49 utilizatoru l grafică atunci când se produce captura. Ca și structură, aplicația pentru achiziționarea
și preprocesarea videoclipului cu obiectul sau obiectele ce urmează a fi reconstruite este
următoarea: Programul este împărțit în cinci clase. Una dintre aceste clas e se ocupă cu
comunicarea cu programul de pe plăcuța Arduino descris în subcapitolul 4.2.1. Celelalte clase se
ocupă cu achiziția și procesarea imaginilor. La rularea inițială a programului se afișează rezoluția
stabilită pentru camera web. Pentru ca progr amul să deschidă fluxul video, trebuie ca utilizatorul
să specific e exclusiv acest lucru , prin apăsarea unei taste. Acest lucru este prezentat în figura 4.2.2.

Fig.4.2.2 Execuția inițială a programului
Acest meniu este destinat vizualizării obiectelor di n raza de acțiune a camerei și eventual
o repoziționare fizică a acesteia. După deschiderea fluxului video, utilizatorul poate intra în meniul
de scanare a obiectelor, tot prin apăsarea unei taste. Exemplul este arătat în figura 4.2.3

Fig.4.2.3 Meniul d e pre vizualizare al fluxului video de la camera web

Facultatea de Inginerie Electrică și Știința Calculatoarelor
Depa rtamentul Automatică și Tehnologia Informației
Automatică și Informatică Aplicată

50 În cadrul meniului pentru înregistrarea unei scanări pentru obiecte se regăsesc mai multe
opțiuni.
Pentru început, se stabilește conexiunea cu microcontrolerul Arduino, respectiv cu
motoarele și modulul laser. După ce conexiune a fost stabilită, se va afișa un mesaj, indicând acest
lucru. În cazul în care nu se poate stabili conexiunea, se va afișa un mesaj în acest sens. După
realizarea conexiunii, utilizatorului i se cere sa introducă punctul inițial de scanare. Acest punct
reprezintă microsecundele necesare motoarelor în programul Arduino. Plaja acestor valori este
între 3000 și 5000, unde 3000 reprezintă valoarea pentru punctul maxim din dreapta, iar 5000
reprezintă valoarea pentru punctul maxim din st ânga. După introducerea acestor date, scanarea
obiectelor va începe de la punctul final introdus la punctul inițial, iar fișierul video va fi salvat cu
o denumire prestabilită în directorul unde se găsește programul. La final, în consolă se va afișa
numele fișierului nou salvat, punctul inițial și final introduse și unghiul pe care l -a realizat
ansamblul în această scanare. Unghiul de scanare este foarte important deoarece ajută la
reconstrucția corectă a obiectelor. Fără această valoare a unghiului, obiect ele reconstruite ar putea
fi deformate, acestea fiind prea comprimate sau prea expandate. Un exemplu al acestei porțiuni
din programul realizat în limbajul C++ este prezentat în figura 4.2.4

Figura 4.2.4: Scanarea obiectelor și afișarea informațiilor din consolă
După salvarea fișierului, acesta va fi folosit în scriptul pentru reconstrucție realizat în
programul Matlab.

4.2.3 Program Matlab
Programul Matlab conține o funcție ce utilizează trei parametri pentru funcționare. Această
funcție a fost dezvolta tă inițial de Kenneth Jensen și este de tipul open -source. Funcția a fost
modificată pentru a putea fi adaptată sistemului curent și a fost actualizată folosind librării
actualizate din Matlab. Au fost păstrate doar câteva formule pentru generarea coordona telor reale
a obiectul ce urmează a fi reconstruit. Primul parametru este numele fișierului ce conține

Facultatea de Inginerie Electrică și Știința Calculatoarelor
Depa rtamentul Automatică și Tehnologia Informației
Automatică și Informatică Aplicată

51 informația despre obiectul tridimensional scanat. Al doilea parametru este unghiul de scanare pe
care l -a realizat ansamblul cameră -laser și care a fost afișat la finalul programului C++. Ultimul
parametru reprezintă numărul cadrului pe care se dorește a se face calibrarea.
Calibrarea este constituită din trei etape:
Prima etapă este stabilirea liniei de bază a laserului și respectiv rotirea imaginii astf el încât
linia de bază a laserului să fie verticală. Acest lucru se realizează prin trasarea unei linii de -a lungul
linie laser. Rezultatul acestei etape este rotirea imaginii, astfel încât linia laserului este dreaptă.
A doua etapă este reprezentată de lo calizarea centrului liniei de bază a laserului. În fereastră
va fi afișată imaginea rotită anterior și se va putea selecta cu ajutorul cursorului acest centru. După
selectarea lui, se va genera o linie verticală ce trece prin acest punct.
A treia etapă es te selectarea regiunii de interes pentru reconstrucție. Utilizatorul va avea
posibilitatea de a selecta doar o parte din imagine dacă dorește acest lucru sau poat e selecta toată
fereastra în vederea reconstrucției. Desenarea acestei regiuni de interes se r ealizează cu ajutorul
unui dreptunghi ce se trasează folosind metoda drag & drop.
După efectuarea acestor etape de calibrare, începe procesul de reconstrucție. Se începe citirea
fiecărui cadru al filmării. Pentru fiecare cadru se realizează următoarele op erațiuni:
• Citirea cadrului curent
• Convertirea cadrului într -o imagine binară, în care linia laserului este albă, iar restul
imaginii este negru
• Rotirea imaginii cu unghiul calculat din imaginea de calibrare
• Selectarea din imagine doar a regiunii de interes (calculată din imaginea de calibrare)
• Filtrarea cadrului cu ajutorul funcției filter2 din Matlab , un filtru bidimensional cu un
threshold stabilit anterior la o valoare de 0.2
• Detectarea intensității maxime pe fiecare rând din cadru și localizarea acestei a.
• Dacă se detectează linia laser, se folosește funcția interp1 din Matlab pentru a umple toate
spațiile libere din cadrul acestei linii și se stochează valorile găsite într -un vector
• Se repetă pașii anteriori până se citește și ultimul cadru.
• Se convertes c valorile obținute pentru linia laser în valori reale, folosind unghiul dintre
cameră și laser.
• Se generează coordonatele suprafeței folosind valorile reale ale localizării liniei laser și
unghiul pe care l -a efectuat ansamblul cameră -laser în momentul s canării
• Se generează suprafața folosind funcția mesh din cadrul Matlab
• Se salvează vectorii ce au fost folosiți pentru generarea suprafeței într -un fișier de tipul
.mat pentru a putea fi accesate sau modificate ulterior.

Facultatea de Inginerie Electrică și Știința Calculatoarelor
Depa rtamentul Automatică și Tehnologia Informației
Automatică și Informatică Aplicată

52 4.3 Rezultate obținute
Rezultatele reconstrucției sunt satisfăcătoare, având în vedere că am avut foarte multe
zgomote mecanice datorate servomotoarelor folosite. Obiectul original este prezentat în figura
4.2.5, iar rezultatele reconstrucției se pot vizualiza în figurile 4.2.6, 4.2.7 și 4 .2.8 sub diferite
unghiuri.

Fig.4.2.5: Obiectele ce urmează a fi reconstruite.

Fig.4.2.6 : Rezultat obținut reconstrucție cană + router ( 1)

Facultatea de Inginerie Electrică și Știința Calculatoarelor
Depa rtamentul Automatică și Tehnologia Informației
Automatică și Informatică Aplicată

53
Fig.4.2.7: Rezultat obținut reconstrucție cană + router ( 2)

Fig.4.2.8 : Rezultat obținut reconstrucție cană + router ( 3)

Facultatea de Inginerie Electrică și Știința Calculatoarelor
Depa rtamentul Automatică și Tehnologia Informației
Automatică și Informatică Aplicată

54 4.4 Dezvoltări ulterioare
Proiectul curent și -a atins unul din obiectivele pentru care a fost proiectat: acela de a
achiziționa și reconstrui obiecte tridimensionale. Totuși, se mai pot implementa diverse lucruri
acestuia.
Ca și dezvoltări ulterioare, aș dori să montez acest sistem pe o platformă mobilă ce poate
fi controlată de la distanță și să realizez scanarea și reconstrucția unei încăperi, în vederea
modelării acesteia sau în vederea realizării unui tur virtual.
O altă dezvoltare pe c are doresc să o realizez o reprezintă înlocuirea sistemului de rotație
al ansamblului cameră -laser cu unul mai performant, pentru a elimina zgomotele introduse de
vibrațiile acestuia și pentru a realiza o reconstrucție mai precisă.
O altă implementare ce doresc să o realizez este îmbunătățirea metodelor de procesare al
imaginii cu ajutorul librăriei OpenCV , pentru a putea segmenta linia laser chiar și atunci când este
mai dificil de distins din cauza nivelului ridicat de lumină ambientală.

4.5 Concluzii
Acest proiect folosește tehnici matematice de triangulație pentru a reconstrui informații
despre obiecte reale în mediul virtual.
Pe parcursul acestui proiect am folosit diferite programe și tehnologii învățate în cadrul
Facultății de Inginerie Electrică ș i Știința Calculatoarelor pe care le -am aprofundat foarte mult.
Printre programele utilizate se numără: Microsoft Visual Studio, Matlab, Arduino IDE. De
asemenea, am aprofundat librăria OpenCV , studiată la facultate în cadrul cursului de Sisteme de
Vedere Artificială.
Apreciez că proiectul și -a atins unul de scopurile lui, acela de a reconstrui obiect e de
dimensiuni mici, în ciuda faptului că pe parcursul lui am întâlnit o mulțime de dificultăți, în special
în ce privește dezvoltarea mecanică a lui, dar și piedici în calea procesării și extragerii de informații
tridimensionale.
În viitor, proiectul poate fi dezvoltat fără anumite limite impuse, datorită domeniilor
numeroase în care poate fi aplicat.

Facultatea de Inginerie Electrică și Știința Calculatoarelor
Depa rtamentul Automatică și Tehnologia Informației
Automatică și Informatică Aplicată

55 Bibliografie :
[1] ***, https://en.wikipedia.org/wiki/Camera_resectioning , Calibrare camer ă. Algoritmi
[2] ***, https://photographylife.com/what -is-distortion , Distorsiuni
[3] ***, https://goo.gl/pCR7ZF , Imagini distorsiuni lentil ă
[4] ***, https://www.mathworks.com/help/vision/ug/camera -calibration.html , Calibrare ca meră
[5] ***, Ryoichi Ishikawa, Menandro Roxas, Yoshihiro Sato, Takeshi Oishi, “A 3D Reconstruction
with High Density and Accuracy using Laser Profiler and Camera Fusion System on a Rover”,
Institute of Industrial Science, The University of Tokyo Komaba, M eguro, Tokyo, Japan
[6] Di Lu, “3D Scanner using Line Laser”, Rensselaer Polytechnic Institute
[7] Rubén Usamentiaga, Julio Molleda, Daniel F. Garcia, “Structured -Light Sensor Using Two
Laser Stripes for 3D Reconstruction without Vibrations”, publicată onl ine, 2014 Oct.
[8] Theo Moons, Luc Van Gool, Maarten Vergauwen, “3D Reconstruction from Multiple Images.
Part 1: Principles”, Now Publishers Inc, 2009
[9] ***, http://rovis.unitbv.ro/co urses/sva/Curs_ 07_SV A_ 2016 .pdf, Sisteme de vedere artificială
[10] ***, http://rovis.unitbv.ro/courses/sva/Curs_ 06_SV A_ 2016 .pdf, Sisteme de vedere artificială
[11] ***, https://en.wikipedia.org/wiki/Triangulation , Triangulaț ie
[12] ***, https://goo.gl/s 3FXLn , Citirea și scrierea de imagini și video
[13] Benjamin Pitzer, “Automatic Reconstr uction of 3D Models”, KIT Scientific Publishing, 2015
Martie
[14] ***, https://goo.gl/BcwMZR , Structuri de bază
[15] ***, https://goo.gl/as 5cjJ, Transformă ri de imagine
[16] ***, https://goo.gl/229hQf , Operaț ii cu matrice
[17] ***, https://goo.gl/JHaHbx , Citirea ș i scrierea de imagini
[18] ***, https://goo.gl/LtN 3tn, Interfața cu utilizatorul
[19] Douglas Lanman, Gabriel Taubin, “Build your own scanner: 3D Photography for Beginners”,
SIGGRAPH 2009 , 2009 August
[20] ***, https://en.wikipedia.org/wiki/Servomotor , Servomotoare
[21] ***, https://en.wikipedia.org/wiki/Arduino , Microcontrolerul Arduino
[22] ***, https://www.google.ro/imghp
[23] ***, http://opencv.org/about.html , Informații generale despre librăria OpenCV

Facultatea de Inginerie Electrică și Știința Calculatoarelor
Depa rtamentul Automatică și Tehnologia Informației
Automatică și Informatică Aplicată

56 Rezumat
Scopul acestui proiect este de a realiza reconstrucția obiectelor tridimensionale și de a
putea fi vizualizate și modelate în mediul virtual. În această lu crare sunt prezentate diferite tehnici
de reconstrucție ale obiectelor , iar metoda folosită în proiect este mai detaliată. Proiectul îmbină
diferite tehnologii și limbaje de programare, necesare realizării acestuia .
Sistemul se folosește de un ansamblu cam eră-laser realizat cu scopul de a demonstra
funcționalitatea reconstrucției 3D, folosind o metoda de achiziție cu lumină activă. Acționarea
sistemului este realizată de două servomotoare controlate cu ajutorul unui microcontroler, ce are
programul sc ris în limbajul de programare C. A chiziți a se realizează cu ajutorul unei aplicații
dezvoltate în limbajul de programare C++ și de librăria OpenCV . De asemenea, în cadrul acestei
aplicații se realizează și o preprocesare a imaginilor achiziționare, pentru a segm enta linia de la
laser. În final, ultima parte a acestui program, este realizată în Matlab, această parte ocupându -se
de reconstrucția obiectelor.
Scopul inițial al proiectului a fost îndeplinit în cadrul lucrării, dar există multe alte
posibilități de de zvoltare al acestuia. Pe lângă acest scop, pot să spun și că am dobândit numeroase
cunoștințe, cu privire la domeniul procesării de imagine și de vedere artificială.

Facultatea de Inginerie Electrică și Știința Calculatoarelor
Depa rtamentul Automatică și Tehnologia Informației
Automatică și Informatică Aplicată

57 Summary
The goal of this project is to reconstruct three -dimensional objects and to visu alize and
model these in the virtual space. This paper present different techniques of reconstruction for the
objects, and the method used for this project is more elaborated. The project combines different
technologies and programming languages, required to accomplish this project.
The system uses a camera -laser ensemble made with the purpose to demonstrate the
functionality of 3D reconstruction, using active lightning as the method of image acquisition. The
system drive contains two servomotors controlled with a microcontroller which have the program
written in C programming language. Acquisition is made with an application developed in C++
programming language and OpenCV library. Withal, within this application, there is made a
preprocessing of the procur ed images, to extract the laser line from it. Finally, the last part of this
program, is made in Matlab software, this part being responsible for object reconstruction.
The initial goal of this project was accomplished within this paper, but there are many more
possibilities of further developments. Besides this goal, I can say that I have gained many
knowledge, regarding image processing and artificial vision area.

Similar Posts