Multiview Geometry
Multi-view Geometry
Bundle Adjustment
- Unknown
Position of 3D points
andeach camera’s relative pose
($6n+3m$ DoF)
- Given
- Point correspondence
- camera matrices
- position of 3D points
- each camera’s relative pose
- Constraints
- $n \times m \times \text { projection } \mathbf{x}_i^j=\mathrm{P}_j \mathbf{X}_i=\mathrm{K}_j\left[\mathrm{R}_j \mid \mathbf{t}_j\right] \mathbf{X}_i$
- Solution ⇒ Non-linear least-square optimization
- Cost Function
-
Reprojection error
$\sum\limits_i^n \sum\limits_j^m v_i^j\left|\mathbf{x}i^j-\mathrm{P}_j \mathbf{X}_i\right|{\Sigma}^2 \quad \text { where } \quad v_i^j= \begin{cases}1 & \text { if } \mathbf{x}_i^j \text { is visible } \ 0 & \text { otherwise }\end{cases}$
-
- Optimization
- Levenberg–Marquardt method
- Gauss-Newton method
- Cost Function
Bundle Adjustment and Optimization Tools
- OpenCV
- No function (but cvsba is available as a sba wrapper.)
- Bundle adjustment
- (Graph) Optimization
- g2o (General Graph Optimization)
- iSAM (Incremental Smoothing and Mapping)
- GTSAM
- Ceres Solver (Google)
Applications
Structure-from-motion
- SfM (Global)
-
Build a viewing graph (well-matched pairs) while finding inliers
⇒ Load images and extract features
⇒ Match features and find good matches (which has enough inliers)
- Initialize cameras ($R, t, f, …$)
- Initialize 3D points and build a visibility graph
-
Optimize camera pose and 3D points together (BA)
-
- SfM (Incremental)
- Incrementally add more views
- repeat 4~7
- Build a viewing graph (well-matched pairs) while finding inliers
- Select the best pair
- Estimate relative pose from the best two views (epipolar geometry)
- Reconstruct 3D points of the best two views (triangulation)
- Select the next image to add
⇒ Separate points into known and unknown for PnP (known) and triangulation (unknown)
- Estimate relative pose of the next view (PnP)
- Reconstruct newly observed 3D points (triangulation)
- Optimize camera pose and 3D points together (BA)
Visual SLAM
-
Feature-based Method
vsDirect Method
Visual Odometry
-
Visual Odometry
vsWheel Odometry
Visual Odometry Wheel Odometry + direct motion measure + simple calculation + six degree-of-freedoms + easy to install − heavy computation − indirect motion measure (e.g. slippage) − visual disturbance (e.g. moving objects) − two degree-of-freedoms − necessary to be on rotor/shaft Visual Odometry
vsVisual SLAM
- Visual Odometry
-
no assumption on trajectories
⇒ navigation / large space (outdoor)
-
- Visual SLAM
-
closed-loop is preferred for convergence
⇒ mapping / small space (indoor, campus)
-
- Visual Odometry
- Feature-based Monocular Visual Odometry
-
Two-view Motion Estimation
- Find 2D-2D feature correspondence
-
Feature
→ Good-Feature-to-Track [Shi94_CVPR] with bucketing to distribute features
-
Correspondence
→ Lucas-Kanade optical flow [Lucas81_IJCAI]
-
- Reject outlier correspondence
- Adaptive MSAC [Choi09_IROS]
- Iterative 5-point algorithm [Choi15_IJCAS]
-
Error measure
→ Sampson distance
- Estimate (scaled) relative pose
- Normalized 8-point algorithm
- Scale-from-ground with asymmetric kernels [Choi13_URAI]
- Find 2D-2D feature correspondence
-
PnP Pose Estimation
- Find 2D-2D feature correspondence
-
Feature
→ Good-Feature-to-Track [Shi94_CVPR] with bucketing to distribute features
-
Correspondence
→ Lucas-Kanade optical flow [Lucas81_IJCAI]
-
- Find 2D-3D point correspondence & Reject outlier correspondence
- Adaptive MSAC
- Iterative PnP algorithm (3-point algorithm)
-
Error measure
→ Projection error
- Estimate pose
- Iterative PnP algorithm
- Scale-from-ground with asymmetric kernels [Choi13_URAI]
- Updat 3D points map
- Bundle adjustment over last $K$ keyframes Reprojection error with Cauchy loss function
- Find 2D-2D feature correspondence
-