第八篇 相机位姿优化问题三:不用雅克比,PNP模型SVD分解,3D 到 2D

一 问题背景

在自动驾驶和SLAM中,经常遇到问题,知道3D世界的点集P = [x y z 1]‘,和相机观测到的在2D世界的点坐标P’=[u v 1]',如何利用这些对应点集求解位姿即R和t。
在前面两篇文章中已经介绍了普适方法,直接求误差函数对位姿向量的雅克比矩阵,然后利用高斯牛顿发进行优化,前面介绍的方法是普遍适用的方法。本节介绍的方法,只对点集匹配求解姿态适用。

二 问题建模

如下式所示,对于一组匹配点,列出一个公式。多组匹配点存在时,需要求解t1~t12。
s [ u v 1 ] = [ t 1 t 2 t 3 t 4 t 5 t 6 t 7 t 8 t 9 t 10 t 11 t 12 ] [ x y z 1 ] s\begin{bmatrix} u \\ v \\1 \end{bmatrix} =\begin{bmatrix} t_1 & t_2&t_3 & t_4 \newline t_5& t_6 & t_7 & t_8 \newline t_9 & t_{10} & t_{11} & t_{12} \end{bmatrix} \begin{bmatrix} x\\ y\\ z\\ 1 \end{bmatrix} s uv1 = t1t5t9t2t6t10t3t7t11t4t8t12 xyz1
令:
t 1 = [ t 1 t 2 t 3 t 4 ] T t 2 = [ t 5 t 6 t 7 t 8 ] T t 3 = [ t 9 t 10 t 11 t 12 ] T \mathbf{t_1} = \begin{bmatrix} t_1 & t_2&t_3 & t_4 \end{bmatrix}^T \newline \mathbf{t_2} = \begin{bmatrix} t_5 & t_6&t_7& t_8 \end{bmatrix}^T \newline \mathbf{t_3} = \begin{bmatrix}t_9&t_{10}& t_{11}&t_{12}\end{bmatrix}^T t1=[t1t2t3t4]Tt2=[t5t6t7t8]Tt3=[t9t10t11t12]T
由上面的式子可得如下两个方程:
t 1 T P − u t 3 T P = 0 t 2 T P − v t 3 T P = 0 \mathbf{t_1}^TP-u\mathbf{t_3}^TP=0\newline \mathbf{t_2}^TP-v\mathbf{t_3}^TP=0 t1TPut3TP=0t2TPvt3TP=0

[ P T 0 − u P T 0 P T − u P T ] [ t 1 t 2 t 3 ] = 0 \begin{bmatrix} P^T & 0 &-uP^T \newline 0 & P^T &-uP^T \end{bmatrix} \begin{bmatrix} \mathbf{t_1} \\ \mathbf{t_2}\\\mathbf{t_3} \end{bmatrix} =0 [PT00PTuPTuPT] t1t2t3 =0
存在n个点时,存在2n 个方程组。
问题因此成为求解如下齐次方程最优解。
A ∗ t = 0 A*\mathbf{t}=0 At=0

三 问题求解

求解上述问题需要n大于等于6。对A矩阵求SVD分解。
[ U Σ V T ] = s v d ( A ) \begin{bmatrix} U & \Sigma & V^T \end{bmatrix}=svd(A) [UΣVT]=svd(A)
t 向量为V矩阵的最后一列,因此求得t1~t12。注意,此时求解结果没有加入尺度s,因此会存在一个尺度效应。
t = β V ( : , e n d ) \mathbf{t} = \beta V(:,end) t=βV(:,end)
进一步可以求出旋转:
R ‾ = [ t 1 t 2 t 3 t 5 t 6 t 7 t 9 t 10 t 11 ] \overline{R} = \begin{bmatrix} t1 & t2 & t3 \\ t5 & t6 & t7 \\ t9 & t10 & t11 \end{bmatrix} R= t1t5t9t2t6t10t3t7t11
此时估计的 R不是标准旋转矩阵,进一步对其进行SVD分解
[ U Σ V T ] = s v d ( R ‾ ) \begin{bmatrix} U & \Sigma & V^T \end{bmatrix}=svd(\overline{R} ) [UΣVT]=svd(R)
R = ± U V T R = \pm UV^T R=±UVT
理论上,Sigma的对角线上元素应该非常接近,根据对角线元素可以求出尺度因子。
β = ± ( t r ( Σ ) / 3 ) \beta = \pm (tr(\Sigma )/3) β=±(tr(Σ)/3)
符号问题可以通过在相机坐标系下的Z一定大于0求得:
β ∗ t 3 T ∗ P > 0 \beta *\mathbf{t_3}^T*P>0 βt3TP>0
t = [ t 4 t 8 t 12 ] ′ t = \begin{bmatrix} t_4 & t_8 & t_{12} \end{bmatrix}' t=[t4t8t12]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值