Software
VisualFSM ist ein nicht ganz taufrisches Programm zum Erzeugen von Punktwolken aus Fotos. Ich habe einmal einige Tests gemacht um die Ergebnisse dann später mit 3D-Scans (etwa mit der Kinect) zu vergleichen...Das Programm ist nur teilweise Open Source:
"The GUI (including SfM) part of the software package is close-sourced, which I developed from scratch. If you are interested in the algorithm detail of the SfM system, you can read my 3D paper here.
However, I have already open-sourced SiftGPU (feature detection & matching) and PBA (multicore bundle adjustment), which can be easily integrated into any other SfM system. You can also make changes to them, and reintegrate with VisualSFM."
Gefunden kann es hier werden: http://ccwu.me/vsfm/index.html
Das Programm muss allerdings noch durch eine zusätzliche Bibliothek erweitert werden, sonst läuft es nicht richtig:
CMVS-PMVS von diesem Repository: https://github.com/pmoulon/CMVS-PMVS
Die Dateien im Bin-Folder müssen ins Programmverzeichnis von VisualFSM kopiert werden.
Meshlab gibts hier: http://meshlab.sourceforge.net/
VisualSFM
Zum Starten werden die Fotos einer Serie importiert.
Ich habe relativ gute Ergebnisse mit einem Video gemacht, das ich mit dem iPhone aufgenommen habe. Gleichmäßig die Kamera bewegen (wegen Bewegungsunschärfe), viel Licht (wegen Tiefenunschärfe) und aufpassen auf den eigenen Schatten (macht Probleme). Anschließend den Film als JPGs abspeichern, wenn möglich nur jedes 10. Bild oder so, ich verwende dazu Blackmagic Fusion.
Folgende Icons sind dabei wichtig:
Das erste lädt die ausgewählten Bilder und sucht die markanten Punkte
das zweite vergleicht alle Bilder paarweise und "stitcht" sie zusammen. Das dritte errechnet die 3D-Info daraus und das letzte, das erst auftaucht, wenn die 3-D-Info errechnet ist erzeugt eine färbige Punktwolke.
Die Dateien können nicht manuell gespeichert werden sondern sind automatisch im Verzeichnis der Bilder.
Der Prozess ist natürlich von der Anzahl und der Auflösung der Bilder abhängig, kann durchaus insgesamt mehr als eine Stunde dauern.
Das Ergebnis sind dann viele verschiedene Dateien in mehreren Unterverzeichnissen.
Hier mit Screenshots:
Die Bilder sind importiert.
3D-Reconstruction:
Hier kann man mit der rechten Maustaste Kameras auswählen, die falsch berechnet wurden, man sieht auch ein etwaiges falsches Model recht deutlich. Im Menü, unter SfM kann mit "Delete selected Model" diese falsche Information gelöscht werden.
Dense mesh reconstruction:
Das kann jetzt schon mal dauern.
Das ist jetzt das Bild mit dem Dense Mesh. Das wird mit Drücken der Tabulatortaste angezeigt.
Jetzt kann das Programm geschlossen werden, wie gesagt gibt es kein Speichern.
MeshLab
In Meshlab jetzt das Visual FSM-Projekt öffnen.
File=> Open Projekt => xy.nvm
Das Ergebnis schaut zuerst enttäuschend aus:
Jetzt das Mesh löschen und das hochauflösende Mesh laden.
Das Löschen geschieht am Besten im Layerfenster
und dann mit Import Mesh im Unterordner xy.nvm.cmvs/00/models alle X.ply -modelle auswählen.
Das sieht viel besser aus:
Falls es mehrere Modelle gab müssen diese zusammengefügt werden. rechte Maustaste auf einen Layer => Flatten visible Layers und UNBEDINGT die Option "Keep unreferenced Vertices" checken! Die beiden Layer werden zu einem zusammengefasst.
Der nächste Schritt ist das Erzeugen eines Mesh aus der Punktwolke. Mit ausgewähltem Layer (immer aufpassen, speziell wenn später mehrere Layer im Projekt sind) im Menü Filters=>Point Set=> Surface reconstruction: Poisson anwählen.
In den Optionen die Octree Depth höher setzen, ich starte meistens mit 12-13 und ausführen.
Das kann lange dauern, daher wird man meist vorher alle unnötigen Bereiche löschen:
Icon Vertices selektieren => mit Rechteck Vertices selektieren und mit Icon Vertices löschen
dann das Mesh mit mittlerer Maustaste verschieben und linker Maustaste drehen, weiter löschen.
Nun erhalten wir ein Mesh, das keine Farbe mehr hat, aber dafür eine Oberfläche. Es sieht färbig aus, weil der ursprüngliche Layer noch sichtbar ist. Im Layerfenster den obersten Layer durch Klick auf das Auge ausblenden:
Nächster Schritt: Mesh bereinigen. Das ist einfach, unter Menü=> Filters => Cleaning and Repairing => select non manifold edges und dann in der Iconleiste das Icon "Delete the current set of selected Faces"
Danach: Menü => Filters => Texture => Parametrization + texturing from registered rasters
Als Bildgrösse gebe ich 4096 an. Und dann sehe ich dieses Bild:
Dieses Mesh kann ich als OBJ mit Materialien exportieren und in Blender importieren.
Keine Kommentare:
Kommentar veröffentlichen