Structure From Motion Toolkit released

November 5th, 2010 by Henri Leave a reply »


I have finally released my Structure-From-Motion Toolkit (SFMToolkit). So what can you do with it ? Let’s say you have a nice place like the one just bellow:

Place de la Bourse, Bordeaux, FRANCE (picture from Bing)

Well, now you can take a lot of pictures of the place (around 50 in my case):


And then compute structure from motion and get a sparse point cloud using Bundler:

Finally you have a dense point cloud divided in cluster by CMVS and computed by PMVS2:

You can also take a loot at the PhotoSynth reconstruction of the place with 53 pictures and 26 (without the fountain).

This is the SFMToolkit workflow:

SFMToolkit is composed of several programs:


As you can see this “toolkit” is composed of several open-source component. This is why I have decided to open-source my part of the job too. You can download the source code from the SFMToolkit github. You can also download a pre-compiled x64 version of the toolkit with windows scripting (WSH) for easier usage (but not cross-platform):


If you need some help or just want to discuss about photogrammetry, please join the photogrammetry forum created by Olafur Haraldsson. You may also be interested by Josh Harle’s video tutorials, they are partially out-dated due to the new SFMToolkit but these videos are very good to learn how to use MeshLab.

Please go to the SFMToolkit page to get the latest version



  1. Pierre says:

    We must setup script with Python that we have done for the osm-bundler project.
    So the script are multiplatform…
    Only the binaries must be compiled on different platform…

  2. admin says:

    @Pierre: I don’t really like Python but I’m a Javascript lover this is why I have done the toolkit with WSH. And the other good part of WSH is that you don’t need to install a scripting engine (Python). But as my toolkit is released under MIT you could use BundlerMatcher with your osm-bundler project. And finally I’m only developing with Visual Studio so it would be difficult for me to provide cross-platform binaries (Ogre3D BundlerViewer, BundlerMatcher with SiftGPU, …). So feel free to use anything provided in this toolkit !

  3. Henri, should all photo sets be located in their own folder within the ‘samples’ folder?

    A basic readme would be useful… just covering how the toolkit’s folder should be positioned relative to the photos.

    Thank you again for all of your work that you’re making available to us.

  4. admin says:

    @Nate Lawrence: there is no need to put all photos in the “samples” folder. You are free to let the pictures wherever you want (except folder with space in it: may cause trouble). There is a readme file for BundlerViewer in bin folder but I don’t have written a global readme file as I think that it is pretty straightforward (if you have already used BundlerMatcher).

  5. @Henri, thanks.

    I should have tried running the first script before I posted. I tried it right after my post above, saw the folder select menu, and tried to post back saying that I now understood, but WordPress thought that I was trying to spam your blog because I was posting again so soon.

    I’m in the process of freeing up some hard drive space so haven’t had the chance to run the toolkit yet, but look forward to posting results or feedback soon.

  6. Clemens says:

    SFMToolkit1 looks promising, I tried it on Win7 x64 on Core2Duo / Geforce 9600 and I7 / Quattro NVS 3100M with the ET sample.

    …it crashed on bundler.exe

    Any ideas why bundler crashes?

    (“stopped working”; even deactivating the windows error reporting dialog hasn’t helped)

    Windows Script Host
    Script: C:\SFMToolkit1\1 – Bundler.wsf
    Line: 317
    Char: 3
    Error: File not found
    Code: 800A0035
    Source: Microsoft JScript runtime error

  7. Clemens says:

    it seems that it hasn’t found any points.. but why??

    it’s the ET sample, and I remember that it’s a good sample from back in the original bundler v3 days…

    [OnInit] Running program bin\Bundler\bundler.exe
    removed by admin
    [SifterApp::BundleAdjust] Adjusting cameras 0 and 1 (score = 0.000)
    [BaseApp::SetTracks] Setting tracks for image 0…
    [BaseApp::SetTracks] Finished in 0.000s
    [BaseApp::SetTracks] Setting tracks for image 1…
    [BaseApp::SetTracks] Finished in 0.000s

  8. admin says:

    @Clemens: It’s maybe because SiftGPU doesn’t work properly with your computer configuration. In “vector.txt” you should have the number of features found in each picture and in “matrix.txt” the number of matches between picture I and J. So if you only have zeros in one of those files it may explains why Bundler is crashing.

  9. Clemens says:

    vector.txt is filled with points, though i have zeros in the matrix.txt file :/
    good, bundler isn’t the problem. are there settings for SiftGPU (some minimal default settings to be on the save side)?



    btw. thanks for the fast answer and sorry for spamming with log entries

    SiftGPU should theoretically work on my nVidia GPUs 9600 is similar to 8800 which is mentioned on and my NVS 3200M supports CUDA too

  10. admin says:

    @Clemens: I had the same problem with an Nvidia GTS 240. I have tested BundlerMatcher with Nvidia GTX285, GTX465 and GTX470 only. I’m sorry but I don’t have any other option for you right now.

  11. steve says:

    yes i have the same problem of Clemens , i use window seven 64 bit and when i run the script bundler , it begin normaly but he crash after 10 seconde and the message alert is : “fichier introuvable code 800A0035 ligne 317.
    my picture are 2000X1500 …. and i have put 30 pictures
    I use a card graphic nvidia gtx 460 1GO

  12. Clemens says:

    That makes sense, the Geforce 240, 9600 and 8800 are based on the G92b GPU series (rebranded).

    I just compiled SiftGPU v360 – all 3 demo apps work fine on GF 9600 and NVS 3100M.

    …so I assume it’s just a little config settings…
    would it help to reduce the GPU load by altering the width/height of AllocatePyramid on less powerful graphic cards?

    trying to compile SFMToolkit myself showed that “SiftGPU.h” (by default) is not located in $(SolutionDir)\Dependencies\SiftGPU\include but $(SolutionDir)\Dependencies\SiftGPU\src\SiftGPU (so I had to added the later path to the VS settings).

    I will have to reinstall VS2010… my version is 32bit only :/

    If it helps, content from gpu.matches.txt
    0 2
    7 8

  13. admin says:

    @Clemens: This is nice to see some developers out there ! In my package SiftGPU.h wasn’t in the include dir (this is why I have change the include path). But I’ve have now created my own SDK 32/64bit of SiftGPU for easier usage. FYI, I’m only using SiftGPU and the not the Cuda version. Are you using x64 version of the 3 demos ? It may be an issue with only the x64 version ? I’ll be off for a few days so I can’t help you that much in the meantime. But you may create a dedicated thread in the forum ?

  14. Clemens says:

    thanks for your help!

    the related thread to the bundler crash issue:

  15. Nikita 12 says:

    I have the same problem with crashing bundler.exe.I’ve tried it on newly instaled Win7 x64 on Core2Duo and Nvidia GTX 460.
    It works fine in photogrammetry package but not in SFMToolkit and SFMToolkit1.
    Both do not work in subfolders with title not in English at all.
    As i found it starts working only when parameters, that are given are removed and typed manualy.
    With ET the same parameters as given gives in my case only 3 .ply’s and 6, as in example only with -1 and 0.9.

Leave a Reply