标签:
1. 基本概念
1) 视觉导航系统分为三个模块:图像预处理模块、运动参数估计模块(自己在哪)、地图创建(这是什么地方)和导航模块(怎么离开这个地方)
2) 视觉里程计是其中的一部分,即根据飞行器在飞行过程中拍摄的序列图 像来估算微型飞行器的运动参数
3) 视觉里程计一般涉及前两个模块
2. 微型飞行器运动参数估算数学建模
1)摄像机模型,解决三维场景中的点和图像平面的点的映射问题
2)采用针孔模型(pin-hole model)
3)涉及四种坐标系:
(1) 成像平面坐标系(X-Y坐标系)
(2) 图像坐标系(u-v坐标系)
(3) 摄像机坐标系(xyzO)
(4) 世界坐标系(xwywzwOw)
具体来解释每一个坐标系以及各个坐标系的联系:
(1) 成像平面坐标系(X-Y坐标系)
定义该坐标系原点为摄像机光轴与图像平面的交点,X,Y轴分别与成像平面的两条边平行,原店一般位于图像中心,但是由于硬件制作的原因,存在偏差
(2) 图像坐标系(u-v坐标系)
坐标系原点位于图像左上角,u轴沿图像边界自左向右,v轴沿图像平面从上向下,以像素为单位,坐标(u,v)对应的值就是该像素点的灰度值。
(3) 图像坐标系与成像平面坐标系的转换
(7) 世界坐标系(
设点在t1时刻相对于摄像机坐标系 的坐标为Oxy,p=(x,y,z);在t2时刻相对于摄像机坐标系 O’x’y’的坐标为p’=(x’,y’,z’)
设摄像机在t1时刻相对于t2时刻的旋转矩阵为R,平移矢量为T
有 p’=Rp+T
3. 基于特征点对应的飞行器的运动参数估计
已知两摄像机坐标系下的点坐标满足:
E为本征矩阵,充要条件为对其奇异值分解后,有两个相等的奇异值,其第
三个奇异值为0
由式左边为零知两组特征点满足关系:
齐次,有:
如何投影到本征矩阵空间?
强制改变该矩阵的奇异值(证明见YI Ma著作《An Invitation to 3D vision》p86)
考虑到
其中 表示绕Z轴旋转90度得到的旋转阵:
由于尺度scale的关系,不同的t,决定了以后计算点P的深度也是不同的,所以恢复的物体深度也是跟尺度scale有关的,这就是论文中常说的结构恢复structure reconstruction,只是恢复了物体的结构框架,而不是实际意义的物体尺寸。
知道了相机的轨迹以后,使用三角法就能计算某个点的深度(见Hartley著作《Multiple view geometry》chapter10 and chapter12)对于三维空间中一点P,假设第一个摄像机坐标系C1为世界坐标系,P在C1中的表示为: ,C1的外参矩阵M1为单位矩阵:
用最小二乘求解,和求本征矩阵一样,计算矩阵A的SVD分解,然后奇异值最小的那个奇异向量就是三维坐标P的解。
计算出来的P的坐标就是P在世界坐标系中的坐标,这里就是P在摄像机坐标系C1中的表示
总结
提到本征矩阵恢复的R,T组合有四种组合形式,我们需要通过计算点的深度来判断R,T的哪种组合是正确的,和这篇博客结合起来,获得R,T正确组合的流程和代码如下有了外参矩阵,我们就可以得到这些点坐标的关系:
1.利用八点法求出本征矩阵E
2.将E投影到真正本征空间(令D=[1,1,0])
3.恢复旋转矩阵R和平移矩阵T(四组)
4.对每一组R,T:
1)重构相对于C1的特征点P的3D位置
2)计算相对于C2的特征点P的3D位置
尺度如何恢复?
1.2Dto2D的方法:对两对图像计算E并恢复R,T时,他们的尺度都不一样,本来是同一点,在不同尺寸下,深度不一样,无法构建地图(mapping),尺度需要统一
同一点在两帧图像上的深度比值与两位移比值相同,通过前一个位移参数的幅值乘以一个比例系数求下一个位移参数的幅值
2.3Dto2D的方法:通过最开始的两帧图像计算E恢复了R,T,并通 过三角法计算出了深度,那我就有了场景点的3D坐标,后续的视频序列就可以通过3Dto2d (opencv里的solvePnp) 来进行位姿估计。
确定初始深度?
对于飞行器来说,可通过其他导航装置获得(IMU等),多传感器融合
如何解决尺度漂移?
3Dto2D方法又会产生新的问题–scale drift。因为,两帧间的位姿总会出现误差,这些误差积累以后,使得尺度不再统一(SLAM后端优化)
下篇博客会继续将这些问题。
博客中的参考资料
1.YI Ma著作《An Invitation to 3D vision》
2.Hartley著作《Multiple view geometry》
3.白巧克力亦唯心的博客http://blog.csdn.net/heyijia0327
标签:
原文地址:http://blog.csdn.net/ipatient/article/details/51219442