Skip to content

Structure from motion pipeline (Bundler + CMVS + PMVS2) ready to run on Ubuntu or Docker

License

Notifications You must be signed in to change notification settings

epassaro/linux-photogrammetry-tools

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

83 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

linux-photogrammetry-tools

A set of photogrammetry tools compiled for Ubuntu and containerized, fully open source and ready to use:

  • SIFT* by vlfeat.org.
  • Bundler (compiled w/Ceres Solver) by Noah Snavely.
  • CMVS & PMVS2 by Yasutaka Furukawa.
  • A patched version of Isaac Lenton's bundler.py:
    • Ported to Python 3.
    • Works with VLFeat SIFT (patch based on Python Photogrammetry Toolbox code).
    • Uses Ceres Solver by default.
    • Reads CCD_WIDTHS from a YAML file.
  • An image resizer script that keeps EXIF metadata.
  • A Makefile to run the pipeline steps.
  • A Jupyter Notebook for point cloud meshing with Open3D.
  • NEW! (March 2023): A Jupyter Notebook to run AliceVision's Meshroom on Google Colaboratory (or locally with a CUDA compatible GPU). This is a complete photogrammetry pipeline and works independently of the software listed above.

If you want to know more about how this software is packaged see here.

* SIFT patent expired on March 2020.

Installation

Docker

Get the latest image:

docker pull epassaro/linux-photogrammetry-tools:latest

Ubuntu 18.04

  1. Get latest build from releases section and extract it.

  2. Install the following dependencies via apt:

    build-essential libjpeg62 liblapack3 libceres1 jhead python3 python3-pil python3-ruamel.yaml

Usage

Docker

Usage via container is described in DOCKER.md.

Ubuntu

To process the example dataset open a new terminal, go to the program folder and run make.

Options

The following options can be passed to make in the command line:

  • IMG_DIR: path. Directory with a collection of images to be processed. Default: examples/kermit.
  • RESIZE: bool. Resize pictures before processing. Default: True.
  • MAX_SIZE: int. If RESIZE is True, maximum size in pixels (width or height). Default: 1200.
  • LOGFILE: path. Default: log.txt.

Visualize results & post-processing

Results are stored under <IMG_DIR>/output folder.

Open3D

To generate a 3D mesh from the point cloud with Open3D you will need Anaconda or Miniconda installed on your system, and then create a new environment:

$ conda create -n open3d -c open3d-admin -c conda-forge open3d=0.12

Finally, run the notebook gen_3d_mesh.ipynb located at the docs folder.

Meshlab

Open the .ply file located at work_dir/pmvs/models/ with Meshlab. You should visualize the point cloud clearly. To generate a textured mesh from point cloud, I recommend following the Shubham Wagh's guide.

Known issues

  1. No CCD width available for camera.

    Only a small number of CCD widths are listed in cfg/ccd_widths.yml.

    Solution: google your camera specs and add a new entry to the list.

If your problem is not listed here please check the log file inside your work_dir directory and open a new issue.

License

Code released under the GNU GPLv3 License.