A simple python implemented frame by frame visual odometry. This project is inspired and based on superpoint-vo and monoVO-python.
We tested handcraft features ORB and SIFT, deep learning based feature SuperPoint, more feature detectors are also possible to be added to this project. For feature matchers, we tested the KNN and FLANN mathers implemented in OpenCV, and the novel deep learning based mather SuperGlue.
Feature detectors
- ORB (OpenCV implementation)
- SIFT (OpenCV implementation)
- SuperPoint
Feature matchers
- KNN, FLANN (OpenCV implementation)
- SuperGlue
SIFT Keypoints
SuperPoint Keypoints
SIFT+FLANN Matches
SuperPoint+FLANN Matches
SuperPoint+SuperGlue Matches
-
Get this repository
git clone https://github.com/Shiaoming/Python-VO.git cd Python-VO
-
Install python packages
pip install -r requirements.txt
- edit dataset path in
params/*.yaml
; - run
python main.py --config params/*.yaml
in terminal.
For example, to evaluate the SuperPoint with SuperGlue, run:
python main.py --config params/kitti_superpoint_supergluematch.yaml
Absolute and relative translation errors on KITTI sequence 00
Average relative translation errors on KITTI sequence 00
orb_brutematch | sift_flannmatch | superpoint_flannmatch | superpoint_supergluematch |
---|---|---|---|
0.748m | 0.085m | 0.177m | 0.103m |
Trajectory of ORB feature with brute matcher on KITTI sequence 00
- red: ground truth
- green: estimated trajectory
Trajectory of SIFT feature with FLANN matcher on KITTI sequence 00
- red: ground truth
- green: estimated trajectory
Trajectory of SuperPoint feature with FLANN matcher on KITTI sequence 00
- red: ground truth
- green: estimated trajectory
Trajectory of SuperPoint feature with SuperGlue matcher on KITTI sequence 00
- red: ground truth
- green: estimated trajectory