非常感谢Jichao_Peng和.https://zhuanlan.zhihu.com/p/55567702
基础矩阵F和本质矩阵E 单应矩阵H求解 不管是是那种矩阵,在求解方法的分类上大致是都可以分为基于代数误差的线性估计和基于几何误差的非线性估计。在基于代数误差的线性估计中,不管是那种矩阵最后的形式一般都是
Ax=b
其中A是由匹配的点构成的矩阵,而x是由待解的基础矩阵或者单应矩阵的元素构成的向量,b是根据解法的不同而不同,在基于几何误差的非线性估计中,又几乎都有黄金标准方法(重投影误差)和一阶几何误差(Sampson距离)等方法
1.基础矩阵求解
两视图几何
注明;x-x'是像素点,p-p'是归一化像素点
基础矩阵的性质见:https://blog.csdn.net/weixin_39752599/article/details/103497088
1.1 基于代数误差的非线性估计
由对极几何得到:
得到结果为:
得到:
基本矩阵一对点只能确定一个约束方程,给定n对匹配点就得到如下方程组:
8点法
n=8,这就是解解空间为1维的线性方程组
8点法成功的关键是在构造解的方程之前应对输入的数据认真进行适当的归 一化,图像点的一个简单变换(平移或变尺 度)将使这个问题的条件极大地改善,从而提高结果的稳定性
算法步骤:
7点法
7-点:仅用 7 组点对应来估计 F(OpenCV:findFundamentalMat—runkenel—run7point)
好处(1):因为考虑7自由度,必定生成 一 个秩 2 的矩阵,从而无需添加强迫约束
好处(2):保证一个高概率的没有野值的结果所需的采样次数是样本集大小的指数函数,例如,8 组时达 99% 的监性度 时,所需的采样数是 7 组时所需采样数的两倍
坏处:它可能给出 F 的 3 个实数解,且所有 3 个解都要通过检验来选择
对于Af=0 ,Rank(A)=7<n=9,所以存在一个基础解系 ,基础解系中的向量(自有变量)的个数为9-7=2个,利用SVD 分解的方法得到两个对应于系数矩阵A的右零空间的基向量f1, f2 ,
即为A=U∑VT中VT的最后两行. f1=VT(7), f2=VT(8) , 则方程组的基础解系 f=k*f1+(1-k)*f2 ,由 f, f1, f2组成的矩阵 F 也满足这个关系:F=k*F1+(1-k)*F2,再加入det(F)=0的约束,
即det(k*F1+(1-k)*F2)=0 ,得到一个关于k的三次多项式,可以求解出来三个可能的F解。
n点法
若A的秩正好为8,则 f 存在唯一解,可以通过线性算法求解 f,将 f 确定到只差一个常数因子。
但是实际上,不可能得到精确的图像点对应,所以需要构建多于8个图像点的对应关系,构成一个超定方程,即不一定 存在 f 使得上式成立,需要通过最小二乘法求解。
根据多视图几何,对于上述方程,若 f 是一个解,则kf也是解,一个合理的约束是只求|| f ||=1的解。
问题转化为求使得|| Af ||最小化并满足|| f ||=1的 f
b. 强迫约束(因为方程的个数>自由度):用最接近F的矩阵F’ 代替F
上述求得的 f 转化为的矩阵F一般不满足秩为2的约束,所以需要对F进行修正,将F的三个奇异值修正为2个,就F满足 了秩 为 2的约束。所以需要对F进行SVD分解,然后修正中间的奇异值矩阵.
1.2 基于几何误差的非线性估计
将估计基本矩阵的问题化为数学的最优化问题,然后使用某种优化迭代算法求解。算法如下:
(1) 构造基于几何意义的目标函数
(2) 选取8点算法的结果作为迭代算法的初始值
(3) 选取一种迭代方法(L-M方法), 迭代求解最小化问题
构造基于几何意义的目标函数,常用准则:
(1).点到对应极线距离的平方和(一般是通过数值求解之后出F矩阵之后用这个判断是否满足要求)
(2).反投影距离,就是最常见的重投影误差
2.本质矩阵求解
2.1 基于代数误差的非线性估计
8点法
本质矩阵的八点法求解与基础矩阵是一致的,不同的一点是其强迫约束不同,因为本质矩阵的性质中有一条是其奇异值 分 解 的两个非零奇异值相等,因此再SVD的处理中按照如下方式处理;
5点法:
原理参考文献:An Efficient Solution to the Five-Point Relative Pose Problem
3.单应矩阵求解
3.1 基于几何误差的非线性估计
单应性矩阵 通常描述处于 共同平面 上的一些点在 两张图像之间的变换关系。
为两个匹配像素点的 归一化平面坐标 (也可为其他点,只要 共面且3点不共线 即可)
将第三个约束带入前两个:
因为H有8个自由度,所以分为以下两种方式计算单应矩阵
解法一:最小配置解情况
设置 h9=1,上面方程的右侧是一个9维的向量,其实就是H矩阵九个未知量,根据尺度不变性的理解,这里第一种方法是将尺度不变性理解为九个元素中间的某一个为1,这样就消除了尺度不变性,假定选择最后一个元素为1的话
这样一组匹配点对就可以构造出两项约束,于是自由度为 8 的单应矩阵可以通过 4 对匹配特征点算出(注意:这些特征点 不能有三点共线的情况)
这是一个线性方程组,如果匹配点的数量多于4对点的话,就是超定方程,采用最小二乘法,如果是4对点的话,就是普 通的非齐次线性方程组,采用高斯消去法就可以。
这种方法的确定是,如果所选为1的元素接近0,结果将导致不稳定解,因此更推荐解法二
解法二:DLT算法
上述方程形式为Ah=x,其中矩阵A为的秩为8,未知向量h的维数为9,如果四对点都是准确点的话,上述方程存在一维的 零 空间,即存在一个线性解,但是如果匹配点都存在误差的话,通常的做法是在约束∣h∣=1的最小化范数∣Ah∣,即求∣Ah∣/ ∣h∣的最小值问题,该问题解为ATA的最小特征值的特征矢量,也就是A的最小奇异值的奇异矢量,总之其基本DLT算法步 骤如下:
3.2 基于代数误差的非线性估计
何误差分好几种情况,包括单图像误差、对称转移误差和重投影误差,如下图
上图的上半图就是对称转移误差,表示为
上图的下半图就是重投影误差,表示为
可以通过DLT获得其初始值,然后通过牛顿法或者列温伯格法进行迭代下降求得最后的值。
基于代数误差的方法会更快,而基于几何误差的方法会根据鲁棒性
参考:
1.https://blog.csdn.net/weixin_44580210/article/details/90116621
2.https://blog.csdn.net/weixin_44580210/article/details/90344511
3.https://blog.csdn.net/u011178262/article/details/86668106
4.https://zhuanlan.zhihu.com/p/55567702