Structure-from-Motion from scratch, using Numpy and OpenCV.
Structure from Motion (SFM) from scratch, using Numpy and OpenCV.
In this repository, we provide
These instructions will get you a copy of the project up and running on your local machine for development and testing purposes.
To run tutorials, you need to have following libraries installed:
Numpy >= 1.13.1
OpenCV 3
Meshlab
Furthermore, to run SFM python script, you also need:
OpenCV Contrib
Please download the standard data benchmarks from here
After downloading, you should have the following directory structure
data/
fountain-P11/
images/
0001.jpg
...
0011.jpg
gt_dense_cameras/
0000.jpg.camera
...
0011.jpg.camera
Herz-Jesus-P8/
...
Castle-P19/
...
...
Tutorials are in tutorial/
directory. Furthermore, they're divided in following sections
Go to script/
directory
cd script
Run featmatch.py
to generate feature keypoints, descriptors and matches
python featmatch.py
All arguments are shown below:
usage: featmatch.py [-h] [--data_dir DATA_DIR] [--ext EXT] [--out_dir OUT_DIR]
[--features FEATURES] [--print_every PRINT_EVERY]
[--save_results SAVE_RESULTS]
optional arguments:
-h, --help show this help message and exit
--data_dir directory containing images (default: ../data/fountain-P11/images/)
--ext comma seperated string of allowed image extensions (default: jpg,png)
--out_dir root directory to store results in (default: ../data/fountain-P11)
--features [SIFT|SURF] Feature algorithm to use (default: SURF)
--matcher [BFMatcher|FlannBasedMatcher] Matching algorithm to use (default: BFMatcher)
--cross_check [True|False] Whether to cross check feature matching or not (default: True)
--print_every [1,+inf] print progress every print_every seconds, -1 to disable (default: 1)
--save_results [True|False] whether to save images with keypoints drawn on them (default: False)
Run sfm.py
to generate point cloud:
python sfm.py --data-dir <path-to-data-directory>
All arguments are shown below
usage: sfm.py [-h] [--data_dir DATA_DIR] [--dataset DATASET] [--ext EXT]
[--out_dir OUT_DIR] [--features FEATURES] [--matcher MATCHER]
[--cross_check CROSS_CHECK] [--calibration_mat CALIBRATION_MAT]
[--fund_method FUND_METHOD] [--outlier_thres OUTLIER_THRES]
[--fund_prob FUND_PROB] [--pnp_method PNP_METHOD]
[--pnp_prob PNP_PROB] [--allow_duplicates ALLOW_DUPLICATES]
[--color_policy COLOR_POLICY] [--plot_error PLOT_ERROR]
[--verbose VERBOSE]
optional arguments:
-h, --help show this help message and exit
--data_dir root directory containing input data (default: ../data/)
--dataset name of dataset (default: fountain-P11)
--ext comma seperated string of allowed image extensions (default: jpg,png)
--out_dir root directory to store results in (default: ../results/)
--features [SIFT|SURF] Feature algorithm to use (default: SURF)
--matcher [BFMatcher|FlannBasedMatcher] Matching algorithm to use (default: BFMatcher)
--calibration_mat [benchmark|lg_g3] Type of intrinsic camera to use (default: benchmark)
--fund_method [FM_RANSAC | FM_8POINT] Method to estimate fundamental matrix (default: FM_RANSAC)
--outlier_thres Threshold value of outlier to be used in fundamental matrix estimation (default: 0.9)
--fund_prob [0, 1] Confidence in fundamental matrix estimation required(default: 0.9)
--pnp_method [SOLVEPNP_DLS | SOLVEPNP_EPNP | ...] Method used for PnP estimation (default: SOLVEPNP_DLS)
--pnp_prob [0, 1] Confidence in PnP estimation required (default: 0.99)