Here’s the original post, and links to all posts
I have previously outlined my goal of testing multiple photogrammetry solutions on a single dataset, and reporting times and results.
I’m using a dataset based on photographs of this Styracosaurus model (I’ve had it since I was quite young):
The dataset has 53 photos in total, and is available from this link. [This will be moved to figshare in due course].
The model is about 12 cm in total length, has texture for the scales, and a reflective brass nameplate on the base. The model was situated on a glass desk, and there may be reflection issues from that.
Today’s test is with SMVS (and MVE). I had some exciting preliminary results as I finished the original post, so I have high hopes here!
I’ll be running all of this through bash for windows.
Installation is pretty straight forward: Just download SVMS and MVS from Git, and compile:
git clone https://github.com/simonfuhrmann/mve.git git clone https://github.com/flanggut/smvs.git make -C mve make -C smvs
Then we follow the ‘how to use’ instructions on the SMVS github page.
In this case, my home directory looks like the following:
/home/ |__mve | |__apps | |__bundle2pset | |__ ‘…’ |__smvs | |__app |__styrac_images
So as you might expect, ‘styrac_images’ contains all the jpgs. Both mve and smvs contain a folder within; app(s), which contains folders for each executable (just one for smvs).
What that means is that when I execute commands from within ‘styrac_images’, they look like this:
Step 1: makescene
Here’s the command to set up the scene, based on the available images (I create a new scene folder in my home directory:
./mve/apps/makescene/makescene -i styrac_images/ styrac_scene/
Time taken: 6.4 seconds
This creates a folder called ‘styrac_scene’ that contains another folder, ‘views,’ which contains an mve file for each image.
Step 2: Sparse reconstruction
This process detects features in each view, and saves the .mve view.
Time taken: 190 seconds
Step 3: SMVS reconstruction
Smvsrecon replaces dmrecon and scene2pset used by MVE.
This is the stage that really takes the computer – you can see all my 8 threads getting maxed out, and 9.3Gb of RAM being used:
Time taken: 6223.4 seconds (103 minutes)
Step 3: Mesh Generation
./mve/apps/fssrecon/fssrecon styrac_scene/smvs-B.ply styrac_scene/smvs-surface.ply
Time taken: 601 seconds
Step 4: Mesh cleaning
./mve/apps/meshclean/meshclean -p10 styrac_scene/smvs-surface.ply styrac_scene/smvs-clean.ply
Time taken: 14 seconds
Here’s the final model in images:
And on Sketchfab (I removed the small floating components and the fluff underneath in meshlab for the purposes of making the file small enough to upload to sketchfab, but otherwise did not make any major edits):
Total time: 7034.8 seconds
Given my high hopes at the start, I’m a little disappointed with the results actually. It took quite a while to run, and the end result has more holes than I’d like, an inaccurately rough surface, and the nasal horn has more or less failed to be captured correctly.
That being said, SMVS did manage to capture areas that have been problematic previously – particularly the area around the left hind limb.
I’ve had good results with SMVS before, and so, as is likely the case for everything I’m testing, better results can likely be achieved by delving into the settings, or even just with different datasets.
SMVS (with MVE) is easy to use, but in this case took quite a long time (~2 hrs) and didn’t come up with the goods. Perhaps in the future I’ll revisit the settings.
I followed your instructions to run “smvsrecon” and the program stopped by stating
What should I do to debug?
jc@jc-T5400:~/git$ ./smvs/app/smvsrecon styrac_scene/
Shading-aware Multi-view Stereo (built on Aug 12 2017, 17:33:24)
Initializing scene with 53 views…
Initialized 53 views (max ID is 52), took 4ms.
Reading Photosynther file (53 cameras, 14913 features)…
Automatic input scale: 2
Input embedding: undist-L2
Output embedding: smvs-B2
Running view selection for 53 views… done, took 8.108s.
Starting 1/53 ID: 0 Neighbors: 29 1 30 27 47 28
Starting 2/53 ID: 6 Neighbors: 7 10 11 14 13 12
Starting 3/53 ID: 1 Neighbors: 29 30 27 0 26 28
Starting 4/53 ID: 4 Neighbors: 3 5 2 6 32 34
Starting 5/53 ID: 5 Neighbors: 3 4 6 2 34 8
Starting 6/53 ID: 2 Neighbors: 3 30 32 1 31 29
Starting 7/53 ID: 7 Neighbors: 11 10 13 14 12 15
Starting 8/53 ID: 3 Neighbors: 2 1 32 30 5 4
Yikes, extremely difficult to know what’s going on there. Could be a memory error perhaps?