算矩阵的基础知识
解析本质、基础、单应矩阵的自由度
1 寻找初始像对
1.1手动选择ID
1.2自动筛选
①prior focal length存在情况下,开始筛选
- 匹配点数由小到大排序
- 第二张候选影像的匹配数目大于init_min_num_inliers(100)
②两视图Triangulation
2.1 F矩阵的自由度=7
- 从cv角度,3*3矩阵9个参数
- 因为up2scale自由度-1
- 又因为rank(F)=2自由度-1
- 从摄影测量角度:
- 5pose
- +2 intrinsic
- fx和fy,通常s=0,主点坐标(cx,cy)不参与优化
- ①八点法,有唯一解,考虑噪声实际是转为:构建超定方程 ,最小二乘求解。
- 注意:由于会有误差,我们需要强制约束rank=2
- 具体方法:将SVD分解的特征值最后一项(最小项)置为0再重构,代码如下:
// Enforcing the internal constraint that two singular values must non-zero
// and one must be zero.
Eigen::JacobiSVD<Eigen::Matrix3d> fmatrix_svd(
ematrix_t.transpose(), Eigen::ComputeFullU | Eigen::ComputeFullV);
Eigen::Vector3d singular_values = fmatrix_svd.singularValues();
singular_values(2) = 0.0;
const Eigen::Matrix3d F = fmatrix_svd.matrixU() *
singular_values.asDiagonal() *
fmatrix_svd.matrixV().transpose();
- ②七点法:9个未知参数用7个点解,未知数>方程数。可以构建新的方程来解决:
3 本质矩阵E
3.1 本质矩阵自由度为5
- cv角度:6-1=5
- 相机位姿6pose(3位置、3角度)
- 尺度up2scale -1
- 摄影测量角度:直接5pose定向元素
3.3 本质矩阵的求解:
- 8点法,与8点法求F同,构建超定方程解最小二乘
- 注意强制约束,通常是令λ1=(λ1+λ2)/ 2,λ2=λ1,λ3=0
-
5点法,非线性求解过程复杂,一般都是计算基础矩阵F后结合内参K求解本质矩阵E(如orbslam2)
- 综合来说5点法比8点法好一些,8点法适用于车载的forward-facing,但在sideways-facing表现不如5点法
5 从矩阵恢复R和t
5.1 本质矩阵Essential恢复Rt
- SVD解出4个解
- 三角化求出前方3D点最多的那组姿态参数
Reference:大纲参考网课