【视觉SLAM十四讲】视觉里程计1

特征点与描述子

长久以来视觉SLAM中的算法主要分为两大类:

特征点法:需要计算特征点和描述子,计算较为耗时

直接法:基于特征点计算图像光流以避免计算和匹配描述子,缩短计算时间,但要求相机运动较为平滑(或采样频率较高)

ORB特征

FAST关键点

1.以p像素为圆心,3个像素为半径画圆形,若圆上的十六个像素中有连续八个像素的强度亮于或暗于p则选为关键点。

 2.为了保证尺度不变性,需要对FAST特征点做图像金字塔,让特征点可以在本帧图像和下一帧图像在金字塔中的不同层之间进行匹配。

3.保证旋转不变性,需要计算特征点区域质心,将几何中心指向质心的连线作为方向向量。

BRIEF描述子

BRIEF是一种 二进制描述子,BRIEF用一张采样序列表来采样两个像素p、q之间的大小关系:如果p比q大则取1,反之取0。通常长度在128~512之间。BRIEF描述子本身并不具有旋转不变性,但是由于FAST特征点中算出了一个方向向量,可以通过方向向量的角度\theta对BRIEF描述子加以处理使其具有旋转不变性。如果规定方向向量的角度\theta \in \left [ -\pi ,\pi \right ],

 //ORB采样模板中提取出来的采样对
cv::Point2f p(ORB_pattern[idx_pq * 4], ORB_pattern[idx_pq * 4 + 1]);
cv::Point2f q(ORB_pattern[idx_pq * 4 + 2], ORB_pattern[idx_pq * 4 + 3]);
// rotate with theta
        cv::Point2f pp = cv::Point2f(cos_theta * p.x - sin_theta * p.y, sin_theta * p.x + cos_theta * p.y)
                         + kp.pt;
        cv::Point2f qq = cv::Point2f(cos_theta * q.x - sin_theta * q.y, sin_theta * q.x + cos_theta * q.y)
                         + kp.pt;

在相同的像素坐标系下,计算一个特征点的BRIEF描述子时,让描述子的坐标也旋转theta角度,在匹配具有相同像素特征但是旋转的特征点时,这种描述会具有旋转不变性。

对极几何(已知一对匹配点,求解t和R)

2D-2D的问题,公式给出

p_{1}\simeq KP,p_{2}\simeq K(RP+t)

上面这个式子其实就是在说世界坐标系下某一条射线的变换是一个像素点,和下面这个式子等价

p_{1}=s_{1}KP,p_{2}=s_{2}K(RP+t)

 

x_{2}\simeq Rx_{1}+t

x_{2}^{T}t^{\wedge }x_{2} \simeq x_{2}^{T}t^{\wedge}Rx_{1}

x_{2}^{T}t^{\wedge}Rx_{1}=p_{2}^{T}K^{-T}t^{\wedge}RK^{-1}p_{1}=0

两个重要的矩阵:

本质矩阵 E=t^{\wedge}R

基础矩阵 F=K^{-T}EK^{-1}

单应矩阵

若场景中的特征点都落在同一平面上,那么此时约束条件增加,此时可以求单应矩阵H

对于单目视觉里程计的讨论

1.尺度不确定性问题:

尺度不确定性是由于求解出来的t乘以任意常数仍然使得E=0成立,我们通常对t进行归一化,但是归一化过后的长度具体是多少是不得而知的。尽管如此,在第一帧到第二帧确定t的尺度过后,可以用三角测量估计点的深度,后续用估计出的点的深度在第二帧和第三帧之间使用Pnp方法,求解第三帧的位姿,然后用三角测量确定更多匹配点的深度。

2.尺度漂移问题:

单目视觉中由于基于三角测量的深度计算依赖于第一步计算出来的R、t,而Pnp的计算又依赖于三角测量的结果,Pnp的计算结果又用于计算三角测量。这样的依赖循环导致误差会在计算过程中传递和累积。

而RGBD和双目视觉其PnP的计算由于深度误差只与测量误差和噪声有关,与上一步计算结果无关,不会有这个问题

3.初始化纯旋转问题:

本质矩阵E=t^R,若初始化时只有旋转而没有平移t,会导致R的求解失败,所以单目视觉的初始化必须要有平移。

4.对极约束求解问题:

对极约束求解如果匹配的点对数量多于八对可以最小化二次型的方法来处理,不过更倾向于用RANSAC方法来处理误匹配情况。

Ransac方法(random sample Consensus)

Ransac步骤

RANSAC算法的输入:

  • 1.一组观测数据(往往含有较大的噪声或无效点
  • 2.一个用于解释观测数据的参数化模型
  • 3.一些可信的参数

迭代过程:

  1. 在数据中随机选择n个点设定为内群
  2. 计算适合内群的模型,如线性直线模型y=ax+b
  3. 把其它刚才没选到的点带入刚才建立的模型中,计算是否为内群点
  4. 记下内群数量
  5. 重复以上步骤, 迭代k次
  6. 比较哪次计算中内群数量最多,内群最多的那次所建的模型就是我们所要求的解

注意:不同问题对应的数学模型不同,因此在计算模型参数时方法必定不同,RANSAC的作用不在于 计算模型参数。(这导致ransac的缺点在于要求数学模型已知)

三角测量(已知R、t,求匹配的特征点深度)

 s_{2}x_{2}=s_{1}Rx_{1}+t

s_{2}x_{2}^{\wedge}x_{2}=0=s_{1}x_{2}^{\wedge}Rx_{1}+x_{2}^{\wedge}t

三角测量的矛盾:要提升三角测量的精准度有两种办法,一是提升图像分辨率,但这会造成计算量和成本的增加;另外一种是增加平移量,但增加平移量可能导致图像外观发生明显变化进而导致匹配失败。

3D-2D:PnP(perspective-n-points)

Pnp可以在已知n个3D空间点以及其投影位置时估计相机的位姿。特征点的3D位置可以由三角化或者RGB-D的深度图确定。(后面摆了,公式好长)

3D-3D:ICP方法(iterative closest point)

激光SLAM中也会遇到ICP问题,但由于数据特征不够丰富,激光SLAM中的点是没有匹配关系的;而此处讨论的视觉SLAM中的ICP问题是以及匹配的点集。

定义对第i点的误差项

e_{i}=p_{i}-(Rp_{i}^{'}+t)

构建最小二乘问题

\underset{R,t}{min}\frac{1}{2}\sum \left \| (p_{i}-(Rp_{i}^{'}+t)) \right \|_{2}^{2}

参考资料:

视觉SLAM十四讲 第七章 三角化估计深度 - 知乎 (zhihu.com)icon-default.png?t=N6B9https://zhuanlan.zhihu.com/p/112592149

ransac算法思想     https://www.cnblogs.com/silence-cho/p/15143415.htmlhttps://www.cnblogs.com/silence-cho/p/15143415.html什么是单目SLAM的尺度不确定性,为什么会出现尺度漂移? - 知乎现在刚开始自学vslam的相关知识,对单目SLAM尺度这个问题始终不太理解,无论是特征点法和直接法(如DSO)…https://www.zhihu.com/question/301977205

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值