估计2D投影矩阵

本章主要估计这么几种2D投影矩阵

  1. 2D齐次矩阵, 就是从一个图像中的点到另外一个图像中的点的转换, 由于点的表示都是齐次的, 所以叫其次矩阵.
  2. 3D到2D的摄像机矩阵
  3. 基本矩阵
  4. 三视图之间的转换矩阵(这个可以略过)

形式化的表示, 我们已知xixix_i \leftrightarrow x'_i, 我们需要计算一个3×33 \times 3HH, 满足xi=Hxix'_i=H x_i

需要多少对点 HH3×33 \times 3 那么就是8个自由度, 所以最少4对点

估计算法的种类 我们考虑到图像中的对应点都是由噪声的, 那么只有4个点其实估计的结果就不准确了, 如果我们找出多于4对点, 那么我们就需要一个损失函数, 并且把它最小. 下文介绍的主要分成2类, 一类是代数误差, 一类是几何误差.

黄金标准算法 黄金标准算法不是一个具体的算法. 他是一个评判标准. 通俗来讲:假设我们有n个损失函数, 哪一个是最好的? 让HH能达到最小的损失函数就是最好的. 那么哪个损失函数让HH最小? 在"估计2D投影矩阵"这个问题里, 最好的损失函数就是书中4.8式. 优化最优损失函数的算法就叫黄金标准算法(p114 4.3), 其他损失函数给出的结果都是和4.8式的结果来比较的.

4.1 求解线性方程组算法(DLT)

原理很简单,既然xi=Hxix'_i=Hx_i, 那么就可以建立方程xi×Hxi=0x'_i \times Hx_i=0 , 把这个式子改写成Ah=0Ah=0, 找4对点解方程就行(SVD)

4.1.1 超定的情况

假设说我们找出了多余4对点, 那么怎么利用上多出来的信息? 我们考虑到点都是有噪声的, 那我们可以考虑最优化一个目标函数, 最直观的想法就是优化AhAh,同时满足A=1||A||=1,

4.1.2 非齐次坐标表示下的解法

这个解法不稳定, 因为是非齐次坐标, 丢失了尺度这个因子. 所以我们就略过

4.1.3 退化的情况

我们说,如果x1,x2,x3x_1,x_2,x_3共线 且x1,x2,x3x'_1,x'_2,x'_3也共线, 那么HH的解不是唯一的. 如果x1,x2,x3x_1,x_2,x_3共线 但是x1,x2,x3x'_1,x'_2,x'_3不共线, 这种情况下HH不存在, 但是我们用上述方程确实可以解出来一个HH, 那么这个HH是啥?代表啥? 书中给出的答案是,HH是一个奇异矩阵, 根本不代表任何映射.

4.1.4 由线段和其他几何实体找对应

除了点对应, 我们也可以找线对应. 比如我们可以用线对应来构造一个方程li=HTlil_i = H^T l'_i. 那么如果用线对应, 需要找多少对对应线? 我们需要的约束应该多于HTH^T的自由度. 所以4对对应线足够了 (每一对是2个约束). 如果我们考虑三维空间, 一对对应点提供3对约束, 那么求解三维HH用5对对应点就够.

但是如果我们把点和线混合起来就要小心. 比如说两对对应点和两对对应线是不能确定HH的, 得3对对应线和1对对应点. 因为2对对应线就是4条,它相当于五条线加四个共线的点,间p93 图4.1,三对对应线构成一个三角形, 他不会出现共线的情况.

4.2 其他的损失函数

4.2.1 代数距离

既然x=Hxx'=Hx , 那么我们可以优化xx'HxHx的距离

4.2.2 几何距离

几何距离考虑的是理论点与实际点的误差

我们先考虑第二个图像,假设第一个图像上的点都是准确的, 我们用xˉ\bar{x}来表示, 那我们就可以来优化

Σd(xi,Hxˉ)2\Sigma d(x'_i,H\bar{x})^2

我们把这个式子推广到第一幅图像, 就可以得到

Σd(xi,H1xi)2+d(xi,Hxi)2\Sigma d(x_i,H^{-1}x'_i)^2 + d(x'_i,Hx_i)^2

也就是第1幅图像的点变换到第二幅图像, 他们需要尽可能靠近. 反过来第2幅图像的点变换到第1幅图像, 他们也需要尽可能靠近.

4.2.3 重投影误差

讲这个概念以前, 我们需要一个概念, 就是理论上完美的点, 书中用x^\hat{x}表示. 首先我们要知道理论完美点不是xˉ\bar{x}, xˉ\bar{x}就是机器学习里的ground truth. 是不存在误差的. xx是我们知道的点, 是有噪声的. 那么我们用x,xx,x'估计出一个HH,HxHx 肯定不等于xx'. 但是我们可以找出一对x^,x^\hat{x},\hat{x}' ,他们可以完美的满足x^=Hx^\hat{x}=H\hat{x}', 注意, HH是从有噪声的数据里估计出来的, 而不是从xˉ\bar{x}种估计出来的.

根据这个思想, 我们可以去寻找一个H^\hat{H} 和一对x^,x^\hat{x},\hat{x}', 他们之间满足x^=Hx^\hat{x}=H\hat{x}', 然后让x,xx,x'靠近x^,x^\hat{x},\hat{x}'. 这其实是先从x,xx,x'估计出一个三维空间点, 然后再往图像上投影, 所以叫重投影.

4.2.4 代数误差与几何误差之间的关系

一句话总结, 他们之间差一个常数因子, 该常数因子由xx'的第三维坐标和x^\hat{x}'相乘得到.

4.2.5 重投影误差的几何含义

一句话概括 重投影误差相当于在4维空间中拟合一个平面. 通俗解释我们可以把x,xx,x'的坐标拼在一起, 得到X=(xi,yi,xi,yi)X=(x_i,y_i,x'_i,y'_i) 然后把x^,x^\hat{x},\hat{x}'的坐标拼在一起, 得到X^=(xi^,yi^,xi^,yi^)\hat{X}=(\hat{x_i},\hat{y_i},\hat{x_i}',\hat{y_i}')

那么XX^2||X-\hat{X}||^2就是重投影误差

以上思想还可以被用来拟合圆锥, 假设说我们要拟合圆锥CC, 找5个点直接解圆锥方程很很麻烦, 因为不是线性的. 那么我就求点到CC的距离, 让他们加起来最短,就可以了

4.2.6 sampson误差

其主要思想是用泰勒公式把要拟合的几何体展开到1阶, 让它余项等于0

4.2.7 对求解HH的另外一种几何解释

上文说了求解HH相当于在4维空间中拟合一个平面. 那么本节给出在n维度量空间中的几何解释. 求解H相当于在n维度量空间中找出一个和XX最接近的向量. 可以想象4维空间的平面在n维就成了点.

4.3 最大后验概率求解

我们知道图像中都会包含噪声, 如果我们认为噪声服从高斯分布, 那么我们就可以用高斯分布然后求解最大后验概率

比方说, 我们可以构造以下式子

P(x)=(12πσ2)exp(d(x,xˉ)2)/2σ2P(x)=(\frac{1}{2 \pi \sigma^2}) exp(d(x,\bar{x})^2)/2 \sigma^2

其中dd可以换成任何你喜欢的距离, 然后求解最大后验概率就可以

4.4 DLT算法中的不变量与正则化

4.4.1 坐标原点

图像原点有时候在左下角,有时候在右上角, 那么不同的原点对DLT算法有啥影响吗? 答案是有的, 对几何损失函数是没有影响.

那么我们有这样的结论, 假设有一个相似变换TT, 变换前的点xx计算出的HH, 和变换后计算出的HH'之间,相差一个倍数. 也就是矩阵的向量之间相差一个倍数.

4.4.3 几何损失函数的不变量

前文说了, 几何损失函数在相似变换下保持不变.

4.4.4 对点坐标的归一化

首先我们明确为啥要对点坐标归一化, 因为有的点坐标很大, 有的很小, 那么用SVD求解出来的答案会有很大的误差.

那么怎么归一化? 先把所有点的质心旋转到原点, 然后让缩放所有点, 使所有点到原点的平均距离等于2\sqrt{2}, 也就是让所有点的平均值等于(1,1,1)(1,1,1)

需要明确的是, 归一化的必须的不是可选的

4.5 迭代最优化

本节讲述如何用迭代的方法优化几何损失函数. 书中114页给出了一个案例, 我们来一起看一下: 已知多于4对点xxx \leftrightarrow x', 求解重投影误差

Σd(xi,xi^)2+d(xi,xi^)2xi^=H^xi^\Sigma d(x_i,\hat{x_i})^2 + d(x'_i,\hat{x_i}')^2 \\ \hat{x_i}'=\hat{H} \hat{x_i}

  1. 先初始化H^\hat{H} 用DLT解出一个初始值. 或者用RANSAC找出一个初始值.
  2. 使用这个初始值来计算重投影误差的sampson余项

或者用初始值以及xx 找出x^,x^\hat{x},\hat{x}', 根据H^,x^\hat{H},\hat{x}最优化重投影误差.

4.6 实验结果

一句话概括, DLT的效果事最接近黄金标准算法的

4.7 RANSAC

我们计算HH需要匹配点, 但其实很多点都是误匹配的, 所以我们先要找出合适的匹配点, 就用RANSAC找.

4.8配合RANSAC的自动算法.

  1. 先选4对点,找出HH
  2. HH估计出那些点是内点, 也就是与HxHx差距小于阈值的点.
  3. 内点数量如果够多就转下步, 否则再重复1到3
  4. 用所有的内点重新估计一次HH, 怎么估计呢?用最大后验概率, 因为现在的点比4个多, 直接解DLT肯定不合适
  5. 知道了HH那么对应点就确定下来了.

剩下的就是一些小问题,比如对应点怎么找?ORB SIFT FAST等等, 点与点之间距离怎么衡量?ORB等等找出来的都是描述子, 是一个向量, 直接算向量之间距离就可以. 怎么采样? 应该对整个图像均匀采样.