====== Photogrammetry 3D scanning on Linux ====== ===== Workflow ===== Postup vypadá zhruba takhle: * Nafocení dostatečnýho množství kvalitních fotek * Vytvoření sparse point cloudu (= množina záchytnejch bodů, který jsou vyfocený na 3 a víc fotkách) * Vytvoření dense point cloudu (= množina nezáchytnejch bodů, který jsou odvozený ze záchytnejch) * Vytvoření meshe (3d modelu) z dense point cloudu (tohle už umí i Meshlab) Jak fotit: * Každej detail by měl bejt alespoň na 3 fotkách z různejch úhlů * Fotit ze stejné vzdálenosti s 30-60% překryvem * Vypnout automatický otáčení fotek (je lepší mít všechny fotky ve stejnym rozlišení) * Vypnout automatickou expozici, korekci bílý, atd... * Používat co nejmenší clonu (aby byla co největší hloubka ostrosti) * Fotit s co největším rozlišením a co nejostřeji * Ideálně fotit pod mrakem, když je světlo, ale nejsou žádný ostrý stíny * Lesklý a jednobarevný plochy je potřeba zmatnit a pokrejt vzorama (křídový sprej, gafa, barevný tečky, laserový tečky,...) * Vyhnout se odleskům * Pokud jsou na pozadí viditelný featury, tak se scanovanej objekt nesmí vůči pozadí hejbat * Zapnout ukládání GPS souřadnic do EXIFu (pokud to jde) ===== Software ===== * MVE + Meshlab * Colmap + Meshlab (funguje i na Windows) * VisualSFM + Meshlab * OpenMVG? * bundler+pmvs2? * e-foto?? * Agisoft PhotoScan (placeny SW, funguje na Linuxu) * 3df zephyr FREE (jen Windows) ===== Postupy ===== ==== ImageMagick ==== * ''mogrify -resize 500000@\> *.jpg'' omezit rozliseni fotek na 0.5 Mpx ==== Meshlab ==== Meshlab má spoustu zajímavejch funkcí. Tady jsou vypsaný jen ty úplně nejzákladnější potřebný k sestavení meshe z pointcloudu, rychlý očištění a export: * Filters -> Remeshing -> Screen Poisson Surface Reconstruction (prej nema moc smysl depth >15, osobne sem pouzival cca 11-12) * Filters -> Smoothing, Fairing, Deformation -> Laplacian Smooth * Filters -> Remeshing -> Simplification: Quadratic Edge Collapse Decimation (100k faces = 5MB soubor, 200k = 10MB, atd...) * Filters -> Normals, Curvatures & Orientation -> Transform: Translate, Center, Set origin -> Set new origin: Trackball center * Filters->point set->estimate radius from density * Filters->selection->conditional vertex selection->(rad > 0.007) * Delete selected vertices ==== Online nastroje ==== * https://www.formware.co/onlinestlrepair Mesh repair ==== MVE ==== set -x renice -n 10 $$ time ( makescene -i ./img ./scn #-m 500000 sfmrecon ./scn #--video-matching=10 dmrecon -s2 ./scn scene2pset -F2 ./scn ./scn/pset-L2.ply #optional: fssrecon ./scn/pset-L2.ply ./scn/surface-L2.ply meshclean -t10 ./scn/surface-L2.ply ./scn/surface-L2-clean.ply ) ==== Colmap CLI bez NVIDIA + pmvs2 ==== mkdir img out nice colmap automatic_reconstructor --image_path img/ --workspace_path out/ #--use_gpu 0 colmap image_undistorter --image_path img --input_path out/sparse/0 --output_path out/dense --output_type PMVS pmvs2 out/dense/pmvs/ option-all cd out/dense/pmvs/models meshlab option-all.ply ==== OpenMVG ==== #Sequential pro po sobe jdouci fotky z videa, Global pro nenavazujici fotky #SfM_SequentialPipeline.py ./img ./out SfM_GlobalPipeline.py ./img ./out ==== OSM-Bundler ==== python2 ./RunBundler.py --photos=./img python2 ./RunPMVS.py --bundlerOutputPath=./output #python2 ./RunCMVS.py --bundlerOutputPath=./output --ClusterToCompute=10 #pro velky datasety ==== OpenDroneMap ==== docker run -it --rm -v $(pwd)/code/images:/code/images opendronemap/opendronemap --mesh-size 100000 --force-ccd 1 --help