I am playing around with structure from motion (Sfm) and 3D model reconstruction for the first time. The end result is to be able to generate a (fairly accurate) 3D model from a series of images.
Being a JVM developer, my natural inclination was to look for an available Java lib. I found BoofCV which seems to be an active project with decent features & capabilities. But I took a half-day and followed their Sfm examples and wasn't real happy with the results. If you're interested in reproducing them I made a little example project that you can clone and build yourself. But the TL;DR of that is that the code was supposed to render a 3D model of this chair:
...but instead gave me something that only very vaguely resembles a chair:
Very awesome that it can even do this (kudos to the BoofCV team!!!), but still not what I was expecting (then again, being brand new to CV, perhaps this result is completely expected and represents best-in-show Sfm capabilities, I dunno!). I compare these results to the Python Photogrammetry Toolbox ("PyPT") library results of a 3D generated skull, and, well, BoofCV just leaves me wanting a little more...
That PyPT example clearly demonstrates awesomeness, and apparently Google uses PMVS and CMVS for its 3D mapping capabilities. So there are clearly other open source libs out there that can get the job done...and well.
So I ask:
- Is the example code in my project (linked above) just not fully leveraging BoofCV's Sfm/reconstruction capabilities?; or
- Does BoofCV just not work as well as these other libs? If so, does anybody know offhand what could be contributed to BoofCV (feature/capability-wise) to get it up to par with these other libs?; or
- Am I just interpreting these results incorrectly, and perhaps the chair results above are just as accurate as what these other libraries will give me, but I'm just not looking at it the right way?!?