匹配好的点云通常会被离群点污染,也就是错误的数据关联。离群点出现的可能原因是图像噪声,遮挡,特征检测子或描述子的数学模型没有处理到的视角和光照变化。比如,大部分特征匹配技术都假定线性光照变化,纯相机旋转和缩放,或仿射形变。然而,这些只是数学模型,估计了现实中复杂的多的状况(图像饱和,透视形变,运动模糊)。如果需要相机运动准确地估计,那么移除离群点就非常重要。在大部分视觉里程计中移除离群点最需要谨慎处理。图
6
显示了移除离群点前后的视觉里程计结果。
图
6
:之前估计的视觉里程计轨迹与移除离群点之后的对比。
离群点去除算法有效地使用了运动模型的几何约束。鲁棒估计方法,比如
M
估计,数据删除,外部匹配、离群点去除,都可以使用,只有在离群点相对较少的情况下才有效。在离群点出现时,模型估计的标准方法是
RANSAC
。
RANSAC
的核心思想是随机提取数据点计算模型的假设前提,再在其他数据点中验证这个假设。如果其他数据都一致验证这个假设,它就是一种有效方案。对于视觉里程计中的两视图运动估计,估计的模型是两个相机位置间的相对运动(旋转和平移)和用于候选特征匹配的数据点。通过计算点到极线的距离可以找到满足前提条件的内点。点到对极线的距离通常通过一阶估计计算
---
称为
Sampson
距离
---
这样效率更高。另外一种点到对极线的距离计算方法是论文
36
提出的直接误差测量。直接误差测量图像特征和对极平面的夹角。作者声称直接误差对全景相机和广角相机非常有效,对一般的相机也同样有效。
RANSAC
的框架如算法
1
所示。
算法
1
:
视觉里程计,从
2D
到
2D
的对应。
1初始化:
A
是一组
N
个特征的对应关系
2重复以下步骤:
2.1)
从
A
中随机选取一组点
s
2.2)
给这些点适配一个模型
2.3)
计算所有其他点到这个模型的距离
2.4)
构建内点集合(比如,计算到模型距离
的点的数量)
2.5)
存储内点
2.6)
迭代直到达到最大的迭代次数
3选择数量最多的一组内点作为方案
4用所有内点估计模型。
通过计算等式
1
得出子集数量
N
(迭代次数)以确保可以找到一个正确的方案:
其中,
s
是模型中数据点的数量,
e
是离群点占数据点的百分比,
p
是要求的成功的概率。考虑到鲁棒性,在很多实际操作中,
N
通常乘以
10
。
RANSAC
更高级的执行方法是在迭代的过程中,对离群点分数比值进行估算。
如上所示,
RANSAC
是一种概率方法,不同的方法有不同的解决方案、具有不确定性;然而,当迭代的数量增加时,方案会趋向稳定。
2.2最小模型参数法
图
7. RANSAC
的迭代次数与离群点分数比值的对比
如图
7
所示,
N
是数据点数量
s
次方指数,用于估计模型。因此,使用模型的最小参数法非常有必要。在第一部分中,曾经讲到过对未标定的相机使用
8
点法解决方案。尽管也可以用于标定过的相机,但当场景点共面时,
8
点算法会失效。不过,当相机标定过后,
6
自由度运动模型可以从最少
5
点对应关系中得到,解决这一问题的方案是
1913
年论文
37
提出的。几种最小
5
点解决方案后来也有很多人提出,但最有效的是论文
39
的方案,论文
41
提出过,后来论文
42
修正过。在这之前,
6
点,
7
点,
8
点解决方案都广泛应用。但
5
点法更有优势,应用于平面场景中。(可以看到,
8
点和
7
点法用于未标定过的、透视模型相机。全景相机也可以使用这两种方法,相机需要标定。另外,未标定的全景相机
n
点法也有很多研究,其中
n
由镜头类型或鱼眼镜头决定。论文
48
中,对标定过的全景相机,
6
自由度运动模型可以从
2
对正对图像点中恢复。正对的图像点是它们的射线对齐但朝不同的视角方向。这也表明正对的图像点可以独立地估计出平移和旋转变换。)
尽管
5
点算法是标定相机的最小解决方案,过去几十年中,仍然有很多尝试去减小运动估计参数所需的数量。论文
49
提出了
3
点法估计已知相机方向角的情况。这种情况可以用于带有重力传感器的相机(实际上,重力矢量可以固定两个相机航向角度。)后来,论文
50
改进了这个研究,
3
点法可以用于
4
点(
3+1
)
RANSAC
算法。
3+1
指的是增加了一个远场景点(理论上是无穷远场景点)用于确定两个航向角。采用这个
4
点
RANSAC
,他们成功演示了
6
自由度的视觉里程计。论文
51
提出了最小
2
点的
6
自由度视觉里程计,从带有
IMU
的相机中得到满旋转矩阵。
在平面运动场景下,运动模型复杂度可以减少到
3
自由度,可以用论文
52
所示的
2
点参数法。对于汽车来说。论文
9
和
53
表明,运动模型完全由平面和圆圈表示,因此运动模型的复杂度可以降低到
2
自由度,就可以用
1
点法解决。
1
点法估计运动模型是最少的参数法,使得
RANSAC
算法非常有效率。另外,如果用直方图,选出离群点可以在很少或单一迭代中完成。论文
54
对比了视觉里程计的
5
点,
2
点和
1
点算法做了性能评估。
这里总结一下,如果相机运动没有约束,用于估计运动模型的最少点数是
5
点,应该使用
5
点
RANSAC
(或
6
点,
7
点或
8
点)。当然,使用
5
点
RANSAC
比
6
点,
7
点,
8
点的迭代次数更少。表
1
对比了
8
点,
7
点,
5
点,
4
点,
2
点,
1
点方法中,
RANSAC
算法最少迭代次数,作为模型参数
s
的等式数量。这些值可以从等式
1
中获取,假定成功的概率
p=99%
,离群点百分比
e
=50%
。
2.3 减少RANSAC迭代次数
表
1
中,
p=99%
,
e
=50%
,
5
点
RANSAC
需要最少
145
次迭代。然而,现实中,事情并没有这么简单。有时,离群点数量低估了,需要增加迭代次数以找到更多的内点。有时,甚至需要几千次的迭代。因此,有必要考虑加快
RANSAC
的迭代速度。最大似然估计参数统计使得对应关系的测量更可靠,增强了对假设的估计。论文
56
有进步的参数统计基于相似度对对应关系进行排序,从排在前面的点开始生成运动模型。论文
57
中的优先权
RANSAC
使用运动估计的优先计分和固定的迭代次数。论文
58
中的不确定性
RANSAC
整合了特征的不确定行,减少了潜在离群点的数量,因此强制减少了迭代次数。论文
59
中的确定性
RANSAC
方法估计了匹配正确的概率。
上面提到的所有算法都是直接从点云生成运动假设模型。相反,其他算法从汽车运动模型分布采样确定假设。
在这些所有算法中,优先权
RANSAC
是应用最多的,因为迭代次数可以预先指定,在所有的优势中,实时运行优势是最重要的。
2.4 RANSAC用最小子集,真的好吗?
考虑到运动速度,使用最小点方法绝对优于其他方法。然而,当图像匹配有很多噪声时,即使是
5
点
RANSAC
也可能不是最好的选择。这种情况下,用多点法而不是最小点法可以获得更好的性能(在给定精度和内点数量的情况下)。这里解释一下,比如一个
5
点
RANSAC
的一个迭代步骤:首先,随机选
5
个点估计运动模型;其次,用所有其他点来检验这个假定模型。如果
5
个内点有很大的图像噪声,运动估计就不精确,当测试其他点时就表现出内点很少。相反,如果用
5
点法从更多点中做运动估计,噪声的影响就会被平均掉,估计出来的模型就更精确,当然就会识别出更多的内点。因此,当计算并不需要实时处理时,在有噪声特征的情况下,使用非最小集要由于最小集。
在视觉里程计中,很多单个的变换
Tk,k-1
连接起来形成机器人
Ck
的当前位姿。每个变换
Tk,k-1
都有不确定性,相机位姿
Ck
的不确定性依赖于之前变换的不确定性。具体如图
8
所示。视觉里程计计算变换
Tk+1,k
的不确定状态依赖于相机几何和图像特征。论文
3
可以看到立体相机的情况。
图
8. Ck
相机位姿的不确定性由
Ck-1
(黑色的实心椭圆)的不确定性和变换
Tk,k-1
(灰色虚线椭圆)的不确定性组成。
下面将讨论不确定传播。每个相机位姿