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%.