【视觉SLAM入门】5.2. 2D-3D PNP 3D-3D ICP BA非线性优化方法 数学方法SVD DLT

这篇具有很好参考价值的文章主要介绍了【视觉SLAM入门】5.2. 2D-3D PNP 3D-3D ICP BA非线性优化方法 数学方法SVD DLT。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前置事项:

1. 3D-2D PNP

该问题描述为:当我们知道n 个 3D 空间点以及它们的投影位置时,如何估计相机所在的位姿

1.1 代数法

1.1.1 DLT(直接线性变换法)

解决的问题:已知空间点 P = ( X , Y , Z , 1 ) T P = (X, Y, Z, 1)^T P=(X,Y,Z,1)T 和它投影点 x 1 = ( u 1 , v 1 , 1 ) T x_1 = (u_1, v_1, 1)^T x1=(u1,v1,1)T。求解相机位姿 R , t \boldsymbol {R, t} R,t
为求解,定义增广矩阵
[ R ∣ t ] = ( t 1 t 2 t 3 t 4    t 5 t 6 t 7 t 8    t 9 t 10 t 11 t 12 ) \boldsymbol {[R| t]} = \begin{pmatrix} t_1&t_2&t_3&t_4 \\\;\\ t_5&t_6&t_7&t_8 \\\;\\ t_9&t_{10}&t_{11}&t_{12} \end{pmatrix} [Rt]= t1t5t9t2t6t10t3t7t11t4t8t12
我们的目的就是求解这个增广矩阵,利用坐标关系得到:
s ( u 1 v 1 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{pmatrix} u_1&v_1&1 \end{pmatrix} = \begin{pmatrix} t_1&t_2&t_3&t_4 \\\;\\ t_5&t_6&t_7&t_8 \\\;\\ t_9&t_{10}&t_{11}&t_{12} \end{pmatrix}\begin{pmatrix} X&Y&Z&1 \end{pmatrix} s(u1v11)= t1t5t9t2t6t10t3t7t11t4t8t12 (XYZ1)

  • 最后一行可以求出 s \boldsymbol s s , 则方程中有12个未知数,需要至少六对点, 可以线性变换 ;
  • 匹配点大于6对时,可以用SVD等方法对超定方程做最小二乘;
  • 缺点:忽略了旋转矩阵自身约束 ----> 找一个旋转矩阵近似(QR分解),把结果重新投影到 S E ( 3 ) SE(3) SE(3) 流形。

1.1.2. P3P

三对(世界坐标系下)3D-2D(成像平面)匹配点 + 一对验证点。原理图如下:
【视觉SLAM入门】5.2. 2D-3D PNP 3D-3D ICP BA非线性优化方法 数学方法SVD DLT,# VSLAM,自动驾驶-SLAM,3d,linux,SLAM,自动驾驶,计算机视觉

根据相似三角形的相似关系
Δ O a b − Δ O A B , Δ O b c − Δ O B C , Δ O a c − Δ O A C    ⇓ 有如下关系    O A 2 + O B 2 − 2 O A ⋅ O B ⋅ c o s < a , b > = A B 2 O B 2 + O C 2 − 2 O B ⋅ O C ⋅ c o s < b , c > = B C 2 O A 2 + O C 2 − 2 O A ⋅ O C ⋅ c o s < a , c > = A C 2 \Delta Oab - \Delta OAB, \quad \Delta Obc - \Delta OBC, \quad \Delta Oac - \Delta OAC \\\;\\\Downarrow 有如下关系 \\\;\\OA^2 + OB^2 -2OA\cdot OB \cdot cos<a,b> = AB^2\\ OB^2 + OC^2 -2OB\cdot OC \cdot cos<b,c> = BC^2 \\ OA^2 + OC^2 -2OA\cdot OC \cdot cos<a,c> = AC^2 ΔOabΔOAB,ΔObcΔOBC,ΔOacΔOAC有如下关系OA2+OB22OAOBcos<a,b>=AB2OB2+OC22OBOCcos<b,c>=BC2OA2+OC22OAOCcos<a,c>=AC2
x = O A / O C , y = O B / O C , v = A B 2 / O C 2 , u v = B C 2 / O C 2 , w v = A C 2 / O C 2 x=OA/OC\quad, y = OB/OC,\quad v=AB^2/OC^2,\quad uv=BC^2/OC^2,\quad wv=AC^2/OC^2 x=OA/OC,y=OB/OC,v=AB2/OC2,uv=BC2/OC2,wv=AC2/OC2

  • 推理可得:
    ( 1 − u ) y 2 − u x 2 − c o s < b , c > y + 2 u x y ⋅ c o s < a , b > + 1 = 0 ( 1 − w ) x 2 − w y 2 − c o s < a , c > x + 2 w x y ⋅ c o s < a , b > + 1 = 0 (1-u)y^2-ux^2-cos<b,c>y+2uxy\cdot cos<a,b>+1=0 \\(1-w)x^2-wy^2-cos<a,c>x+2wxy\cdot cos<a,b>+1=0 (1u)y2ux2cos<b,c>y+2uxycos<a,b>+1=0(1w)x2wy2cos<a,c>x+2wxycos<a,b>+1=0

  • 求解完成,其中只有 x , y x,y x,y未知,二元二次方程组,可以用吴氏消化法求解。最终最多得到4个解,用验证点对进行验证,得到正确的点即可。


  • 只利用3对点的信息,无法利用更多
  • 如果点收到噪声影响,算法失效
  • 改进的有 E P n P , U P n P EPnP, UPnP EPnP,UPnP

1.2 优化法

BA (Bundle Adjustment)法

  • 利用最小化重投影误差来做,简单来说就是已经有相机位姿,然后用该位姿预测得到预测值,再用 预测减观测(投影) 为误差构建最小二乘问题,重新优化相机位姿和空间点位置。重投影示意图如下:
    【视觉SLAM入门】5.2. 2D-3D PNP 3D-3D ICP BA非线性优化方法 数学方法SVD DLT,# VSLAM,自动驾驶-SLAM,3d,linux,SLAM,自动驾驶,计算机视觉

一种通用做法:用来对PnP或ICP的结果进行优化。

  • 假设通过PnP已经获得相机的位姿(不精确的) R , t \boldsymbol {R, t} R,t ,它的李代数为 ξ \boldsymbol \xi ξ
  • n个三维空间点 P i = [ X i , Y i , Z i ] T \boldsymbol P_i = [X_i, Y_i, Z_i]^T Pi=[Xi,Yi,Zi]T ,它的投影坐标为 u i = [ u i , v i ] T \boldsymbol u_i = [u_i, v_i]^T ui=[ui,vi]T ;

用矩阵形式写出像素位置与空间点公式(理论上成立的等式(没有误差时)):
s i [ u i v i 1 ] = K e x p ( ξ ˆ ) [ X i Y i Z i 1 ] ( 1 )    ⇓ 即    s i u i = K ⋅ e x p ( ξ ˆ ) ⋅ P i ( 2 )    ⇓ 构建最小二乘问题    ξ ∗ = a r g min ⁡ ξ 1 2 ∑ i = 1 n ∥ u i − 1 s i K exp ⁡ ( ξ ˆ ) P i ∥ 2 2 ( 3 ) s_i\begin{bmatrix}u_i\\v_i\\1\end{bmatrix} = Kexp(\xi\^{})\begin{bmatrix}X_i\\Y_i\\Z_i\\1\end{bmatrix} \qquad\qquad\qquad\qquad (1)\\\; \Downarrow即\qquad \qquad\qquad\qquad\qquad\\\; \\s_i\boldsymbol u_i = K\cdot exp(\xi\^{})\cdot P_i \qquad \qquad\qquad\qquad\qquad(2)\\\; \\\Downarrow 构建最小二乘问题\qquad \qquad\\\; \\\xi^* = arg\min\limits_\xi \frac{1}{2}\sum\limits_{i=1}^n\begin{Vmatrix}u_i- \frac{1}{s_i} K\exp(\xi\^{})P_i\end{Vmatrix}^2_2\qquad(3) si uivi1 =Kexp(ξˆ) XiYiZi1 (1)siui=Kexp(ξˆ)Pi(2)构建最小二乘问题ξ=argξmin21i=1n uisi1Kexp(ξˆ)Pi 22(3)
在上式中:

  • (3)中的 u i \boldsymbol u_i ui :投影位置(观测值---------------------------已知) (2D)
  • (2)和(1)中的 u i \boldsymbol u_i ui:重投影位置(预测值-根据(1)式计算得到) (2D)
  • P i \boldsymbol {P_i} Pi : 空间点位置(已知) (3D)

重投影误差:用3D和估计位姿投影得到的位置和观测得到的位置作差得到的。实际中利用很多点调整相机位姿使得这个值变小,但不会精确为0.

  • 求解这个最小二乘问题,由之前的李代数左乘模型,非线性优化的知识(推理过程略,详见视觉SLAM14讲7.7.3),记变换到相机坐标系下的空间点坐标 P ′ \boldsymbol {P'} P 这里直接给结果:
    【视觉SLAM入门】5.2. 2D-3D PNP 3D-3D ICP BA非线性优化方法 数学方法SVD DLT,# VSLAM,自动驾驶-SLAM,3d,linux,SLAM,自动驾驶,计算机视觉
    这个雅克比矩阵描述了重投影误差关于相机位姿李代数的一阶变化关系 ( s e ( 3 ) 这里是平移在前,旋转在后,则如上市,否则前后三列互换 se(3)这里是平移在前,旋转在后,则如上市,否则前后三列互换 se(3)这里是平移在前,旋转在后,则如上市,否则前后三列互换)。

此外,还有 e e e 关于空间点 P P P 的导数:

【视觉SLAM入门】5.2. 2D-3D PNP 3D-3D ICP BA非线性优化方法 数学方法SVD DLT,# VSLAM,自动驾驶-SLAM,3d,linux,SLAM,自动驾驶,计算机视觉


以上两个导数矩阵分别是观测相机方程关于相机位姿和特征点的导数矩阵。在优化中能提供迭代方向。

2. 3D-3D ICP

问题:有一组匹配好的3D点:
P = { p 1 , . . . , p n } , P ′ = { p 1 ′ , . . . , p n ′ } P=\left\{p_1, ..., p_n \right\}, \qquad P' = \left\{p'_1, ..., p'_n\right\} P={p1,...,pn},P={p1,...,pn}
欲求一个欧式变换 R , t R,t R,t,使:
∀ i , p i = R p i ′ + t {\forall i}, \qquad p_i = Rp'_i + t i,pi=Rpi+t

用ICP(Iterative Closest Point)求解,没有出现相机模型,和相机无关,故激光SLAM中也有ICP。

2.1 代数法

2.1.1 SVD方法

定义误差:
e i = p i − ( R p i ′ + t ) e_i = p_i - (Rp'_i + t) ei=pi(Rpi+t)
构建最小二乘问题:使得误差平方和最小
min ⁡ R , t J = 1 2 ∑ i = 1 n ∣ ∣ p i − ( R p i ′ + t ) ∣ ∣ 2 2 \min\limits_{R,t} J = \frac{1}{2}\sum\limits_{i=1}^n||p_i-(Rp'_i+t)||_2^2 R,tminJ=21i=1n∣∣pi(Rpi+t)22
求解问题:

  1. 定义两组点质心
    p = 1 n ∑ i = 1 n ( p i ) , p ′ = 1 n ∑ i = 1 n ( p i ′ ) p=\frac{1}{n}\sum\limits_{i=1}^n(p_i),\qquad p'=\frac{1}{n}\sum\limits_{i=1}^n(p'_i) p=n1i=1n(pi),p=n1i=1n(pi)
  2. 带入上边误差最小二乘函数整理,优化后结果:
    min ⁡ R , t J = 1 2 ∑ i = 1 n ∣ ∣ p i − p − R ( p i ′ − p ′ ) ∣ ∣ 2 + ∣ ∣ p − R p ′ − t ∣ ∣ 2 \min\limits_{R,t}J = \frac{1}{2}\sum\limits_{i=1}^n||p_i-p-R(p'_i-p')||^2+||p-Rp'-t||^2 R,tminJ=21i=1n∣∣pipR(pip)2+∣∣pRpt2
    观察,左边只和R有关,右边只和质心有关,有R时,令右边等于0,t可得。接下来着重求R
  3. 展开上式中关于 R R R 平方项,定义一个 W W W,最终用SVD分解可得R,得到后求解t即可。
    R = U V T R=UV^T R=UVT

2.2 优化(BA)法

2.2.2 非线性优化方法

和前边介绍的一样,构建G2O,然后导数用李代数扰动模型即可。
min ⁡ ξ = 1 2 ∑ i = 1 n ∣ ∣ ( p i − e x p ( ξ \qquad\qquad\qquad\qquad\qquad\qquad\min\limits_\xi = \frac{1}{2}\sum\limits_{i=1}^n||(p_i-exp(\xi ξmin=21i=1n∣∣(piexp(ξ^ )    p i ′ ) ∣ ∣ 2 2 )\;p'_i)||^2_2 )pi)22

注意:在唯一解的情况下,只要我们能找到极小值解,那么该值就是全局最优解。意味着可以任意选取初始值文章来源地址https://www.toymoban.com/news/detail-661076.html

到了这里,关于【视觉SLAM入门】5.2. 2D-3D PNP 3D-3D ICP BA非线性优化方法 数学方法SVD DLT的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Open3D 非线性最小二乘拟合二维多项式曲线

      多项式曲线表示为: p ( x ) = p 1 x n + p 2 x

    2024年02月07日
    浏览(50)
  • 计算机视觉与深度学习 | 非线性优化理论:图优化、高斯牛顿法和列文伯格-马夸尔特算法

    ===================================================== github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 ===================================================== 计算机视觉与深度学习 | SLAM国内外研究现状 计算机视觉与深度学习 | 视觉惯性SLAM的基础理论 计算机

    2024年02月08日
    浏览(53)
  • 线性回归(线性拟合)与非线性回归(非线性拟合)原理、推导与算法实现(一)

    关于回归和拟合,从它们的求解过程以及结果来看,两者似乎没有太大差别,事实也的确如此。从本质上说,回归属于数理统计问题,研究解释变量与响应变量之间的关系以及相关性等问题。而拟合是把平面的一系列点,用一条光滑曲线连接起来,并且让更多的点在曲线上或

    2023年04月14日
    浏览(57)
  • 【具有非线性反馈的LTI系统识别】针对反馈非线性的LTI系统,提供非线性辨识方案(Simulink&Matlab代码实现)

     💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码、Simulink仿真

    2024年02月14日
    浏览(54)
  • 连续非线性系统线性化理论

    在工程领域的被控对象常常是非线性的动力系统。对非线性控制系统 x ˙ = f ( x , t ) dot{x}=f(x,t) x ˙ = f ( x , t ) 的稳定性分析,常常需要将非线性系统线性化成线性系统 x ˙ = A ( t ) x dot x = A(t)x x ˙ = A ( t ) x 后,对线性系统设计的控制器放在非线性系统上,达到合适的控制效果

    2024年01月18日
    浏览(94)
  • 数学建模:线性与非线性优化算法

    🔆 文章首发于我的个人博客:欢迎大佬们来逛逛 优化算法 是指在满足一定条件下,在众多方案中或者参数中最优方案,或者参数值,以使得某个或者多个功能指标达到最优,或使得系统的某些性能指标达到最大值或者最小值 优化的两个关键点: 1.明确优化的目标函数 2.明确优化

    2024年02月07日
    浏览(43)
  • 非线性规划

      非线性规划在工业界和学术界中应用非常普遍,譬如交通运输中的路径优化、金融领域中的资产配置、5G网络切片中VNF的放置等。很多时候,我们对复杂问题进行提炼和抽象后,发现可以建模成某一种非线性规划。然而,由于非线性规划多是NP难的问题,并不容易得到最优

    2023年04月08日
    浏览(49)
  • 非线性最小二乘

    在经典最小二乘法估计中,假定被解释变量的条件期望是关于参数的线性函数,例如 E ( y ∣ x ) = a + b x E(y|x) = a+bx E ( y ∣ x ) = a + b x 其中 a , b a,b a , b 为待估参数, E ( y ∣ x ) E(y|x) E ( y ∣ x ) 是关于参数 a , b a,b a , b 的线性函数。但 E ( y ∣ x ) E(y|x) E ( y ∣ x ) 是关于参数的非线

    2024年02月04日
    浏览(61)
  • MATLAB 非线性规划

    ✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。 🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。 非线性规划问题 仍是规划问题的一种,但是

    2024年02月05日
    浏览(45)
  • OpenCV14-图像平滑:线性滤波和非线性滤波

    图像滤波是指去除图像中不重要的内容,而使关心的内容表现得更加清晰的方法,例如去除图像中的噪声、提取某些信息等。 根据图像滤波的目的不同,可以将图像滤波分为消除图像噪声的滤波和提取图像中部分特征信息的滤波。 去除图像中的噪声称作图像的平滑或者图像

    2024年02月08日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包