TheiaSfM代码阅读
# 0. The pipeline for estimating camera poses and structure is as follows:
- Filter potentially bad pairwise geometries by enforcing a loop constaint on rotations that form a triplet.
- Initialize focal lengths.
- Estimate the global rotation for each camera.
- Remove any pairwise geometries where the relative rotation is not consistent with the global rotation.
- Optimize the relative translation given the known rotations.
- Filter potentially bad relative translations.
- Estimate positions.
- Estimate structure.
- Bundle adjustment.
- Retriangulate, and bundle adjust.
# 1. View Graph
遍历View Graph中所有的边,如果边的两视图内点小于阈值,则删除该条边。
遍历所有的边,计算每条边的连接数,保留连接数最大的边。
# 2. Calibrate
加入视图时设立分组的结构,每一组设立一个代表性的视图,同一组中的视图共享代表视图的内参。
# 3. Estimate Global Rotation
生成最大生成树,与最小生成树方法类似,只需要把权值设置为负值。
选择L1L2、nonlinear、linear求解。
# L1L2
构建线性系统,
计算误差项
构建方程组,执行L1_solver,求解出增量,更新GlobalRotations。
计算当前的误差项,迭代。
SolveIRLS(),看不懂了。
# Linear
# nonLinear
# 4. Filter Rotation
通过Rotations过滤边,如果一条边的两个视图有任意一个视图没有估计出rotation,或者,如果两视图间的旋转过大,则删除这条边。
移除没有连接到最大子图的边。