====== DIY 3D skeniranje (1/3) Stereofotogrametrija ====== Stereofotogrametrija je fleksibilna bez-kontaktna tehnika određivanja oblika i drugih prostornih informacija o promatranom objektu ili prostoru. Iz perspektive primjene u digitalizaciji 3d objekata, značajna karakteristika ove tehnike je da pomoću nje njom osim 3d modela istovremeno možemo dobiti i vrlo kvalitetnu teksturu objekta. Budući da se ovakva 3d rekonstrukcija oslanja na analizu slike, izostanak teksture ili karakterističnih uzoraka na objektu ujedno je i glavna mana ove tehnike. Objekti i prostori koji su previše jednolični ne daju dobre rezultate pri korištenju ove tehnike. ===== Princip rada ===== Stereofotogrametrija je fotogrametrijski proces pomoću kojeg se procjenjuju 3d koordinate točaka objekta koristeći mjerenja s dviju ili više fotografija uzetih iz različitih pozicija u odnosu na objekt. Na svakoj fotografiji prepoznaju se zajedničke točke. Mogu se konstruirati projekcijske linije koje idu od pozicija kamera prema točki na objektu. Sjecišta projekcijskih linija određuju 3D lokaciju točke (triangulacija). {{ :project:photogrammetry.jpg?direct |}} ===== Alati ===== Za izvedbu je potrebno imati foto aparat s mogućnost ručne kontrole ekspozicije, fokusa i žarišne duljine; suvremeno računalo (Windows, Linux, OSX) i odgovarajući software. Preferiramo korištenje open-source ili ‘besplatnih’ software-a što bližih tom modelu iz nekoliko razloga – sloboda korištenja, edukativni potencijal, garancija da će software biti dostupani i u budućnosti, te poticanje participacije i razvoja software-a. === SFM (Structure from Motion) rekonstrukcija === * http://ccwu.me/vsfm/ * VisualSFM radi na Windows, Linux i Mac platformi. Pažljivo pratite [[http://ccwu.me/vsfm/install.html|upute za instalaciju]]. Instalacija za Windows platformu je najjednostavnija dok će za OSX i Linux potrebno kompajliranje. Ako nemate strpljenja :), tehniku možete probati koristeći trial ili freemium mode nekog od proprietary software poput: Agisoft PhotoScan, Autodesk 123D Catch (cloud based), PhotoModeler... === Editiranje point cloudova i masheva === * http://meshlab.sourceforge.net/ (koristiti ćemo ovaj) * http://www.cloudcompare.org/ * https://www.blender.org/ ===== Postupak ===== - Fotografiranje - Konstrukcija point cloud-a (Fotogrametija/SfM faza) - Rekonstrukcija mash-a ===== 1 Fotografiranje ===== Kvaliteta fotografskog materijala (podataka) presudna je za uspješnu fotogrametrijsku 3D rekonstrukciju. Zato se treba pridržavati sljedećih preporuka u odabiru objekta, pozicije i trenutka fotografiranja. * fotografije u nizu trebaju biti povezane (preklapati se 60% do 80%; karakteristična točka mora biti prepoznata na barem 3 fotografije) * izbjegavati ekstremno kadriranje (izolirane fotografije u kojima nije vidljiv kontekst / susjedne točke) * izbjegavati objekte s refleksijama (staklo, metal i sl.) * izbjegavati objekte u pokretu * izbjegavati fotografiranje pri lošim svjetlosnim uvjetima ili kontra-svijetlo * poželjno je difuzno svijetlo (oblaci, softbox) * napraviti što više fotografija Za dobre rezultate preporučuje se kvalitetan fotoaparat s mogućnošću postavljanja: * fiksna žarišna duljinu (zoom objektiv možemo fiksirati s trakom) * fokus (trebamo kontinuirano oštru sliku cijelog objekta) * ravnomjerna ekspozicija objekta * niže ISO vrijednosti kako bi se izbjegao šum (može i fotografiranje u raw-u) * spremanje EXIF metapodataka Nekoliko preporuka dobrih nizova fotografija za različite tipove objekata.\\ {{:project:pict2.png?direct&200|}} {{:project:pict5.png?direct&200|}} {{:project:pict6.png?direct&200|}} {{:project:pict7.png?direct&200|}} Nakon prebacivanja fotografije se mogu dodatno korigirati (ekspozicija) i trebamo izbaciti one koje nisu zadovoljavajuće (očite greške, duple i neoštre fotografije i sl.). Ako su fotografije u visokoj rezoluciji, potrebno ih je resize-ati (batch) tako da širina ili visina ne budu veće od 3200px. To je [[http://ccwu.me/vsfm/doc.html#hardware|ograničenje]] postavki VisualSFM software-a. U slučaju resize-anja treba sačuvati izvorne EXIF metapodatke jer ih VisualSFM koristi pri analizi fotografija. ===== 2 Konstrukcija point cloud-a ===== Fotogrametrijska tj. SfM (Structure from Motion) faza u kojoj računalo analizira svaku fotografiju te preko preklapajućih obilježja rekonstruira 3D prostor. VisualSFM software omogućava nam obavljanje svih radnji ovog procesa. Neke od ovih radnji mogu trajati dugo, a budući da se radi o procesorski/memorijski zahtjevnom postupku može doći i do rušenja računala. Kako bi imali bolju predodžbu da li se nešto događa uključite Log prozor: Win, Linux: ''Tools > Show Log Window''\\ OSX: ''Tools > Show TaskViewer'' {{ :project:visualsfm_toolbar.jpg?direct |}} ---- === 1. Učitavanje fotografija === ''File > Open+ Multi images'' Odaberite sve fotografije i kliknite ''Open'' ---- === 2. Pronalaženje obilježja (feature detection) i uparivanje fotografija === ''SfM > Pairwise Matching > Compute Missing Match'' Ovaj korak objedinjuje dvije radnje. U prvoj se prepoznaju i bilježe jedinstvena obilježja svake fotografije. U drugoj, pronađena obilježja uparuju se između fotografija. Broj usporedbi koji treba izvesti eksponencijalno je ovisan o broju učitanih fotografija, pa ovaj proces može potrajati. U slučaju da dođe do prekida (pauza ili rušenje), VisualSFM će nastaviti od točke u kojoj se zaustavio sljedeći puta kada se pokrene komanda. Isto tako mogu se dodati i nove fotografije (korak 1.) i ponovo pokrenuti proces; biti će kalkulirane samo nove fotografije. ---- === 3. Bazična rekonstrukcija (Sparse reconstruction) === ''SfM > Reconstruct Sparse'' VisualSFM će početi rekonstruirati i prikazivati 3D formu iz uparenih obilježja / fotografija. Možemo vidjeti pozicije i rotacije kamera u prostoru, koje su zabilježile izvorne fotografije. Klikom na ikonicu ''3+'' možemo vidjeti još više ključnih točaka (ne samo točke koje vide 3 ili više kamera). {{ :project:visualsfm_sparse_reconstruction.png?direct |}} Kroz 3D scenu se krećete: Pan — ''lijevi klik + drag''\\ Pan / Rotate — ''desni klik + drag''\\ Zoom — ''kotačić miša'' Kako bi dobili bolju predodžbu o objektu i sceni možete: Povećati veličine točaka — ''Alt + kotačić miša''\\ Povećati veličine fotografija — ''Ctrl + kotačić miša'' Pogrešno registrirane kamere ili one koje daju sumnjive rezultate i tako utječu na kvalitetu rezultata možete izbrisati. Kako bi brisanje radilo mora biti uključen: ''View > Show Single Model'' Selektiranje kamere — ''lijevi klik na kameru''\\ Selektiranje više kamera — ''F1 + pravokutna selekcija''\\ Selektiranje preko točaka — ''F2 + pravokutna selekcija''\\ Brisanje selektiranih kamera — ''Delete ili SfM > Delete Selected Camera'' ---- === 4. Gusta rekonstrukcija (Dense reconstruction) === ''SfM > Reconstruct Dense'' ili ikonica ''CMVS''\\ Spremite CMVS mapu. U njoj će se nalaziti datoteke koje ćemo koristiti u sljedećim koracima. U ovom koraku algoritam uzima prethodno pozicionirane kamere i originalne fotografije, pa kreira puno gušću verziju //point cloud//-a. Ovaj proces može potrajati dugo. Nakon što je rekonstrukcija gotova klikom na ''Tab'' (ili menu ''View > Dense 3D Points'') prebacujemo se između prikaza rezultata //Sparse// i //Dense// rekonstrukcije. {{ :project:visualsfm_dense_reconstruction.png?direct |}} Nakon što je rekonstrukcija gotova možemo zatvoriti program. Podaci su već spremljeni u mapi koji smo kreirali u ovom koraku. U njemu se nalazi više datoteka, a ove će nam biti važne u sljedećim koracima: * ''.nvm'' (N-View Match) datoteka u kojoj VisualSFM sprema podatke o rekonstrukciji. Sadrži putanje izvornih fotografija, kamere i 3D točke jednog ili više rekonstruiranih modela. Ovu datoteku otvaramo ako želimo ponovno otvoriti rekonstruiranu scenu u VisualSFM-u. * ''.out'' datoteka (bundler format) sadrži kalkulirane (solved) pozicije kamera i bazični (sparse) point cloud točaka na sceni koje je software koristio za određivanje pozicija kamera * ''.ply'' datoteka sadrži gusti (dense) point cloud. Svaka točka sadrži boju, poziciju i normalu (vektor okomit na površinu na kojoj je točka). Ovu datoteku možemo otvoriti u svim programima za baratanje point cloud-ovima i mashevima. === Napomena === Vrlo dobra karakteristika ove tehnike je da se rekonstrukcija u svakom trenutku može dorađivati. Ako su neke kamere pogrešno pozicionirane ili nam nedostaju detalji objekta koji obrađujemo, jednostavno napravimo dodatne fotografije i učitamo ih. S obzirom na to da su rezultati prethodnih analiza (SIFT i matching proces) automatski spremljeni uz svaku fotografiju (''.sift'' i ''.mat'' datoteke), analizirati će se samo nove fotografije. ---- ===== 3 Rekonstrukcija mash-a ===== Rekonstrukciju mash-a iz point clouda radimo s Meshlab-om. FIXME - učitaj ''File > Open Project'', pa odaberi ''bundle.rd.our'' i ''list.txt'' - provjeri kamere ''Render > Show Camera'' - izbriši ga ''delete current mesh'' (učitavamo ''bundle.rd.out'' kako bi dobili pozicije kamera, ali trebamo zamjeniti sparse point cloud sa dense cloud-om) - ''File > Import Mesh'' i učitaj dense mesh koji je lociran u folderu ''NVM_FOLDER/00/models/option-0000.ply'' - učitaj sve ''.ply'' objekte - flatten-aj vidljive layere - očisti pogrešne točke - Sanity check Cameras - kreiraj mesh iz point clouda - Remove all non-manifold edges - Parametrize the mesh by weighted average of projectors - projiciraj teksturu natrag na mash - Parametrize the mesh without averaging and project - finilaziranje i eksport (mesh u ''.obj'', textura u ''.png'') ===== Korisni linkovi ===== Teorija * https://en.wikipedia.org/wiki/Photogrammetry * https://en.wikipedia.org/wiki/Structure_from_motion * http://www.geodetic.com/v-stars/what-is-photogrammetry.aspx * http://www.capture3d.com/index.php/3d-metrology-solutions/photogrammetry/tritop.html * https://www.youtube.com/watch?v=O7B2vCsTpC0 Alati * http://ccwu.me/vsfm/ VisualSFM (free for personal, non-profit or academic use) * http://ccwu.me/vsfm/doc.html VisualSFM dokumentacija * http://www.di.ens.fr/cmvs/ CMVS za VisualSFM (GPL) * https://github.com/iromu/vsfm-osx VisualSFM OSX install scripts * http://www.10flow.com/2012/08/15/building-VisualSFM-on-ubuntu-12-04-precise-pangolin-desktop-64-bit/ VisualSFM Linux instalacija * http://184.106.205.13/arcteam/ppt.php Python Photogrammetry Toolbox (GPL) * http://www.123dapp.com/catch Autodesk 123d Catch (Proprietary / Cloud based) * https://recap.autodesk.com/ Autodesk Recap (Proprietary) * http://www.acute3d.com/ Acute3d ContextCapture (Proprietary) * http://www.agisoft.com/ Agisoft PhotoScan (Proprietary) * http://www.photomodeler.com/index.html PhotoModeler (Proprietary) * http://seene.co/tech/ Seene iPhone i Android app (Proprietary) * https://demuc.de/colmap/ * https://alicevision.org/#meshroom * https://pointclouds.org/ * https://m.all3dp.com/1/best-photogrammetry-software/ Tutoriali * http://wedidstuff.heavyimage.com/index.php/2013/07/12/open-source-photogrammetry-workflow/ (VisualSFM i Mashlab) * http://www.tested.com/tech/concepts/460516-art-photogrammetry-replicating-hellboys-samaritan-pistol/ (Agisoft PhotoScan) * https://www.youtube.com/watch?v=D6eqW6yk50k&feature=youtu.be (VisualSFM i Mashlab) * http://arc-team-open-research.blogspot.com.br/2012/12/how-to-make-3d-scan-with-pictures-and.html (Python Photogrammetry Toolbox i Mashlab) * http://web.archive.org/web/20140604160305/http://homes.esat.kuleuven.be/~konijn/3d/t1.html (fotografiranje) * http://web.archive.org/web/20140809065102/http://www.visualsize.com/FAQ/3dmodel.php (fotografiranje) * https://www.youtube.com/watch?v=GaYfpGcXxmA (Regard3d) * https://medium.com/realities-io/getting-started-with-photogrammetry-d0a6ee40cb72