7. Alinierea robustă a densităţilor de puncte 3D Măsurarea distanţei dintre diferite forme geometrice 3D Estimarea rotaţiei şi a translaţiei optime în

Documente similare
4. Detectarea cantelor Calculul gradientului într-o imagine Detectorul de cante Canny Transformata Hough În această lucrare vor fi studiate metode de

Procesarea Imaginilor Laborator 3: Histograma nivelurilor de intensitate 1 3. Histograma nivelurilor de intensitate 3.1. Introducere În această lucrar

Limbaje de Programare Curs 8 – Fisiere

LUCRAREA 8 PROGRAMAREA NELINIARĂ ÎN REZOLVAREA PROBLEMELOR DIN ENERGETICĂ. METODE DE ORDINUL Aspecte generale Programarea neliniară are o foart

Microsoft PowerPoint - Curs_SDA_9_RO_2019_v2.pptx

Laborator 2 Incompatibilităţi/Diferenţe între C şi C++ Completări C++ Supraîncărcarea (redefinirea) numelui de funcţii În C nu este permisă existenţa

SUBPROGRAME

Top

Procesarea Imaginilor - Laborator 1: Introducere în utilizarea bibliotecii OpenCV 1 1. Introducere în utilizarea bibliotecii OpenCV 1.1. Introducere S

Microsoft Word - 2 Filtre neliniare.doc

C10: Teoria clasică a împrăștierii Considerăm un potențial infinit în interiorul unui domeniu sferic de rază a și o particulă incidentă (Figura 1) la

Limbaje de Programare Curs 6 – Functii de intrare-iesire

CURBE BÉZIER În CAGD se utilizează adesea curbele polinomiale, adică acele curbe definite de o parametrizare polinomială: C : [a, b] R 3 C(t) = (x(t),

METODE NUMERICE ÎN INGINERIE

Microsoft Word - Raspunsul la niste provocari. Partea III..doc

A.E.F. - suport laborator nr.10 sem.ii Analiza stării de contact între elemente 3D În acest laborator sunt atinse următoarele aspecte: analiza contact

2

PAS cap. 2: Reprezentări rare p. 1/35 Prelucrarea avansată a semnalelor Capitolul 2: Reprezentări rare Bogdan Dumitrescu Facultatea de Automatică şi C

Microsoft Word - CarteC.doc

Pachete de lecţii disponibile pentru platforma AeL

Calcul Numeric

Cursul 12 (plan de curs) Integrale prime 1 Sisteme diferenţiale autonome. Spaţiul fazelor. Fie Ω R n o mulţime deschisă şi f : Ω R n R n o funcţie de

Programarea şi utilizarea calculatoarelor

Paradigme de Programare

Universitatea Politehnica din Bucureşti 2019 Disciplina: Geometrie şi Trigonometrie G1 * Varianta A 1. Ştiind cos x = 3 2, atunci sin2 x

Distanţa euclidiană (indusă de norma euclidiană) (în R k ). Introducem în continuare o altă aplicaţie, de această dată pe produsul cartezian R k XR k,

Probleme rezolvate de fizică traducere de Nicolae Coman după lucrarea

Diapositive 1

Aproximarea functiilor prin metoda celor mai mici patrate

Slide 1

Limbaje de programare Pointeri. Alocare dinamică (continuare) 26 noiembrie 2012

Microsoft PowerPoint - Curs_SDA_10_RO_2019_v1.pptx

Gheorghe IUREA Adrian ZANOSCHI algebră geometrie clasa a VII-a ediţia a V-a, revizuită mate 2000 standard EDITURA PARALELA 45 Matematică. Clasa a VII-

Slide 1

E_d_Informatica_sp_MI_2015_bar_02_LRO

Microsoft Word - Algoritmi genetici.docx

Microsoft PowerPoint - Curs_SDA_4_RO_2019_v2.pptx

Microsoft PowerPoint - ImplementareLimbaj [Read-Only] [Compatibility Mode]

Tiberiu Trif Analiză matematică 2 Calcul diferențial și integral în R n

Cuantizare Vectoriala.doc

Structuri de date pentru partiţii de mulţimi O partiţie finită a unei mulţimi nevide S este o mulţime finită de submulţimi ale lui S: {S 1, S 2,..., S

Capitole Speciale de Informatică Curs 4: Calculul scorurilor în un sistem complet de extragere a informaţiilor 18 octombrie 2018 Reamintim că în cursu

DAN LASCU ADRIANA-LIGIA SPORIŞ ANDA OLTEANU PAUL VASILIU MATEMATICĂ. CULEGERE DE PROBLEME TIP GRILĂ PENTRU ADMITEREA ÎN ACADEMIA NAVALĂ MIRCEA CEL BĂT

1. Operatii cu matrici 1 Cerinte: Sa se realizeze functii pentru operatii cu matrici patratice (de dimensiune maxima 10x10). Operatiile cerute sunt: A

Noțiuni matematice de bază

Object Oriented Programming

Algebra si Geometri pentru Computer Science

G.I.S. Curs 3

Slide 1

Microsoft Word - DCE - lucrarea 5.doc

Microsoft Word - L_printare

MergedFile

PPSD

Cursul 13 Mulţimi Julia Fie f : C C o funcţie complexă şi fie f n = f f f iterata de ordin n a lui f. Peste tot în continuare vom presupune că f este

FIŞA DISCIPLINEI 1. Date despre program 1.1 Instituţia de învăţământ superior Universitatea Alexandru Ioan Cuza din Iaşi 1.2 Facultatea Facultatea de

E_d_Informatica_sp_SN_2014_bar_10_LRO

Calcul Numeric

Microsoft Word - PI-L7r.doc

Tablouri unidimensionale Problema 1 Să se determine mulţimea cifrelor unui număr natural n > 0, dat. Exemplu: n= Cifre = {1,2,3,7} Se cere să s

Cursul 1 1. Introducere Corpul numerelor complexe Dezvoltarea istorică a gândirii matematice a urmărit îndeaproape evoluţia ideii de număr. Această ev

Microsoft Word - c6.doc

CURS

Laborator 3

GHERCĂ MAGDA CASA CORPULUI DIDACTIC BRĂILA PORTOFOLIU EVALUARE INFORMATICĂ ȘI TIC PENTRU GIMNAZIU CLASA A V-A Neamț SERIA 1 GRUPA 1 CURSANT: GHERCĂ G

Probleme proiect TP BITPERM Implementați un algoritm care citește de la intrarea standard două numere naturale și scrie la ieșirea standard da

MergedFile

A.E.F. - suport laborator nr.8 sem.ii Analiza structurală la flambaj În acest laborator sunt atinse următoarele aspecte: modalitatea de analiză la fla

-

ALGORITHMICS

OPERATII DE PRELUCRAREA IMAGINILOR 1

L7

Document2

Paradigme de programare

Microsoft Word - Matematika_kozep_irasbeli_javitasi_0911_roman.doc

A.E.F. - suport laborator nr.5 sem.ii Analiza suprafețelor prin utilizarea elementelor 2D În acest laborator sunt atinse următoarele aspecte: realizar

Examenul de bacalaureat 2012

Examenul de bacalaureat 2012

Propunator: Morar Florin Colegiul National Silvania Zalau Discipina: Informatica Nivel liceal, cls. XII 1.Să se scrie în limbajul C/C++ definiţia comp

Lucrarea 7 Filtrarea imaginilor BREVIAR TEORETIC Filtrarea imaginilor se înscrie în clasa operaţiilor de îmbunătăţire, principalul scop al acesteia fi

Fizica fluidelor Cursul 5

Modelarea si Simularea Sistemelor de Calcul

Lucrarea nr. 4 - Algoritmi de sortare şi ordonare Breviar teoretic Un algoritm de sortare este o metoda prin care se aranjează elementele unui tablou

Slide 1

Analiză statică Analiza fluxului de date 23 octombrie 2014

Dorel LUCHIAN Gabriel POPA Adrian ZANOSCHI Gheorghe IUREA algebră geometrie clasa a VIII-a ediţia a V-a, revizuită mate 2000 standard EDITURA PARALELA

A.E.F. - suport laborator nr.7 sem.ii Utilizarea rețelelor de tip 1D & 2D În acest laborator sunt atinse următoarele aspecte: conectarea unui element

Microsoft Word - lab4.doc

RecMat dvi

Teoreme cu nume 1. Problema (Năstăsescu IX, p 147, propoziţia 5) Formula lui Chasles Pentru orice puncte M, N şi P avem MN + NP = MP.

Interfețe și Protocoale de Comunicații Arduino-Port Paralel Arduino. Laborator 1- Portul Paralel 1 Caracteristici generale Arduino UNO este o placă de

ETTI-AM2, , M. Joița & A. Niță Notițe de Adrian Manea Seminar 11 Transformarea Laplace Aplicații Transformarea Z Ecuații și sisteme diferenți

Secţiunea 5-6 începători Concurs online de informatică Categoria PROGRAMARE PROBLEMA puncte PERIODIC Se citește un număr natural nenul N. Se ump

Platformăde e-learning și curriculăe-content pentru învățământul superior tehnic Sisteme de operare 13. Planificarea proceselor

PROIECT DIDACTIC DATE DE IDENTIFICARE Data: Școala : Școala Gimnazială Grigore Moisil Ploiești Clasa: a VI-a Profesor: Ilie Oana Magdalena Disciplina:

-

CASA CORPULUI DIDACTIC BRAILA PROGRAM DE FORMARE INFORMATICA SI TIC PENTRU GIMNAZIU CLASA A V-A SERIA 1 GRUPA 2 CURSANT: TIMOFTI V. AFRODITA COLEGIUL

Logică și structuri discrete Limbaje regulate și automate Marius Minea marius/curs/lsd/ 24 noiembrie 2014

Laborator 1 suport teoretic Mediul de dezvoltare Eclipse GLOSAR - Aplicaţie: program obţinut în urma aplicării operației BUILD asupra unui proiect (ve

Laborator 9: Fire de execuţie Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 20 noiembrie 2011

PROGRAMA CONCURSULUI NAŢIONAL

Transcriere:

7. Alinierea robustă a densităţilor de puncte 3D Măsurarea distanţei dintre diferite forme geometrice 3D Estimarea rotaţiei şi a translaţiei optime între nori de puncte Prezentarea generală a algoritmului ICP Alinierea parţială şi globală a formelor utilizându-se ICP În lucrarea de față se vor studia metode de măsurare a distanțelor în interiorul norilor de puncte 3D, estimarea rotației și translației dintre diferite densități de puncte 3D, cât și potrivirea a două densități de puncte utilizându-se algoritmul Iterative Closest Point (ICP). 7.1 Baze teoretice Cunoscându-se doi nori de puncte, M și P, fiecare reprezentat în sisteme de coordonate proprii, se pune problema identificării transformatei de coordonate optime (rotație și translație) care să permită alinierea lui M relativ la P. Metoda ICP [?? ] prezintă o soluţie eficientă şi rapidă pentru o astfel de problemă. Aceasta, utilizează un simplu proces de minimizare a distantei Euclidiene dintre punctele norului, cu scopul de a se aduce modelele considerate într-un sistem de coordonate comun. Această abordarea nu este dependentă de modul de reprezentare al formelor, permiţând astfel alinierea unui număr mare de tipuri de date geometrice [? ]. Dintre acestea se pot menţiona: ˆ seturi de puncte; ˆ segmente de dreaptă; ˆ curbe implicite: g(x, y, z) = 0; ˆ curbe parametrizate: (x(u), y(u), z(u)); ˆ seturi de triunghiuri (suprafeţe reprezentate prin intermediul unui set de triunghiuri(mesh)); ˆ suprafeţe implicite: g(x, y, z) = 0; ˆ suprafeţe parametrizate: g(x(u, v), y(u, v), z(u, v)). Din punct de vedere al aplicabilităţii, algoritmul poate fi utilizat cu succes la fuzionarea diferitelor perspective ale unui obiect. Scopul unui astfel de proces de fuzionare poate fi fie de a se obţine un volum rigid, fie de a se compara două sau mai multe scene între ele (pentru determinarea similitudinilor sau a diferenţelor dintre scene), fie de stabilire a congruenței dintre două sau mai multe forme (identificarea formelor echivalente), sau de a se estima mişcarea în spațiu a senzorului video. Considerându-se un caz concret, metoda ICP poate furniza o măsură de confidență a apartenenţei unei suprafeţe percepute (de exemplu, o parte a corpului uman) faţă de o suprafaţă de referinţă (de exemplu, întreg corpul uman). Acest proces poartă numele de potrivire. În exemplul prezentat se recurge la o potrivire locală, deoarece suprafața percepută corespunde doar unei anumite regiuni din suprafața de referință. Similar, poate exista și o

2 ALINIEREA ROBUSTĂ A DENSITĂŢILOR DE PUNCTE 3D potrivire globală, în care alinierea se produce între două suprafețe cu structură constructivă similară, ca și dimensiune (de exemplu, două siluete ale aceleiași căni). Principial, cele 6 grade de libertate necesare unui proces de potrivire, 3 pentru rotație și 3 pentru translație, sunt determinate utilizându-se corespondențe de tipul celui mai apropiat vecin. 7.1.1 Măsurarea distanţei dintre diferite date geometrice Identificarea celui mai apropiat vecin se realizează diferit pentru fiecare tip de dată, de natură geometrică. Se consideră un nor P format din N p puncte 3D, notate cu p i : P = {p i }, unde i = 1,... N p, şi un nor M format din N m puncte 3D, notate m j : M = {m j }, unde j = 1,... N m. Distanţa Euclidiană dintre punctele celor doi nori se determină după cum urmează: d(r 1, r 2 ) = r 1 r 2 2 = (x 2 x 1 ) 2 + (y 2 y 1 ) 2 + (z 2 z 1 ) 2, (7.1) unde, r 1 (x, y, z) și r 2 (x, y, z) sunt două puncte oarecare aparţinând norilor M și P, iar d este distanța Euclidiană dintre puncte. Distanța dintre punctul m M și cel mai apropiat punct de pe suprafața P se calculează folosindu-se următoarea ecuație: d(m, P ) = min d(m, p i ). (7.2) i 1,...N p Cel mai apropiat punct p i P satisface egalitatea d(m, p i ) = d(m, P ). 7.1.2 Estimarea rotaţiei şi a translaţiei optime între nori de puncte Pe lângă procedura prezentată anterior, pentru estimare a celui mai apropiat vecin, metoda ICP mai implică utilizarea unui proces de transformare inițială a datelor geometrice. Considerându-se spațiul tridimensional, identificarea rotației și a translației se poate realiza eficient utilizându-se vectorii quaternion ( q). În spațiul cu 2 sau 3 dimensiuni vectorii quaternion reprezintă o alternativă eficientă a unghiurilor Euler. Principalul lor avantaj este reprezentat de simplitatea reprezentării lor, cât și timpul de calcul redus [? ]. Utilizându-se unghiurile Euler, rotația unui corp poate fi obținută prin multiplicarea a trei rotații, câte una pentru fiecare unghi Euler. Utilizându-se quaternionul, rotația se obține într-o singură etapă, care înglobează deja funcțiile trigonometrice sin și cos. Totodată, conversia din quaternion într-o matrice de rotație este eficientă. În această lucrare, va fi utilizată o soluție simplă pentru determinarea rotației și translației, descrisă de Horn în [? ]. Algoritmul iterativ de aliniere ICP urmărește mutarea (înregistrarea) unei suprafețe M (suprafață transformată) cu scopul de a o suprapune, într-o manieră ideală, peste o suprafață de referință P. N m și N p reprezintă numărul de puncte ce descriu suprafețele considerate. Distanța metrică d, măsurată între punctele individuale m i și suprafața P, se poate descrie astfel: d(m, P ) = min p m. (7.3) p P Punctul din P care satisface condiția de cel mai apropiat vecin se notează cu y. Acesta trebuie să respecte condiţia d(m, y) = d(m, P ), unde y P. Din punctul de vedere al intervalului de calcul, identificarea lui y se realizează în maxim O(N p ), iar timpul total (a tuturor punctelor din M) este reprezentat de O(N m N p ). Cu toate acestea, timpul de calcul estimat este O(log(N p ) log(n p )). Fie Y un vector care conţine cele

Baze teoretice 3 mai apropiate puncte și C operatorul de cel mai apropiat punct, atunci se poate considera: Y = C(M, P ). (7.4) Cunoscând vectorul celor mai apropiate puncte Y, alinierea celor două suprafețe, utilizând metoda celor mai mici pătrate, se calculează după cum urmează: ( q, d) = Q(M, Y ). (7.5) În continuare, setul de puncte M este actualizat utilizând afirmația M = q(m). 7.1.3 Prezentarea generală a algoritmului ICP Fiind cunoscute aspectele descrise anterior, algoritmul de aliniere ICP poate fi descris, pe scurt, după cum urmează: ˆ se definesc datele de intrare sub forma a doi nori de puncte. Se notează cu M norul translatat și cu P norul de referință. Dimensiunile celor doi nori sunt N m și N p ; ˆ se realizează iniţializarea iteraţiilor din algoritm, prin setarea M 0 = M, q 0 = [1.0, 0.0, 0.0, 0.0] t, și k = 0. Vectorii de aliniere sunt definiți relativ la setul translatat M 0, astfel încât alinierea finală să reprezinte transformarea completă. Sunt aplicate etapele (a), (b), (c) și (d) până când algoritmul converge către un minim, cu o toleranţă τ: a. se calculează cel mai apropiat punct: Y k = C(M k, P ) (timp maxim de calcul: O(N m N p ), timp mediu de calcul: O(N m log N p ); b. se calculează matricea de transformare utilizată în procesul de aliniere: ( q, d k ) = Q(M 0, Y k ) (timp de calcul: O(N m )); c. se realizează alinierea: P k+1 = q k (P 0 ) (timp de calcul: O(N m )); d. dacă eroarea medie pătratică dintre punctele considerate şi cele de referinţă scade sub o valoare de prag τ > 0 algoritmul se încheie. Precizia procesului de aliniere se determină ţinându-se cont de: d k d k+1 < τ. 7.1.4 Alinierea parţială şi globală a formelor utilizându-se ICP Acurateţea şi rapiditatea procesului de aliniere sunt dependente de structura formelor implicate. Contextual, pot exista două situaţii distincte: ˆ norul translatat descrie o formă globală similară cu acea a norului de referinţă; ˆ norul translatat descrie o anumită regiune din norul de referinţă. Aplicarea algoritmului în primul caz presupune, pe de o parte, translatarea centrului de masă µ m al formei M peste centrul de masă µ p al formei P, iar, pe de altă parte, identificarea setului de rotaţii optime care produc o eroare de potrivire (convergenţă) minimă. Cu toate acestea, suprapunerea centrelor de masă nu este obligatorie. Se poate recurge la o pretranslație, utilizându-se un set de rotaţii iniţiale. Un exemplu de aliniere a doi nori de puncte care înfăţişează silueta a două căni diferite este prezentat în Fig. 7.1. Cănile sunt vizualizate din aceeaşi perspectivă. Eroarea de potrivire pentru cazul considerat este de 3.1866 e 5. O problemă des întâlnită în procesele de aliniere apare în momentul în care doar o mică parte din punctele formei M au corespondent (cel mai apropiat vecin) în forma P. Un caz real este acela în care se încearcă alinierea unei mici porțiuni a unei căni relativ la o formă rigidă (reprezentată printr-o structură globală). Totuși, dacă regiunea potrivită prezintă suficient de multe particularităţi, algoritmul ICP poate converge optim către un minim local. Trebuie remarcat faptul că numărul de translaţii necesar este considerabil mai mare, deoarece cele două centre de masă nu se mai comportă în mod similar. Un exemplu de aliniere, între o

4 ALINIEREA ROBUSTĂ A DENSITĂŢILOR DE PUNCTE 3D (a) Vedere de sus (b) Vedere laterală (c) Fig. 7.1 Alinierea a două suprafețe cu siluete similare. (a) Model translatat (M). (b) Model de referință (P ). (c) Modele aliniate utilizându-se metoda ICP. suprafaţă rigidă şi o suprafaţă care descrie doar o anumită regiune a acesteia, este prezentat în figura 7.2. Eroarea de potrivire pentru cazul considerat este egală cu 7.489 e 8. 7.2 Cerinţe 1. Să se încarce doi nori de puncte de pe HDD; 2. Să se scrie utilizeze metoda ICP din librăria PCL pentru alinierea celor doi nori de puncte; 3. Să se translateze și să se rotească un nor de puncte, față de celălalt, utilizându-se matricea de transformare returnată de algoritmul ICP. 7.3 Codul sursă al aplicaţiei 1 #include <p c l / p o i n t t y p e s. h> 2 #include <p c l / p o i n t c l o u d. h> 3 #include <p c l / i o / p c d i o. h>.h> 4 #include <p c l / kdtree / impl / k d t r e e f l a n n. hpp> 5 #include <p c l / r e g i s t r a t i o n / i c p. h> 6 7 using namespace pcl ; 8 using namespace std ; 9 10 typedef PointXYZRGBA PclPointType ; 11 typedef PointCloud<PclPointType> PclCloud ; 12 13 PclCloud : : Ptr cloud_model ( new PclCloud ) ; 14 PclCloud : : Ptr cloud_aliniat ( new PclCloud ) ; 15 PclCloud cloud_rezultat ;

Codul sursă al aplicaţiei 5 (a) Vedere de sus (b) Vedere laterala (c) Fig. 7.2 Alinierea unei regiuni la o suprafață rigidă. (a) Model translatat (M). (b) Model de referință (P ). (c) Modele aliniate utilizându-se metoda ICP. 16 double dconvergenta ; 17 Eigen : : Matrix4f transformare_icp ; 18 float fdistmaxacorresp = 0. 5 f ; 19 int nmaxiteratii = 1000; 20 21 Eigen : : Matrix4f AliniereICP ( PclCloud : : Ptr cloud_model, PclCloud & cloud_aliniat, double &dconvergenta, int nmaxiteratii, float fdistmaxacorresp ) 22 { 23 Eigen : : Matrix4f transformare ; 24 25 PclCloud : : Ptr pcloud_aliniat ( new PclCloud ) ; 26 copypointcloud ( cloud_aliniat, * pcloud_aliniat ) ; 27 28 // Clasa a l g o r i t m u l u i ICP 29 IterativeClosestPoint<PclPointType, PclPointType> icp ; 30 31 // S t a b i l i r e a n o r u l u i de r e f e r i n t a 32 icp. setinputcloud ( cloud_model ) ; 33 34 // S t a b i l i r e a n o r u l u i t r a n s l a t a t ( a l i n i a t ) 35 icp. setinputtarget ( pcloud_aliniat ) ; 36 37 // Corespondentele cu d i s t a n t a mai mare decat pragul s t a b i l i t vor f i r e j e c t a t e

6 ALINIEREA ROBUSTĂ A DENSITĂŢILOR DE PUNCTE 3D 38 icp. setmaxcorrespondencedistance ( fdistmaxacorresp ) ; 39 40 // S t a b i l i r e a numarului maxim de i t e r a t i i 41 icp. setmaximumiterations ( nmaxiteratii ) ; 42 43 // Setarea f a c t o r u l e p s i l o n a l t r a n f o r m a r i i de s i m i l a r i t a t e 44 icp. settransformationepsilon ( 1 e 8) ; 45 46 PointCloud<PclPointType> Final ; 47 48 // A p l icarea a l g o r i t m u l u i ICP 49 icp. align ( Final ) ; 50 51 cout << " Convergenta: " << icp. hasconverged ( ) << " avand confidenta : " << icp. getfitnessscore ( ) << endl ; 52 53 // Salvarea v a l o r i i c o n v e r g e n t e i 54 dconvergenta = icp. getfitnessscore ( ) ; 55 56 // Returnarea m a t r i c e i de transformare determinata prin ICP 57 return icp. getfinaltransformation ( ) ; 58 } 59 60 int main ( int argc, char ** argv ) 61 { 62 cout<<" Laborator 7: Alinierea suprafetelor"<<endl ; 63 64 string strcaleclouda, strcalecloudb, strcalesalvarerezultat ; 65 66 if ( argc!=4) 67 { 68 cout<<" Utilizare: aplicatie <cale_nor_a.pcd > <cale_nor_b.pcd > < cale_salvare_nori_aliniati.pcd >"<<endl ; 69 exit ( 0 ) ; 70 } 71 else 72 { 73 strcaleclouda = argv [ 1 ] ; 74 strcalecloudb = argv [ 2 ] ; 75 strcalesalvarerezultat = argv [ 3 ] ; 76 } 77 78 // C i t i r e a primului nor de puncte 79 if ( io : : loadpcdfile ( strcaleclouda. c_str ( ), *cloud_model ) ) 80 cout<<" Norul de puncte nu a putut fi citit."<<endl ; 81 82 // Colorare nor de puncte in a l b a s t r u 83 for ( unsigned int a = 0 ; a < cloud_model >points. size ( ) ; a++) 84 { 85 cloud_model >points [ a ]. r = 0 ; 86 cloud_model >points [ a ]. g = 0 ; 87 cloud_model >points [ a ]. b = 255;

Descrierea funcţiilor principale 7 88 } 89 90 // C i t i r e a c e l u i de a l d o i l e a nor de puncte 91 if ( io : : loadpcdfile ( strcalecloudb. c_str ( ), *cloud_aliniat ) ) 92 cout<<" Norul de puncte nu a putut fi citit."<<endl ; 93 94 // Colorare nor de puncte in rosu 95 for ( unsigned int b = 0 ; b < cloud_aliniat >points. size ( ) ; b++) 96 { 97 cloud_aliniat >points [ b ]. r = 255; 98 cloud_aliniat >points [ b ]. g = 0 ; 99 cloud_aliniat >points [ b ]. b = 0 ; 100 } 101 102 // A l i n i e r e ICP 103 transformare_icp = AliniereICP ( cloud_model, * cloud_aliniat, dconvergenta, 300, 0. 0 5 ) ; 104 105 // Operatia de transformare ce a l i n i a z a c l o u d a l i n i a t l a cloud model 106 transformpointcloud ( * cloud_aliniat, * cloud_aliniat, transformare_icp ) ; 107 108 // Salvarea n o r i l o r cloud model s i c l o u d a l i n i a t i n t r un s i n g u r nor de puncte 109 for ( unsigned int i = 0 ; i < cloud_model >points. size ( ) ; i++) 110 cloud_rezultat. push_back ( cloud_model >points [ i ] ) ; 111 112 for ( unsigned int j = 0 ; j < cloud_aliniat >points. size ( ) ; j++) 113 cloud_rezultat. push_back ( cloud_aliniat >points [ j ] ) ; 114 115 io : : savepcdfile ( strcalesalvarerezultat. c_str ( ), cloud_rezultat ) ; 116 117 return 0 ; 118 } 7.4 Descrierea funcţiilor principale 21 Eigen : : Matrix4f AliniereICP ( PclCloud : : Ptr cloud_model, PclCloud & cloud_aliniat, double &dconvergenta, int nmaxiteratii, float fdistmaxacorresp ) Această funcţie are rolul de a alinia un nor de puncte oarecare (cloud aliniat) la un nor de puncte de referinţă (cloud model). Parametrul dconvergenta returnează măsura potrivirii celor doi nori de puncte sub forma unei erori de distanţă. Acest parametru descrie eroare de potrivire ce poate exista înre suprafeţele celor doi nori de puncte, după ce aceştia au fost aliniaţi. ˆ cloud model: nor de puncte de referință. Asupra acestuia nu trebuie să se aplice nicio transformare de similaritate (coordonate); ˆ cloud aliniat: nor de puncte ce urmează a fi transformat pentru a se suprapune peste norul de puncte de referință; ˆ dconvergenta: returnează potrivirea dintre punctele celor doi nori; ˆ nmaxiteratii: numărul maxim de iterații a algoritmului ICP;

8 ALINIEREA ROBUSTĂ A DENSITĂŢILOR DE PUNCTE 3D ˆ fdistmaxacorresp: distanța maximă dintre punctele celor doi nori. 79 io : : loadpcdfile ( const string& file_name, PointCloud<PointT> &cloud ) ; Încarcă un fişier tip nor de puncte. ˆ file name: calea către fişierul sursă; ˆ cloud: structura în care va fi încărcat norul de puncte. 106 transformpointcloud ( const pcl : : PointCloud< PointT > &cloud_in, pcl : : PointCloud< PointT > &cloud_out, Eigen : : Matrix4f &transform ) Aplică o transformare rigidă (rotație și translație), definită prin intermediul unei matrice de transformare 4 4. ˆ cloud in: norul sursă (care urmează a fi transformat); ˆ cloud out: norul transformat; ˆ transform: matricea de transformare. 115 io : : savepcdfile ( const std : : string &file_name, const pcl : : PointCloud< PointT > &cloud ) Salvează un nor de puncte într-un fișier cu extensia.pcd. ˆ file name: calea către fișierul destinație; ˆ cloud: norul de puncte ce urmează a fi salvat.