视觉残差函数及雅可比公式推导

【约定符号】:
特征点在相机坐标系下的坐标为 [ x , y , z ] T [x,y,z]^T [x,y,z]T
特征点在归一化相机坐标系下的坐标为 [ μ , ν , 1 ] T [\mu,\nu,1]^T [μ,ν,1]T [ μ , ν ] T [\mu,\nu]^T [μ,ν]T
特征点的这两种坐标之间的关系:
[ x y z ] = 1 λ [ μ ν 1 ] \begin{bmatrix} x\\ y\\ z \end{bmatrix}= \frac{1}{\lambda} \begin{bmatrix} \mu\\ \nu\\ 1 \end{bmatrix} xyz=λ1μν1
其中, λ = 1 / z \lambda=1/z λ=1/z,称为逆深度

【定义概念】视觉重投影误差
假设预测的(估计的) 特征点的坐标为 [ x , y , z ] T [x,y,z]^T [x,y,z]T(相机坐标系),观测到的 特征点的坐标为 [ μ , ν ] T [\mu,\nu]^T [μ,ν]T(归一化相机坐标系),则视觉重投影误差定义为:
r c = [ x z − μ y z − ν ] r_c=\begin{bmatrix} \frac{x}{z}-\mu\\ \frac{y}{z}-\nu \end{bmatrix} rc=[zxμzyν]
基于以上内容,开始推导。


已知第 i i i帧中某特征点的坐标 [ μ i , ν i ] T [\mu_i,\nu_i]^T [μi,νi]T(归一化相机坐标系)及逆深度 λ i \lambda_i λi,可以预测该特征点在第 j j j帧的相机坐标系下的坐标 [ x c j , y c j , z c j ] T [x_{c_j},y_{c_j},z_{c_j}]^T [xcj,ycj,zcj]T为:
(1-1) [ x c j y c j z c j 1 ] = T b c − 1 T w b j − 1 T w b i T b c [ 1 λ c i μ 1 λ c i ν 1 λ c i 1 ] \begin{bmatrix} x_{c_j}\\ y_{c_j}\\ z_{c_j}\\1 \end{bmatrix}= T^{-1}_{bc}T^{-1}_{wb_j} T_{wb_i}T_{bc} \begin{bmatrix} \frac{1}{\lambda_{c_i}}\mu\\ \frac{1}{\lambda_{c_i}}\nu\\ \frac{1}{\lambda_{c_i}} \\1 \end{bmatrix} \tag{1-1} xcjycjzcj1=Tbc1Twbj1TwbiTbcλci1μλci1νλci11(1-1)
【注】关于 T w b i T_{wb_i} Twbi T w b j T_{wb_j} Twbj,此时我们有一个粗略的值。
同时,该特征点在第 j j j帧确实被观测到了,坐标为 [ μ c j , ν c j ] T [\mu_{c_j},\nu_{c_j}]^T [μcj,νcj]T,则不难构建重投影误差(抄过来)如下:
r c = [ x c j z c j − μ c j y c j z c j − ν c j ] ≜ [ r c 1 r c 2 ] r_c=\begin{bmatrix} \frac{x_{c_j}}{z_{c_j}}-\mu_{c_j}\\ \frac{y_{c_j}}{z_{c_j}}-\nu_{c_j} \end{bmatrix}\triangleq \begin{bmatrix} r_{c1}\\ r_{c2} \end{bmatrix} rc=zcjxcjμcjzcjycjνcj[rc1rc2]
这就是残差函数
残差函数构成损失函数,在使用LM算法优化过程中,需要使用残差函数的Jacobian矩阵(一阶泰勒展开) ∂ r c ∂ s t a t e = ∂ r c ∂ f c j ⋅ ∂ f c j ∂ s t a t e \frac{\partial r_c}{\partial state}=\frac{\partial r_c}{\partial f_{c_j}}\cdot \frac{\partial f_{c_j}}{\partial state} staterc=fcjrcstatefcj。【具体详见LM算法】


求残差函数的Jacobian矩阵
首先,明确 r c r_c rc需要对哪些变量求偏导。
共四大部分:1. i i i时刻的位移和姿态,2. j j j时刻的位移和姿态,3. imu和相机的外参,4. 逆深度。

应用链式法则, ∂ r c ∂ s t a t e = ∂ r c ∂ f c j ⋅ ∂ f c j ∂ s t a t e \frac{\partial r_c}{\partial state}=\frac{\partial r_c}{\partial f_{c_j}}\cdot \frac{\partial f_{c_j}}{\partial state} staterc=fcjrcstatefcj

第一步,先求 ∂ r c ∂ f c j \frac{\partial r_c}{\partial f_{c_j}} fcjrc得:
∂ r c ∂ f c j = [ ∂ r c 1 ∂ x c j ∂ r c 1 ∂ y c j ∂ r c 1 ∂ z c j ∂ r c 2 ∂ x c j ∂ r c 2 ∂ y c j ∂ r c 2 ∂ z c j ] = [ 1 z c j 0 − x c j z c j 2 0 1 z c j − y c j z c j 2 ] \begin{aligned} \frac{\partial r_c}{\partial f_{c_j}} &amp;= \begin{bmatrix} \frac{\partial r_{c1}}{\partial x_{c_j}} &amp; \frac{\partial r_{c1}}{\partial y_{c_j}} &amp; \frac{\partial r_{c1}}{\partial z_{c_j}} \\ \frac{\partial r_{c2}}{\partial x_{c_j}} &amp; \frac{\partial r_{c2}}{\partial y_{c_j}} &amp; \frac{\partial r_{c2}}{\partial z_{c_j}} \end{bmatrix} \\ &amp;= \begin{bmatrix} \frac{1}{z_{c_j}} &amp; 0 &amp; -\frac{x_{c_j}}{ z^2_{c_j}} \\ 0 &amp; \frac{1}{z_{c_j}} &amp; -\frac{y_{c_j}}{ z^2_{c_j}} \end{bmatrix} \\ \end{aligned} fcjrc=[xcjrc1xcjrc2ycjrc1ycjrc2zcj<

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值