Posts Tagged ‘photosynthtoolkit’

Introducing OpenSynther

September 8th, 2010

PhotoSynthTileDownloader

In my previous post I have released my PhotoSynth Tookit but the PhotoSynth tile downloader wasn’t available yet. You can now download the picture of your Synth in HD using PhotoSynthTileDownloader1.zip. But please respect author’s copyright ! I have included a new confirmation dialog box that warn you about the Synth status (unlisted, public) but this is not shown in the video presentation of PhotoSynthTileDownloader.

BundlerMatcher

I have finally released BundlerMatcher, a feature extraction and picture matching tool built with SiftGPU. The main goal of this tool was to replace the slow matching step packaged with Bundler by a faster one using GPU without needing to modify Bundler’s code. You can download BundlerMatcher1.zip or checkout the code on my google code. Warning: this tool needs a 64bit windows OS (tested on 7 and vista) and a decent GPU. All my demos are available under MIT license but SiftGPU isn’t released under MIT so you should take a look at SiftGPU license.

OpenSynther

I’m proud to introduce OpenSynther which is under heavy development. The first goal of this tool is the same as BundlerMatcher: provide a faster matching engine for Structure from Motion tools. To achieve high performance it is coded in C++ and using both multi-core and GPU. Furthermore OpenSynther is using Surf instead of Sift and may in the future also compute the 3d reconstruction (as PhotoSynth does).

OpenSynther current feature list:

  • Jpeg loading + Exif reading
  • multi-threaded Surf feature extraction (based on OpenSurf & ParallelSurf)
  • multi-threaded Surf feature matching (based on OpenSurf matching + Cuda GPU matching)
    • Quadratic complexity O(n²) with n number of pictures

OpenSynther TODO:

  • multi-threaded Surf feature approximate matching (based on FLANN)
    • Linear complexity (hypothetical)
  • integrate 3d reconstruction ?

Benchmarks

These benchmarks were done on an Intel Corei7 920 (8 cores @ 2.66Ghz) + Nvidia GTX 285. The pictures size were 1600×1200 (~2M pixels), I heard that it was the limit size at which PhotoSynth extract features (it can of course use bigger pictures but feature extraction are done at a max size of 2M pixels).

Note:

  • Bundler: I had to reduce picture to 640×480, otherwise I got too many features (would be unfair).
  • PhotoSynth: I didn’t take into account the time spent in tile creation.
  • OpenSynther: in the future I may consider using GPUSurf for feature extraction.
  • BundlerMatcher: to be fair with PhotoSynth I didn’t write the ascii key file (so in fact it’s slower).


Note:

  • PhotoSynth: they did a very good job and managed to have a linear matching !
  • OpenSynther: the GPU is in fact doing the most part of the job as you can see in the table below:
App Name PhotoSynth OpenSynther BundlerMatcher Bundler
Extraction in sec 10 22 39 21 40 78 7 12 24 105 220
Matching in sec 15 31 58 31 104 322 40 170 542 75 440
% matching
done by CPU
100 100 100 22 12 13 0 0 0 100 100
% matching
done by GPU
0 0 0 78 88 87 100 100 100 0 0
Nb pictures 49 98 196 49 98 196 49 98 196 49 98 196



As you can see OpenSynther matching is in fact done by the GPU at 85%.

Share

Dense point cloud created with PhotoSynth and PMVS2

August 22nd, 2010

In my previous post I have introduced my PhotoSynth ToolKit. The source code is available on my google code under MIT license, you can download it right now : PhotoSynthToolKit2.zip. I have created a video to show you what I’ve managed to do with it:

As you can see in this video I have managed to use PMVS2 with PhotoSynth output.
All the synths used in this video are available on my PhotoSynth account or directly:

Workflow

My PhotoSynth ToolKit is composed of 3 programs:

  • PhotoSynthDownloader: download 0.json + bin files + thumbs
  • PhotoSynth2PMVS: undistort bunch of pictures and write CONTOUR files needed for PMVS2
  • PhotoSynthTileDownloader [optional]: download all pictures of a synth in HD (not relased yet for legal reason, but you can watch a preview video)

Limitations

It seems that my first version doesn’t handle the JSON parsing of all kind of synth very well, I’ll try to post a new version asap. fixed in PhotoSynthToolKit2.zip

PMVS2 for windows is a 32bit applications, so it has a 2Gb memory limits (3Gb if you start windows with the /3Gb options + compile the app with custom flag ?). I haven’t tried yet the 64bit linux version but I have managed to compile a 64bit version of PMVS2. My 64bit version manage to use more than 4Gb of memory for picture loading, but it crashes right after the end of all picture loading. I didn’t investigate that much, it should be my fault too, compiling the dependencies (gsl, pthread, jpeg) wasn’t an easy task.

Anyway, PMVS2 should be used with CMVS but I’m not sure that I can extract enough information from PhotoSynth. Indeed Bundler output is more verbose, you have 2d/3d correspondence + number of matches per images. I think that I can create a vis.dat file using some information stored in the JSON file but it should only speed-up the process, so it doesn’t help that much with the 2Gb limits.

Credits

My PhotoSynth ToolKit is coded in C++ and the source code is available on my google code (MIT license). It is using:

  • Boost.Asio: network request for Soap + file download
  • TinyXml: parsing of soap request
  • JSON Spirit: parsing of PhotoSynth file: “0.json”
  • jpeg: read/write jpeg for radial undistort

Furthermore, part of the code are based on:

Please go to the PhotoSynthToolkit page to get the latest version

Share

My PhotoSynth ToolKit

August 19th, 2010

I have released a ToolKit for PhotoSynth that permit to create a dense point cloud using PMVS2.
You can download PhotoSynthToolKit1.zip and take a look at the code on my google code.

PhotoSynth sparse point-cloud
11k vertices
PMVS2 dense point-cloud
230k vertices

I also have created a web app : PhotoSynthTileDownloader that permit to download all pictures of a synth in HD. I didn’t have release it yet because I’m concerned about the legal issue, but you can see that it’s already working by yourself:

I’ll give more information about it in a few day, stay tuned !

Edit: I have removed the worflow graph and moved it on my next post.

Please go to the PhotoSynthToolkit page to get the latest version

Share