PMVS2 x64 and videos tutorials

September 23rd, 2010 by Henri Leave a reply »

PMVS2 x64

I’ve finally managed to spend a couple of hours to compile a 64 bit version of PMVS2 for windows! You can download PMVS2_x64.zip right now. I’ll hope that this version will help some persons, I’ve personally managed to create a very dense model thanks to this version and PMVS2 was using more than 4Gb of ram on a 8-cores machines.

How to compile PMVS2 x64 by yourself:
download the CMake package of CMVS (containing PMVS) created by Pierre Moulon.
download and compile gsl 1.8
download precompiled pthread x64 lib from equalizer svn
download and compile clapack 3.2.1 using CMake

PhotoSynthTileDownloader

As requested by some persons, I’ve updated my PhotoSynthTileDownloader: you can now resume a partial download ! It’s already available for download: PhotoSynthTileDownloader2.zip.

Videos tutorials

Josh Harle has done some very nice videos tutorials on how to use my PhotoSynth ToolKit and has created another toolkit for Bundler that is using my BundlerMatcher.

PhotoSynth Toolkit post on Josh Harle’s blog.

Note: In fact your synths doesn’t need to be 100% synthy. My tool (PhotoSynth2PMVS) is capable of using an uncomplete synth. And now you could use my 64bit version of PMVS2 instead.

Please go to the PhotoSynthToolkit page to get the latest version


Bundler photogrammetry package post on Josh Harle’s blog.

Please go to the SFMToolkit page to get the latest version

Share
Advertisement

52 comments

  1. Cesar Lopez says:

    Great news! Now i don’t have to jump to a linux box to get dense point clouds. Got a 24 gbs RAM windows machine, will give it a try and report back.

  2. Eugene says:

    I keep getting an error for the download

  3. admin says:

    @Eugene: there are 16 persons who managed to download it right know, there may be an issue with your computer. I’m sorry for that.

  4. Cesar Lopez says:

    I have downloaded pmsv2 for x64 and replaced the 32 version on Josh Harle’s sfm package. Works great. I have a 24 gb machine and everything runs beautifully. I have even resolved my “bad geometry” problem with Bundler (BundleMatcher) , that ended up being that a wrong camera ccd width was used. Now all models are amazing. Life is great.

    I’ve worked hard on the Helmert 9 Parameter conversion and have managed to use a mysql database for dense point cloud coordinate conversions. Will release soon.

    Now, if i could only get my hands on Ogre3D PlyReader for viewing the pictures, life would be better! ;)

  5. admin says:

    @Cesar Lopez: Nice to see that my tools are useful ! But I’m not familiar with the Helmert conversion: is it something like geo-referencing the point cloud with GPS coord ? Concerning the Ogre3D PlyReader, you’re right, I’ll have a talk with the man behind that… ;-)

  6. Cesar Lopez says:

    The conversion refers to being able to establish 3 reference points with GCP’s within the model with a total station (or GPS) and being able to identify those within meshlab (which is why PMVS2 is so important, GCP’s won’t show well with Bundler nor Photosynth). Once you got the GCPs on both coordinate systems (real world and the coordinate system from bundler or pmvs2) you do a 9 parameter Helmert Transformation and “resettle” all coordinates in the model to real coordinates.

    Then you got an amazing, efficient and quite precise way of densifying topographic data. Very useful.

    Nathan Craig (http://www.personal.psu.edu/nmc15/blogs/anthspace/2010/02/structure-from-motion-point-clouds-to-real-world-coordinates.html) has a small tutorial on that, but I’m working on a more efficient process for referencing > million points that pmvs2 gives. The idea is basically to insert every point in the cloud into a database (e.g. mysql) and process it there. Complex conversions, filters by color or neighbor characteristics can be applied. There are many possibilities.

    I’m particularly interested in the PlyReader because it would make it possible to create geo-mosaics as a cheap and efficient complement to orthophotography.

  7. Hi all,

    I am the developer of CMVS/PMVS2. Pierre Moulon, who distributes its Windows version, pointed me this link, and I am REALLY happy to see that people are making use of our software.
    Many people have asked me on how to use PMVS on windows machine, and this is really helpful. I added a link from my homepage (http://www.cs.washington.edu/homes/furukawa/). Hope that’s not a problem.
    Yasu

  8. Fantastic, like others now I don’t have to jump over to Ubuntu to run PMVS with larger then 32bit capable images sets. Great work Henri.

    May I suggest you re-upload your BundleMatcher package with a 64bit version of Bundler as well. I have done so myself and here is an archive you can grab and you are more then welcome to update yours with the files I have replaced, and please do so for others.

    http://www.olihar.com/ma/files/BundlerMatcher64.zip

    I have as well added the Canon 5D mark ii and Canon 1Ds mark iii to the extract_focal.pl file if people have suggestions to add some others I can do so for them.

    It would be so nice if Bundler was multi-threaded, do you have any suggestions for that Henri? It seems like a 2000 image set is taking a week on a 8 core machine. And it seams only be using 1 core.

    I am very interested in hearing more about your thoughts and ideas regarding Geotagging Cesar and the possibility of merging point clouds together in a good manner. Do you have a blog about your methods and ideas? I have been in touch with Nathan before and he sounds very interested and enthusiastic about it.

  9. admin says:

    @Yasutaka Furukawa: thank you for developing such great open-source software ! You are more than welcome for providing a link to my blog on your website ! I just need to clarify that I’m not the author of these videos: it’s Josh Harle. But I’m the developer of BundlerMatcher (a feature extraction and matching tool for Bundler using SiftGPU) and PhotoSynth2PMVS (tool that enable to run PMVS2 with PhotoSynth output).

    @Olafur Haraldsson: I’m going to create a new toolkit with both Bundler and PhotoSynth support and it’ll integrate Ogre3D PlyReader. So I’ll update the package with Bundler x64 when this new toolkit will be ready. It will be nice to setup an open-source database with all known CCD width (we could ask dpreview.com), thus we won’t have to manually add all new cameras to extract_focals.pl. Bundler isn’t multi-threaded that’s why it’s only using 1 core. Your only solution to speed-up the reconstruction is to reduce your dataset and picture size. Other SFM tools are only using a fraction of initial dataset for bundle adjustement, then the remaining pictures are registered using pose estimation. Concerning the point cloud geotagging I believe that you’re asking Cesar Lopez, because I’ve no prior knowledge of such technique.

  10. gEEvEE says:

    Hi all,

    I tested this toolbox yesterday with great success (on a small amount of images). However, if I use a synth of more than 50 photographs, the PMVS2 program stops working (during the execution of step 5: launchPMVS2). I do not know what causes it, because there is no message that tells me.
    Can this be due to:
    - my 64-bit system only having 4GB of RAM?;
    - the pixelsize of the images is too large (5280 * 3520)?;
    - due to the parameters in the pmvs_options.txt file?;

    I know, I can test all this to see what the reason is, but it is very time consuming. I am testing it right now, but if somebody has similar issues or knows the answer, it would be a great help. By the way, I downloaded version 2 of the toolkit and the 64-bit version of PMVS2 for windows.

    A final questions ceoncerns this: would it be possible to upload to full res images in Photosynth and use smaller, downsampled images in the distort folder to speed up the process (and make sure a correct linking between the photographs was performed on the full res images)? Sorry for all the questions, but I am new to this SFM thing but see the enormeous potential in it.

    Best regards and thanks for this amazing software! gEEvEE

  11. admin says:

    @gEEvEE: if PMVS2 x64 has crashed it should be because it’s running out of memory (you could check that by watching the process memory occupation). To reduce PMVS2 memory footprint you can use thumbs version of your synth’s pictures or use other parameters in pmvs_options.txt (check the readme file).

  12. @gEEvEE: If you want to run pmvs 64bit on larger image sets then your memory, you need to make your swap bigger… if you are running this on 5k wide images you are going to be using some serious amount of swap. I am currently doing a test on 1.5k images, using a set of 400 images is creating almost 130GB of swap. See here http://img.skitch.com/20100928-rb2tpb3rff163igf7xa6qpgdf.jpg

    Make sure you try and have a swap drive that is as fast as you can make it, stripe0 or/and SSD’s

  13. I do wonder if anyone has made a multi-threaded Bundler or at least had a look at the possibility, but I guess after Photosynth was made that probably is not the case.

    I can get in touch with dpreview if you have not done so already.

    and yes I was asking Cesar about the Geo-tagging…

  14. admin says:

    @Olafur Haraldsson: just FYI PhotoSynth scene reconstruction is not multi-threaded. The only multi-threaded part in PhotoSynth is the feature extraction and matching step. BTW I have improved BundlerMatcher: there is no need for cygwin anymore (thus no need for extract_focal.pl). I have replaced the Exif extraction step by a custom tool (already written for OpenSynther): extracting Exif information took less than 1s for 100 pictures. But I still need a CCD width database, so if you can contact dpreview that would be great ! I need their ccd width info + camera make and model (example for a Canon camera: “Canon PowerShot A700″ -> Sensor size 1/2.5 ” (5.75 x 4.31 mm, 0.24 cm²))

  15. gEEvEE says:

    Thanks Olafur. I give it a try!

  16. Cesar Lopez says:

    @Olafur: I`ll be publishing very soon on my methods and releasing some scripts that takes care of inserting records into mysql for transformation.

  17. Laczko says:

    Olafur Haraldsson: How many points do you get with this set of 400 images? And how long does it take?

  18. @Henri: interesting, I was so sure that scene reconstruction was multi-threaded in Photosynth. Fantastic, getting cgwin completely out of the loop sounds fantastic, I will see what Dpreview reply’s if they do reply regarding opening up their data-set of ccd and cmos sizes.

    @Cesar Great, I can’t wait to see the tools and methods.

    @Laczko using 400 1.5k sized images at
    level 1
    csize 2
    threshold 0.7
    wsize 7

    I got about 4 million points, it is absolutely beautiful results, I however with the set that takes up 130GB of swap I have the same image set only running at
    level 0
    csize 1
    threshold 0.7
    wsize 10

    Its still running… And I will report back as soon as I have something if it will ever finish.

    I ran a test set using 8 images and the same parameters above and got results like this.

    http://img.skitch.com/20100928-etcwku3r2h4k4s6wkye2pbykba.jpg

    43.801 vs 6.811.621 so if that is true I could get up to about 600.000.000 points in the set I am running now… hmm… I do wonder if that could be true…

    I have been think a while about an idea regarding all these methods and projects people are working on, Would people be interested in a forum based webpage about all these things, instead of information getting berried away in comments systems of blogs it would be in a searchable forum. I just wanted to throw that idea in and see what people think about it and I could make one to make a small community. What do you guys think?

  19. Laczko says:

    I have a problem with the toolkit.(Sorry my english is not so good)

    I have fallowed the instructions. The first step i get an error message.
    When I execute the 1_DownloadPhotoSynth.vbs and enter the photosynth url i get this message:
    “The exception unknown software excetion (0xc0000005) occured in aplication at location 0x00bf60c0. Click on Ok to terminate the program”

    Whats wrong?
    I read the readme-txt i setup correctly. I have tried two different OS (Vista 64bit, XP 32bit).

  20. admin says:

    @Olafur Haraldsson: I think that it would be nice indeed to launch a forum about photogrammetry.And thanks for contacting dpreview, I’m busy with my new version right now.
    @Laczko: maybe you don’t have installed Microsoft Visual Studio Redistributable ?

  21. Laczko says:

    @admin: Yes, i have installed this. I reinstall, but it is not working the toolkit. :(

    I have tried with this in the command prompt:
    PhotoSynthDownloader.exe http://photosynth.net/view.aspx?cid=1471c7c7-da12-4859-9289-a2e6d2129319

    I get the error message again.

  22. admin says:

    @Laczko: when you launch PhotoSynthDownloader.exe in the command prompt do you see the usage information ? Maybe you have extracted the toolkit in a folder containing fancy character or space ? Firewall settings ? I can’t help you without further information…

  23. Lacko says:

    @admin: Thanks for your help.

    -when you launch PhotoSynthDownloader.exe in the command prompt do you see the usage information ?
    -Yes this is working, I see the usage information

    - I havent got any strange character or space in my folder.

    - I have disabled the firewall, the result is thew same. I have got an error message.

    Any other idea? What could be wrong?

  24. admin says:

    @Lacko: I’m sorry but I don’t have other idea… You could try with another computer or another internet connection… Or compiled PhotoSynthDownloader in Debug and tell me what’s going on (the source code is available on my google code).

  25. Lacko says:

    @admin: In my office it is working. I dont understand. At home I have tried with 3 different computer.
    Anyway It is awesome. I run a test with 30 pictures and the result is fantastic. But I think how precise the pointcloud.

  26. Cesar Lopez says:

    @Lacko: Very, very precise. We’ve tested in large scale against total station topographic information.

  27. I have now set with roughly 60.000.000 points in 70 different ply files, Does anyone have an idea how it is best to merge these, as MeshLab and VrMesh both crash when trying to do so, even layer by layer.

    @Henri Still no reply from Phil at DPReview. It would be possible to get some people together to make one, Using Google Docs or some other service where people can edit.

  28. Laczko says:

    @Olafur Haraldsson: You should look at some laserscanner software. I work as a reverse engineer and I work a lot of pointcloud. Is this ply pointcloud in the same coordinate system? Have you got 70 ply files with one synth or you made 70 synth?
    (Sorry my english is not so good yet)

  29. Cesar Lopez says:

    @Olafur: Use “attach” point cloud in VRMESH and lower the density of it to about 20%. It will uniformly lower the density and make it managable for whatever you want to do. http://www.vrmesh.com/movie/Importlargedata.mov

    For other type of proccesing you might want to import it to a database and filter there by whateever you want.

  30. marco says:

    Hi all, i don’t know how to get ccd widths of my Nikon D90. Could you help me?

  31. admin says:

    @marco: it’s 23.6mm: found at dpreview.com

  32. Henri, greetings and many thanks for taking time and effort to add resuming to PhotosynthTileDownloader and get this 64 bit version of PMVS2 up running for the rest of us to use!

    I am wondering about whether it would be possible to write as much of the camera parameter and author metadata about each image as is contained in the JSON file back into the images when the tiles are being composited together and saved by PhotoSynthTileDownloader. That would mean that the images are more fit for reuse with Bundler, BundlerMatcher, Photosynth, etc.

  33. admin says:

    @Nate Lawrence: thumbs files downloaded with PhotoSynthDownloader contains Exif informations (if provided in input pictures). Thus it could be possible to download HD picture with PhotosynthTileDownloader and then add Exif using thumbs. But why would you want to download a synth dataset as Bundler input ?

  34. Interesting! I didn’t realise that the thumbs contained the full EXIF data. I’d definitely still love PhotoSynthTileDownloader to be the tool to write that data to the full resolution images, rather than downloading both the thumbs set and the full-res set of images individually and trying to find a third party EXIF manager to copy the metadata to the full-res images. It is my feeling that even though the images have suffered JPEG compression once when being tiled and again when being composited that the full resolution images that PhotoSynthTileDownloader saves should be as close as possible to the original images in every way possible. Ideally, the checksum of the downloaded images would be identical to the original images’ (a way to test this, being that the uploads would be skipped if the downloaded images were used in a new synth or Photofly Photo Scene), but I know that with the introduced JPEG compression that is impossible.

    My interest in using Photosynth photo sets in Bundler or OpenSynther is simply because I would like to push dense reconstruction quality in PMVS2 to the maximum and this necessitates CMVS (being that my computer only has 4GB of RAM, despite having a 64bit processor and OS). You’ve pointed out before that Photosynth output is not directly compatible with CMVS, so I look to Bundler as something which will allow me to do this reconstruction of small chunks of the same coordinate system.

    I am also interested in simply comparing reconstruction quality in Bundler to reconstruction quality in Photosynth on a broad range of photo sets, rather than only those which I am familiar with, and for this to be a fair test would require the focal length, etc. to be present in the images for Bundler to use (as well as downsampling the images to 1.5 megapixels for Bundler, but I am not so concerned with this and would actually be interested to see Bundler run with the full resolution images).

    Having said that, I would far prefer it if you found that the necessary information to make use of CMVS was in Photosynth’s JSON file after all. I am certainly no computer scientist or developer, so please forgive my question if it betrays my ignorance, but I do wonder why the same scene fragmentation that CMVS performs with Bundler output cannot be performed with Photosynth output as it exists today. It seems as though with the Photosynth camera positions being as accessible as they are, it should be possible to determine which cameras are targeting any given piece of the sparse reconstruction. The Photosynth viewer needs to know which points in the reconstruction to align the images to (this is seen by using the WASD controls to move around with the photos turned on and observing that many images do not simply have a fixed position in space, but instead will turn through space as the virtual camera attempts to circle them because they continue to try to align themselves to certain points in the point cloud, but from the virtual camera’s new viewpoint). Overhead View gives us another example of the viewer being aware of which images correspond to a particular patch of points being highlighted, so it seems as though that information must be accessible in some way. If it can be determined which photos correspond to a given cluster of points, then it seems to me that it must also be possible to use that information to intelligently and automatically fragment the cameras into smaller groups, based on what they are viewing, which is of paramount importance for multi-view stereo.

  35. @Olafur Haraldsson I just wanted to confirm what Henri said about the parallelization in Photosynth.

    Here’s a link to an interview with Drew Steedly and Joshua Podolak where Drew talks about exactly that.

    @Henri, that same interview features Joshua talking about how the images are aligned to a selection of points using RANSAC. I’m not sure how much that applies to figuring something out in regards to CMVS, but I thought that I would mention it.

  36. @Olafur Haraldsson, also, I should mention that Kean Walmsley of AutoCAD recently pointed out to me that AutoCAD can handle up to 2 billion points, so you may want to shoot him an email or just give AutoCAD 2011 a spin and see what you come up with.

  37. admin says:

    @Nate Lawrence: In fact I’ve just recently find out how to produce a Bundler compatible output with PhotoSynth. But it’s need a LOT of coding, as far as I know PhotoSynth doesn’t gives the 2d/3d correspondences of features in the point cloud. This information and the cameras parameters are needed by CMVS. So in order to produce a bundler-like output for further CMVS processing you have to:

    • - extract your own feature in each picture
    • - match the features
    • - use the cameras parameters estimated by PhotoSynth to triangulate your features
    • - generate your own point cloud with 2d/3d correspondences and thus bundler-like output

    OpenSynther is a great start to implement this, I just need to implement the triangulation. But I’ve recently found Samantha paper which explains very well how to have a sfm linear matching and a multi-threaded sfm reconstruction. So I have trouble ordering my TODO list ;-) .

    Concerning the PhotoSynthTileDownloader I’ll see what I can do…

  38. I have opened up a forum about Photogrammetry as I talked about doing. Please come over and join the community, when I write this I just opened the page to the public few minutes earlier, so not much is happening over there, but that will hopefully change soon.

    http://www.pgrammetry.com/forum/index.php

  39. steve says:

    hello everybody
    I have somes questions.
    I use pmvs with a set of 30 images (2500X2000) so when i run the program without cmvs all step work, but when i put the cmvs, at the pmvs running i have a message who say:
    pmvs2.sh:1 : pmvs2: not found
    pmvs2.sh:2 : pmvs2: not found
    and the program abort
    why? and what is the solution
    Thanks for your answer

  40. admin says:

    @steve: Are you using the SFM toolkit released by Josh Harle ? You should switch to the SFMToolkit beta released on the photogrammetry forum. It doesn’t use cygwin (*.sh) !

  41. steve says:

    Thank you @admin i try it

  42. steve says:

    Hello admin,
    I am waiting with impatience your package with bundler 64 bit .
    Do you know when its going to be ready , in this month , next month :) ?
    You have doing a very good work, thanks you for developing this great open source

  43. steve says:

    hello
    I have 2 questions about the very good tutorial of josh Harles toward photosynth toolkit.
    First I constat that the pmvs application exist in the photosynthtoolkit 3, so it’s not necessary to download pmvs2 and put the pmvs2 application + pthread.dll in the folder of photosynthtoolkit 3, That’s thrue??

    another remarque are they a difference between pthread.dll and pthreadVC2.dll wish is in the photosynthtoolkit 3. Does we erase pthreadVC2.dl and replace by pthread.dll or it’s not necessary??

    At last, my third remarque: we can constat that in the folder of photosynthtoolkit 3 of Josh Harle they are DLL like libANN.char.dll and ann_1_1.char.dll and zlib1.dll that doesn’t exist in photosynthtoolkit 3. why? , is it necessary to put them or not?

    Thanks for your answer

  44. marty says:

    im using pmvs2 i dont know how to input arguments there
    i have checkd the http://grail.cs.washington.edu/software/pmvs/documentation.html
    website but no help came out of it.
    can some one send me an example code for inputing

  45. admin says:

    @marty: if you are using my toolkits (photosynth or SFM) they are configured with good default values. You can change these values if you understood PMVS documentation, otherwise you can take a look at the photogrammetry forum.

  46. Pablo says:

    Hi. I’ve used the photosynth workflow till the end with succes. Impresive point density!!.
    Now I’m having problems at the first step as the thumbs are not downloading even if I do check in the prompt window that yew I want them to be downloaded. I’ve tested this with several synths and problem keeps going. Unziped again the toolkit and same problem. Downloaded teh synth sfuff in different hd drives sand problem keeps equal… any suggestion? If I use the tile downloader and put the tiles in teh thumbs folder should work?? I’ll try anyway to see what happens. But wanted to comment that error-problem.

  47. admin says:

    @Pablo: Downloading a synth may take a while if you download thumbs too, have you checked the thumbs folder? Are you using PhotoSynthToolkit v5? Is the program crashing? I need more information to be able to help you…

  48. Pablo says:

    Hi. I was running Toolkit5. Now it is working!!!. I think that it was a matter of path name. I do now download the synth directly to a drive with a folder named with a single letter. I download the synths to folders named “a” “b” “c” and later i do rename then and prepare for PMVS with no problems. Thanks.

  49. Pablo says:

    Using the Photosynth + PMVS I gest fantastic ressults, but when in photosynth lots of points have been detected during PMVS my 8gb of ram are totalled and the process stalls and crashes… As read from Furukawas page the CMVS should split the project into a manageable size so I tried your BundlerMatcher procedure but it only uses one core and takes a loooog time when I do launch Sparse point cloud bat.
    As read before, I also think that would rock that photosynth stuff could be “transform” so that we can use the CMVS+PMVS.
    Or any similar process that does not kill our Pc’s.
    WHat I love from photosynth is the queue, so we can leave the pc computing while we’re outside, sleeping, at class… whatever. Would rock a queue for the .bats generated for the PMVS process too.

  50. admin says:

    @Pablo: I’m well aware of the current PhotoSynthToolkit limitation… this is why I’ve updated my PhotoSynth Viewer. I’m willing to add the possibility to create cluster manually (thus without CMVS) from the viewer. So this should allow very dense reconstruction without the fear to run out of memory in the PMVS2 stage!

Leave a Reply