视觉SLAM模块:
最大后验概率估计 Maximum-a-Posterior,MAP:从带有噪声的数据中估计整个系统的状态,以及这个状态估计的不确定性有多大。
SLAM问题数学描述:
反对称矩阵 Skew-symmetric Matrix:
a × b = a a \times b = a a×b=a^ b b b
坐标系的欧式变换 Euclidean Transform:对于同一个向量p,它在世界坐标系下的坐标 p w p_w pw和在相机坐标系下的坐标 p c p_c pc是不同的,变换关系由变换矩阵 T T T描述。
旋转矩阵 Rotation Matrix / 方向余弦矩阵 Direction Cosine Matrix:两组基之间的内积组成。是一个行列式为1的正交矩阵。描述了一个旋转动作,其逆矩阵或转置矩阵描述了一个相反的旋转。
特殊正交群 Special Orthogonal Group, SO:这个集合由n维空间的旋转矩阵组成。
S O ( n ) = { R ∈ R n × n ∣ R R T = I , d e t ( R ) = 1 } SO(n) = \{R\in R^{n\times n}|RR^T=I,det(R) =1\} SO(n)={R∈Rn×n∣RRT=I,det(R)=1}
坐标变换: a ′ = R a + t a' = Ra+t a′=Ra+t
变换矩阵 Transform Matrix:引入齐次坐标,把旋转和平移写在一个矩阵中,使整个关系变成线性关系。正交矩阵且行列式为1。 ( a , 1 ) T (a,1)^T (a,1)T称齐次坐标。下标规定, T t o ∣ f r o m T_{to |from} Tto∣from
该矩阵的逆表示一个反向变换
T − 1 = [ R T − R T t 0 T 1 ] T^{-1}= \begin{bmatrix} R^T & -R^Tt \\ 0^T & 1 \\ \end{bmatrix} T−1=[RT0T−RTt1]
特殊欧式群 Special Euclidean Group, SE:变换矩阵
S E ( 3 ) = [ R t 0 1 ] SE(3)=\begin{bmatrix} R & t \\ 0 & 1 \\ \end{bmatrix} SE(3)=[R0t1]
旋转向量 Axis-Angle:任意旋转都可以用一个旋转轴和一个旋转角来刻画。旋转向量方向与旋转轴一致,长度等于旋转角。因此只需一个三维向量即可描述旋转。对于变换矩阵,我们是用一个旋转向量和一个平移向量即可表达一次变换。
从一个旋转矩阵R到旋转向量n的转换:设旋转轴为一个单位长度的向量n,角度为 θ \theta θ,则 θ n \theta n θn既可以描述这个旋转
R = c o s θ I + ( 1 − c o s θ ) n n T + s i n θ n R = cos\theta I+(1-cos\theta)nn^T + sin \theta n R=cosθI+(1−cosθ)nnT+sinθn^
θ = a r c c o s t r ( R ) − 1 2 \theta = arccos\frac{tr(R)-1}{2} θ=arccos2tr(R)−1
事实上,旋转轴上的向量在旋转后不发生改变 R n = n Rn = n Rn=n,即转轴n是矩阵R特征值1对应的特征向量。
欧拉角:用三个分离的转角rpy——三次绕不同轴的旋转来描述旋转。但是会产生奇异性问题导致自由度缺失。
四元数 Quarternion:扩展复数,既是紧凑的也没有奇异性。拥有一个实部和三个虚部。单位四元数对应一个以向量v为轴旋转 θ \theta θ角度的旋转操作,任意单位四元数都可表示为一个3D旋转
q = q 0 + q 1 i + q 2 j + q 3 k = [ s , v ] T , s = q 0 ∈ R , v = [ q 1 , q 2 , q 3 ] T ∈ R 3 q = q_0+q_1i+q_2j+q_3k=[s,v]^T,s=q_0\in R,v=[q_1,q_2,q_3]^T \in R^3 q=q0+q1i+q2j+q3k=[s,v]T,s=q0∈R,v=[q1,q2,q3]T∈R3,设 q a = [ s a , v a ] T , q b = [ s b , v b ] T q_a = [s_a,v_a]^T, q_b = [s_b,v_b]^T qa=[sa,va]T,qb=[sb,vb]T
运算
用四元数表示旋转:设有一空间三维点 p = [ x , y , z ] ∈ R 3 p = [x,y,z]\in R^3 p=[x,y,z]∈R3,以及一个单位四元数q指定的旋转。
四元数与欧拉角之间的转换
Quaternion2Euler 四元数转欧拉角:
[ w x y z ] = [ c o s ( R / 2 ) c o s ( P / 2 ) c o s ( Y / 2 ) + s i n ( R / 2 ) s i n ( P / 2 ) s i n ( Y / 2 ) c o s ( R / 2 ) s i n ( P / 2 ) c o s ( Y / 2 ) + s i n ( R / 2 ) c o s ( P / 2 ) s i n ( Y / 2 ) c o s ( R / 2 ) c o s ( P / 2 ) s i n ( Y / 2 ) − s i n ( R / 2 ) s i n ( P / 2 ) c o s ( Y / 2 ) s i n ( R / 2 ) c o s ( P / 2 ) c o s ( Y / 2 ) − c o s ( R / 2 ) s i n ( P / 2 ) s i n ( Y / 2 ) ] \begin{bmatrix} w\\ x \\ y \\ z \\ \end{bmatrix} =\begin{bmatrix} cos(R/2)cos(P/2)cos(Y/2)+sin(R/2)sin(P/2)sin(Y/2) \\ cos(R/2)sin(P/2)cos(Y/2)+sin(R/2)cos(P/2)sin(Y/2) \\ cos(R/2)cos(P/2)sin(Y/2)-sin(R/2)sin(P/2)cos(Y/2) \\ sin(R/2)cos(P/2)cos(Y/2)-cos(R/2)sin(P/2)sin(Y/2) \\ \end{bmatrix} ⎣⎢⎢⎡wxyz⎦⎥⎥⎤=⎣⎢⎢⎡cos(R/2)cos(P/2)cos(Y/2)+sin(R/2)sin(P/2)sin(Y/2)cos(R/2)sin(P/2)cos(Y/2)+sin(R/2)cos(P/2)sin(Y/2)cos(R/2)cos(P/2)sin(Y/2)−sin(R/2)sin(P/2)cos(Y/2)sin(R/2)cos(P/2)cos(Y/2)−cos(R/2)sin(P/2)sin(Y/2)⎦⎥⎥⎤
总结:除了对旋转的表示,我们还要对旋转进行估计和优化。因为SLAM中的位姿是未知的,我们需要解决什么样的相机位姿最符合当前的观测数据。一种典型的方式就是把它构建成一个优化问题,求解最优的R和t,使得误差最小化。
旋转矩阵自身带有约束。旋转矩阵作为优化变量时,会引入额外的约束(正交且行列式为1),使优化变的困难。通过李群—李代数间的转换关系e2,我们希望把位姿估计变成无约束优化问题,简化求解方式。
群 Group:一种集合加上一种运算的代数结构。集合记作A,运算记作·,群记作 G = ( A , ⋅ ) G=(A,·) G=(A,⋅)
李群:具有连续(光滑)性质的群。 S O ( n ) , S E ( n ) SO(n),SE(n) SO(n),SE(n)
李代数:描述了李群的局部性质,是单位元附近的正切空间,每个李群都有与之对应的李代数。 s o ( 3 ) , s e ( 3 ) so(3),se(3) so(3),se(3)
李代数 s o ( 3 ) so(3) so(3):是一个由三维向量组成的集合,每个向量对应一个反对称矩阵,可以用于表达旋转矩阵的导数。它和 S O ( 3 ) SO(3) SO(3)之间的关系由指数映射给定 R = e x p ( ϕ R = exp(\phi R=exp(ϕ^)。
李代数 s e ( 3 ) se(3) se(3):是一个六维向量组成的集合。前三维为平移记为 ρ \rho ρ,后三维为旋转记作 ϕ \phi ϕ。
指数映射 Exponoential Map:矩阵的指数
相机的内参数 Camera Intrinsics:相机内参数是与相机自身特性相关的参数,比如相机的焦距、像素大小等。单目棋盘格张正友标记法。
相机外参数 Camera Extrinsics:是在世界坐标系中的参数, 比如相机的位姿R,t。SLAM中待估计的目标,代表着机器人的轨迹。
深度信息在投影过程中被丢失了。
畸变 Distortion:摄像机的透镜使真实环境中的一条直线在图片中变成了曲线,越靠近图像的边缘,这种现象越明显。
径向畸变:坐标点沿着长度方向发生了变化,即距离远点的长度发生了变化。
切向畸变:坐标点沿着切线方向发生了变化,即水平夹角发生了变化。
畸变的多项式关系描述:
x d i s t o r t e d = x ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) + 2 p 1 x y + p 2 ( r 2 + 2 x 2 ) y d i s t o r t e d = y ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) + p 1 ( r 2 + 2 y 2 ) + 2 p 2 x y x_{distorted}=x(1+k_1r^2+k_2r^4+k_3r^6)+2p_1xy+p_2(r^2+2x^2)\\ y_{distorted} = y(1+k_1r^2+k_2r^4+k_3r^6)+p_1(r^2+2y^2)+2p_2xy xdistorted=x(1+k1r2+k2r4+k3r6)+2p1xy+p2(r2+2x2)ydistorted=y(1+k1r2+k2r4+k3r6)+p1(r2+2y2)+2p2xy
去畸变 Undistort:
单目相机成像过程:
双目相机的原理:通过同步采集左右相机的图像,计算图像间视差,以便估计每一个像素的深度。
视差:左右图的横坐标之差。 d = u L − u R d= u_L-u_R d=uL−uR 注意 u R u_R uR为负数。视差越大,物体距离越近。
RGB-D相机模型:向探测目标发射光线(红外光)
图像:相机吧三维世界中的信息转换成了一张由像素组成的照片,储存在计算机中,以二维数组的形式表示。
灰度图 Gray Scale Image:灰度图中,每个像素位置(x,y)对应一个灰度值 I I I。用一个0~255的整数(即一个unsigned char,1个字节,8位整数)来表达图像的灰度值。x行y列灰度图对应数组image [y] [x]。
经典SLAM模型:假设两个噪声项满足零均值的高斯分布,方差为协方差矩阵 w k w_k wk ~ N ( 0 , R k ) N(0,R_k) N(0,Rk), v k v_k vk ~ N ( 0 , Q k , j ) N(0,Q_{k,j}) N(0,Qk,j)
{ x k = f ( x k − 1 , u k ) + w k z k , j = h ( y i , x k ) + v k , j \left\{\begin{array}{l} \begin{aligned} x_k &= f(x_{k-1},u_k)+w_k\\ z_{k,j} &= h(y_i,x_k)+v_{k,j} \end{aligned} \end{array}\right. {xkzk,j=f(xk−1,uk)+wk=h(yi,xk)+vk,j
目标:我们希望通过带噪声的数据z和u推断位姿x和地图y以及他们的概率分布,这构成了一个状态估计问题。对机器人状态的估计,就是已知输入数据u和观测数据z的条件下,求状态x,y的条件概率分布: P ( x , y ∣ z , u ) P(x,y|z,u) P(x,y∣z,u)
状态估计问题处理方法:
状态估计过程:直接求后验分布是困难的,但是求一个状态最优估计,使得在该状态下后验概率最大化。即求解最大似然估计MLE ( x , y ) M L E ∗ = a r g m a x P ( z , u ∣ x , y ) (x,y)^*_{MLE}=arg max P(z,u|x,y) (x,y)MLE∗=argmaxP(z,u∣x,y),即理解为:在什么样的状态下,最可能产生现在观测到的数据。
处理办法:最小二乘法 Least Square Problem。
输入误差: e u , k = x k − f ( x k − 1 , u k ) e_{u,k}=x_k-f(x_{k-1},u_k) eu,k=xk−f(xk−1,uk)
观测误差: e z , j , k = z ( k , j ) − h ( x k . y j ) e_{z,j,k}=z(k,j)-h(x_k.y_j) ez,j,k=z(k,j)−h(xk.yj)
马哈拉诺比斯距离 Mahalanobis distance/马氏距离:最小化噪声项的二次型。
最小化所有时刻估计值与真实读数之间的马氏距离即等价于求最大似然估计:
m i n J ( x , y ) = ∑ k e u , k T R k − 1 e u , k + ∑ k ∑ j e z , k , j T Q k , j − 1 e z , k , j min\ J(x,y)=\sum \limits_ke_{u,k}^TR^{-1}_ke_{u,k}+\sum \limits_k \sum \limits_j e_{z,k,j}^TQ^{-1}_{k,j}e_{z,k,j} min J(x,y)=k∑eu,kTRk−1eu,k+k∑j∑ez,k,jTQk,j−1ez,k,j
在SLAM中的最小二乘问题具有特定的结构
非线性最小二乘: min F ( x ) = 1 2 ∣ ∣ f ( x ) ∣ ∣ 2 2 \min F(x) = \frac{1}{2}||f(x)||_2^2 minF(x)=21∣∣f(x)∣∣22 如果用求导来求解则需要我们知道关于目标函数的全局性质。对于不方便求解的最小二乘问题,可用迭代的方式,让求解导函数为零的问题变成了一个不断寻找下降增量 Δ x k \Delta x_k Δxk的问题。
梯度法:取增量为反向的梯度即可保证目标函数下降。
雅可比矩阵 Jacobian Matrix:F(x)关于x的一阶导数 J i , j = ∂ f i ∂ x j J_{i,j} = \frac{\partial f_i}{\partial x_j} Ji,j=∂xj∂fi
黑森矩阵/海塞矩阵 Hessian Matrix:F(x)关于x的二阶导数 H ( f ) ( x ) i , j = ∂ 2 f ∂ x i ∂ x j H(f)(x)_{i,j}=\frac{\partial^2 f}{\partial x_i \partial x_j} H(f)(x)i,j=∂xi∂xj∂2f
牛顿法:保留二阶梯度信息 Δ x ∗ = a r g m i n ( F ( x ) + J ( x ) T Δ x + 1 2 Δ T H Δ x ) \Delta x^* = arg min (F(x)+J(x)^T\Delta x+\frac{1}{2}\Delta^TH\Delta x) Δx∗=argmin(F(x)+J(x)TΔx+21ΔTHΔx),求右侧等式关于 Δ x \Delta x Δx的导数并令其为零有
J + H Δ x = 0 ⇒ H Δ x = − J J+H\Delta x=0 \Rightarrow H\Delta x = -J J+HΔx=0⇒HΔx=−J 即得牛顿法的增量 Δ = − J H \Delta = -\frac{J}{H} Δ=−HJ
高斯牛顿法:将f(x)而不是目标函数F(x)进行一阶泰勒展开 f ( x + Δ x ) ≈ f ( x ) + J ( x ) T Δ x f(x+\Delta x) \approx f(x)+J(x)^T\Delta x f(x+Δx)≈f(x)+J(x)TΔx,求使 ∣ ∣ f ( x + Δ x ) ∣ ∣ 2 ||f(x+\Delta x)||^2 ∣∣f(x+Δx)∣∣2达到最小的增量,即求解线性最小二乘问题 Δ x ∗ = a r g m i n 1 2 ∣ ∣ f ( x ) + J ( x ) T Δ x ∣ ∣ 2 \Delta x^* = arg min \frac{1}{2} ||f(x)+J(x)^T\Delta x||^2 Δx∗=argmin21∣∣f(x)+J(x)TΔx∣∣2,求目标函数的导数并令其为零即得到高斯牛顿方程 J ( x ) J T ( x ) Δ x = − J ( x ) f ( x ) ⇒ H Δ x = g J(x)J^T(x)\Delta x=-J(x)f(x) \Rightarrow H\Delta x = g J(x)JT(x)Δx=−J(x)f(x)⇒HΔx=g。其中用 J J T JJ^T JJT作为牛顿法中二阶Hessian矩阵的近似,省略了计算二阶导数H的过程。
信赖区域方法 Trust Region Method:定义了在什么范围二阶近似泰勒展开是有效的。
根据模型和实际函数的差异来确定: ρ = f ( x + Δ x ) − f ( x ) J ( x ) T Δ x \rho = \frac{f(x+\Delta x)-f(x)}{J(x)^T\Delta x} ρ=J(x)TΔxf(x+Δx)−f(x),$\rho $趋近于1则近似是好的。
视觉里程计 Visual Odometry:根据相邻图像的信息估计出粗略的相机运动,给后端提供较好的初值。
特征点匹配
特征 Feature:特征是图像信息 的另一种数字表达形式。
特征点:图像里的特殊的地方,如反复出现的角点、边缘和区块。由关键点 Key-point 和描述子 Descriptor组成
SIFT,Scale-Invariant Feature Transform 尺度不变特征变换:提取SIFT关键点,并计算SIFT描述子。
ORB Oriented FAST and Rotated BRIEF:特征提取主流方案。
特征匹配:解决数据关联问题 data association,即确定当前看到的路标与之前看到的路标之间的对应关系。
计算相机运动:根据已经匹配好的点对估计相机的运动。
2D-2D 对极几何:设两像素点位置 p 1 , p 2 p_1,p_2 p1,p2,K为相机内参数矩阵,R,t为两坐标系的相机运动。则两匹配点的空间位置关系约束为
p 2 T K − T t p_2^TK^{-T}t p2TK−Tt^ R K − 1 p 1 = 0 RK^{-1}p_1=0 RK−1p1=0,设本质矩阵 Essential Matrix E = t E = t E=t^ R R R,基础矩阵 Fundamental Matrix F = K − T E K − 1 F = K^{-T}EK^{-1} F=K−TEK−1即得 x 2 T E x 1 = p 2 T F p 1 = 0 x_2^TEx_1 = p_2^TFp_1=0 x2TEx1=p2TFp1=0
相机位姿估计问题:
本质矩阵 Essential Matrix: E = t E = t E=t^ R R R
八点法 Eight-point-algorithm:八对匹配点组成的矩阵满足只为8,就可以得到E。
单应矩阵 Homography:描述两个平面之间的映射关系,通常描述处于共同平面上的一些点在两张图像之间的变换关系。
3D-3D PnP Perspective -n-point:求解3D到2D点对运动的方法。
Bundle Adjustment,BA:把相机和三维点放在一起进行最小化。
重投影误差:3D点投影位置和观测位置作差。
3D-3D 迭代最近点 Iterative Closest Point,ICP:用一组配对好的3D点求解位姿变换R,t。
直接法:根据像素的亮度信息估计相机的运动,不用计算关键点和描述子,既避免了特征的计算时间,也避免了特征缺失的情况。
光流 Optical Flow:描述像素随时间在图像之间运动的方法。同一个像素会在图像中运动,我们希望追踪他的运动过程。
Lucas-Kanade光流:认为来自相机的图像是随时间变化的。图像可看做时间的函数 I ( x , y , t ) I(x,y,t) I(x,y,t),通过灰度不变性求解像素运动速度u,v。
状态估计的概率解释:希望整个运动轨迹在较长时间内都能保持最优。站在"久远的状态"的角度上,用未来的信息告诉它“你应该在哪里”。考虑一段时间内的状态估计问题,不仅使用过去的信息更新自己的状态,也会用未来的信息来更新。
后端优化问题:当我们拥有某些运动数据u和观测数据z时,如何确定状态量x,y的分布?如果得到了新时刻的数据,它们的分布将发生怎样的变化?
问题转换:假设状态量和噪声项服从高斯分布——在程序中只要存储他们的均值和协方差矩阵即可。均值看做对变量最优值的估计;协方差矩阵度量了它的不确定性。则后端优化问题——>当存在一些运动数据和观测数据时,如何估计状态量的高斯分布。
卡尔曼滤波KF与扩展卡尔曼滤波EKF
见《无人驾驶原理与实践》第四章:状态估计与传感器融合
Bundle Adjustment 与图优化
投影模型:即观测方程的具体过程 z = h ( x , y ) z=h(x,y) z=h(x,y)
把世界坐标转换到相机坐标,用到相机外参数(R,t)
P ′ = R p + t = [ X ′ , Y ′ , Z ′ ] T P'=Rp+t=[X',Y',Z']^T P′=Rp+t=[X′,Y′,Z′]T
将 P ′ P' P′投影至归一化平面,得到归一化坐标
P c = [ u c , v c , 1 ] T = [ X ′ / Z ′ , Y ′ / Z ′ , 1 ] T P_c=[u_c,v_c,1]^T=[X'/Z',Y'/Z',1]^T Pc=[uc,vc,1]T=[X′/Z′,Y′/Z′,1]T
考虑归一化坐标的畸变,得到去畸变前的原始像素坐标。只考虑径向畸变。
{ u c ′ = u c ( 1 + k 1 r C 2 + k 2 r c 4 v c ′ = v c ( 1 + k 1 r c 2 + k 2 r c 4 ) \left\{\begin{array}{l} \begin{aligned} u'_c &= u_c(1+k_1r_C^2+k_2r^4_c\\ v'_c &=v_c(1+k_1r_c^2+k_2r_c^4) \end{aligned} \end{array}\right. {uc′vc′=uc(1+k1rC2+k2rc4=vc(1+k1rc2+k2rc4)
根据内参模型,计算像素坐标
{ u s = f x u c ′ + c x v s = f y v c ′ + c y \left\{\begin{array}{l} \begin{aligned} u_s&= f_xu_c'+c_x\\ v_s &= f_yv_c'+c_y \end{aligned} \end{array}\right. {usvs=fxuc′+cx=fyvc′+cy
Adjustment:
观测误差: e = z − h ( T , p ) e=z-h(T,p) e=z−h(T,p), z = [ u s , v s ] T z=[u_s,v_s]^T z=[us,vs]T为像素坐标,T为外参数R,t的李群,p为路标y
要进行优化的代价函数:设 z i j 为 在 位 姿 T i 处 观 察 路 标 p j 产 生 的 数 据 z_{ij}为在位姿T_i处观察路标p_j产生的数据 zij为在位姿Ti处观察路标pj产生的数据,整体的代价函数为
1 2 ∑ i = 1 m ∑ j = 1 n ∣ ∣ e i j ∣ ∣ 2 = 1 2 ∑ i = 1 m ∑ j = 1 n ∣ ∣ z i j − h ( T i , p j ) ∣ ∣ 2 \frac{1}{2}\sum \limits_{i=1}^m \sum \limits_{j=1}^n||e_{ij}||^2=\frac{1}{2}\sum \limits_{i=1}^m \sum \limits_{j=1}^n||z_{ij}-h(T_i,p_j)||^2 21i=1∑mj=1∑n∣∣eij∣∣2=21i=1∑mj=1∑n∣∣zij−h(Ti,pj)∣∣2
方法:高斯牛顿法或信赖区域方法 H Δ x = g H\Delta x=g HΔx=g,其中高斯牛顿法的 H = J T J H=J^TJ H=JTJ
稀疏性与边缘化
⋆ \star ⋆ 发现了H矩阵的系数结构,因为误差项对应的雅可比矩阵只涉及部分相机位姿和路标点,因此有大量的0。
控制BA的方法:
长期误差的积累将导致我们无法构建全局一致的轨迹和地图。虽然后端能够估计最大后验误差,但是好模型架不住烂数据,只有相邻关键帧数据时,无法消除累积误差。
回环检测:给出除了相邻帧的一些时间间隔更久远的约束,因为相机经过同一个地方可以采集到相似的数据。关键在如何有效地检测出相机经过同一个地方。相当于加入弹簧阻尼,提高系统稳定性。
先估计哪里可能出现回环:
核心问题:如何计算图像间的相似性。
感知偏差 Perceptual Aliasing:假阳性 False Psitive,FP
感知变异 Perceptual Variability:假阴性 False Negative,FN
准确率 Precision:算法提取的所有回环中确实是真实回环的概率。 P r e c i s i o n = T P T P + F P Precision=\frac{TP}{TP+FP} Precision=TP+FPTP
召回率 Recall:在所有真实回环中被正确检测出来的概率。 R e c a l l = T P T P + F N Recall=\frac{TP}{TP+FN} Recall=TP+FNTP
词袋模型 Bags-of-Words,Bow:目的是用“图像上有哪几种特征”来描述一幅图像。如两个人一只狗。
(1)定义单词 Word,组成字典 Dictionary:确定“人、狗”的概念
(2)用单词出现的情况描述整幅图像,把一幅图像转换成一个向量描述。描述向量说的是是否出现,而不管它们在哪里出现,因此在相机发生少量运动时,只要物体仍在视野中出现,就仍然可以保持描述向量不变。
(3)比较相似性
例:记 w 1 − 人 , w 2 − 车 , w 3 − 狗 w_1-人,w_2-车,w_3-狗 w1−人,w2−车,w3−狗,则对某一张图片A根据所含有的单词可记为 A = 2 w 1 + 1 w 2 + 0 w 3 A=2w_1+1w_2+0w_3 A=2w1+1w2+0w3,即用向量 [ 2 , 1 , 0 ] T [2,1,0]^T [2,1,0]T描述。
字典 Dictionary:类似于聚类问题 Clustering,无监督机器学习,让机器自行寻找数据中的规律。
Bow的字典生成问题:假设已对大量图像提取了N个特征点,想找一个有k个单词的字典,每个单词可看做局部相邻特征点的集合。
频率-逆文档频率 Term Frequency-Inverse Document Frequency, TF-IDF:希望对单词的区分性或重要性进行评估,给他们以不同的权值以起到更好的效果。假设多有特征数量n, w i w_i wi数量为 n i n_i ni
相似性评分处理:取一个先验相似度 s ( v t , v t − Δ t ) s(v_t,v_{t-\Delta t}) s(vt,vt−Δt),表示某时刻关键帧图像与上一时刻的关键帧的相似性,然后对其他评分进行归一化。
s ( v t , v t j ) ′ = s ( v t , v t j ) / s ( v t , v t − Δ t ) s(v_t,v_{t_j})'=s(v_t,v_{t_j})/s(v_t,v_{t-\Delta t}) s(vt,vtj)′=s(vt,vtj)/s(vt,vt−Δt)
如果当前帧与之前某关键帧的相似度超过当前帧与上一个关键帧相似度的3倍,则认为有可能存在回环。
在一段时间内持续检测到的回环,才是正确的回环。
地图:所有路标点的集合。确定了路标点的位置,即完成了建图。
地图的作用:
稀疏地图:只建模感兴趣的部分即特征点(路标点)
稠密地图:建模所有看到的部分。
深度获取
单目稠密地图重建:确定第一幅图的某像素出现在其他图里的位置。
极线搜索:在特征点方法中,通过特征匹配找到了2号像素的位置,在极线上搜索和1号像素长得比较相似的点。即沿着第二幅图像的极线从一头走向另一头,逐个比较每个像素与1号像素的相似程度。
块匹配:在1号像素周围取小块,然后在极线上也取很多同样大小的小块进行比较,以确定两幅图像的相似性。即从像素的灰度不变性变成了图像块的灰度不变性。
块间差异的计算:
差的绝对值之和 Sum of Absolute Difference, SAD:取两小块的差的绝对值之和,越小越相似。
S ( A , B ) S A D = ∑ i , j ∣ A ( i , j ) − B ( i , j ) ∣ S(A,B)_{SAD}=\sum \limits_{i,j}|A(i,j)-B(i,j)| S(A,B)SAD=i,j∑∣A(i,j)−B(i,j)∣
平方和 Sum of Squared Distance,SSD:块间差的平方和,越小越相似。
S ( A , B ) S S D = ∑ i , j ( A ( i , j ) − B ( i , j ) ) 2 S(A,B)_{SSD}=\sum \limits_{i,j}(A(i,j)-B(i,j))^2 S(A,B)SSD=i,j∑(A(i,j)−B(i,j))2
归一化互相关 Normalized Crossd Correlation,NCC:相关性接近0表示两幅图像不相似,接近1相似。
S ( A , B ) N C C = ∑ i , j A ( i , j ) B ( i , j ) ∑ i , j A ( i , j ) 2 B ( i , j ) 2 S(A,B)_{NCC}=\frac{\sum \limits_{i,j} A(i,j)B(i,j)}{\sqrt{\sum \limits_{i,j} A(i,j)^2B(i,j)^2}} S(A,B)NCC=i,j∑A(i,j)2B(i,j)2i,j∑A(i,j)B(i,j)
深度滤波器:假设用NCC,即会得到一个沿着极线的NCC分布。此时应该用概率分布描述深度值。
假设为高斯分布,则某个像素点的深度d服从 P ( d ) = N ( μ , σ 2 ) P(d)=N(\mu,\sigma^2) P(d)=N(μ,σ2),此像素点的观测深度分布为 P ( d o b s = N ( μ o b s , σ o b s 2 ) ) P(d_{obs}=N(\mu_{obs},\sigma^2_{obs})) P(dobs=N(μobs,σobs2))。用观测的信息更新原先d的分布,这是一个信息融合问题。显然,两个高斯分布的乘积依然是一个高斯分布设融合后的分布为 d N ( μ f u s e , σ f u s e 2 ) d~N(\mu_{fuse},\sigma^2_{fuse}) d N(μfuse,σfuse2),则
μ f u s e = σ o b s 2 μ + σ 2 μ o b s σ 2 + σ o b s 2 σ f u s e 2 = σ 2 σ o b s 2 σ 2 + σ o b s 2 \mu_{fuse}=\frac{\sigma^2_{obs}\mu+\sigma^2 \mu_{obs}}{\sigma^2+\sigma^2_{obs}}\\ \sigma^2_{fuse}=\frac{\sigma^2 \sigma^2_{obs}}{\sigma^2+\sigma^2_{obs}} μfuse=σ2+σobs2σobs2μ+σ2μobsσfuse2=σ2+σobs2σ2σobs2
估计稠密深度的完整过程:
像素梯度问题:有明显梯度的小块将具有良好的区分度,不易引起误匹配。对于梯度不明显的像素,由于块匹配时没有区分性,将难以有效估计其深度。即具有对物体纹理的依赖性。
逆深度 Inverse depth:深度的倒数。假设逆深度为高斯分布是更有效地手段。
八叉树地图 Octo-map:把一个小方块的每个面平均切成两片,即将一个小方块分成同样大小的八个。整个从最大空间细分到最小空间的过程,就是一颗八叉树。当某个方块的所有子节点都被占据或者都不被占据是,就没必要展开这个节点。因此节省了大量的存储空间。