【视觉SLAM】4b-特征点法估计相机运动之PnP 3D-2D

文章目录

  • [1. 前言](#1. 前言)
  • [1. 直接线性变换DLT](#1. 直接线性变换DLT)
  • [2 求解P3P](#2 求解P3P)

1. 前言

透视n点(Perspective-n-Point,PnP)问题是计算机视觉领域的经典问题,用于求解3D-2D的点运动。换句话说,当知道 N N N个世界坐标系中3D空间点的坐标以及它们在图像上的投影点像素坐标时,可以使用PnP算法来估计相机在世界坐标系的姿态。P3P是最简化的PnP形式,即最少只需3个点即可估计当前的相机姿态(解不唯一)。

总体来说,PnP的求解方法有P3P、直接线性变换(Direct Linear Transformation,DLT)、EPnP(Efficient PnP)和UPnP等。此外,还有非线性优化 解法,通过构建最小二乘问题并迭代求解,即万金油式的光束平差法(Bundle Adjustment,BA)

1. 直接线性变换DLT

假设有世界坐标系中的3D点 P = X , Y , Z , 1 T P=X, Y, Z, 1^T P=X,Y,Z,1T,在图像 I 1 I_1 I1中对应的投影像素点为 x 1 = u 1 , v 1 , 1 T x_1=u_1, v_1, 1^T x1=u1,v1,1T,根据相机小孔成像模型有:

s u 1 v 1 1 = R ∣ t P = 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_1 \\ v_1 \\ 1 \end{bmatrix}= \begin{bmatrix} R | t \end{bmatrix} P= \begin{bmatrix} 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{bmatrix} \begin{bmatrix} X \\ Y \\ Z \\ 1 \end{bmatrix} s u1v11 =R∣tP= t1t5t9t2t6t10t3t7t11t4t8t12 XYZ1

其中 s = Z s=Z s=Z,利用最后一行将其消去有:

{ s u 1 = t 1 X + t 2 Y + t 3 Z + t 4 s v 1 = t 5 X + t 6 Y + t 7 Z + t 8 s = t 9 X + t 10 Y + t 11 Z + t 12 ⇒ { u 1 = t 1 X + t 2 Y + t 3 Z + t 4 t 9 X + t 10 Y + t 11 Z + t 12 v 1 = t 5 X + t 6 Y + t 7 Z + t 8 t 9 X + t 10 Y + t 11 Z + t 12 \begin{cases} s u_1 = t_1 X + t_2 Y + t_3 Z + t_4\\ s v_1 = t_5 X + t_6 Y + t_7 Z + t_8\\ s = t_9 X + t_{10} Y + t_{11} Z + t_{12} \end{cases} \Rightarrow \begin{cases} u_1 = \frac{t_1 X + t_2 Y + t_3 Z + t_4}{t_9 X + t_{10} Y + t_{11} Z + t_{12}} \\ v_1 = \frac{t_5 X + t_6 Y + t_7 Z + t_8}{t_9 X + t_{10} Y + t_{11} Z + t_{12}} \\ \end{cases} \\ ⎩ ⎨ ⎧su1=t1X+t2Y+t3Z+t4sv1=t5X+t6Y+t7Z+t8s=t9X+t10Y+t11Z+t12⇒{u1=t9X+t10Y+t11Z+t12t1X+t2Y+t3Z+t4v1=t9X+t10Y+t11Z+t12t5X+t6Y+t7Z+t8

为简化表示,定义 R ∣ t R\|t R∣t的行向量为(用粗体符号表示):

{ 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 \begin{cases} \bold{t_1} = t_1, t_2, t_3, t_4^T \\ \bold{t_2} = t_5, t_6, t_7, t_8^T \\ \bold{t_3} = t_9, t_{10}, t_{11}, t_{12}^T \end{cases} ⎩ ⎨ ⎧t1=t1,t2,t3,t4Tt2=t5,t6,t7,t8Tt3=t9,t10,t11,t12T

带入上面的公式有:

{ u 1 = t 1 T P t 3 T P v 1 = t 2 T P t 3 T P ⇒ { t 1 T P − t 3 T P u 1 = 0 t 2 T P − t 3 T P v 1 = 0 \begin{cases} u_1 = \frac{\bold{t_1}^T P}{\bold{t_3}^T P} \\ v_1 = \frac{\bold{t_2}^T P}{\bold{t_3}^T P} \\ \end{cases} \Rightarrow \begin{cases} \bold{t_1}^T P - \bold{t_3}^T P u_1 = 0 \\ \bold{t_2}^T P - \bold{t_3}^T P v_1 = 0 \end{cases} {u1=t3TPt1TPv1=t3TPt2TP⇒{t1TP−t3TPu1=0t2TP−t3TPv1=0

其中, t \bold{t} t是待求变量,每个特征点提供了两个关于 t \bold{t} t的线性约束。若给出 N N N个特征点,则可以列出如下线性方程组:

P 1 T 0 − u 1 P 1 T 0 P 1 T − v 1 P 1 T ⋮ ⋮ ⋮ P N T 0 − u N P N T 0 P N T − v N P N T t 1 t 2 t 3 = 0 \begin{bmatrix} P_1^T & 0 & -u_1 P_1^T \\ 0 & P_1^T & -v_1 P_1^T \\ \hdashline \vdots & \vdots & \vdots \\ \hdashline P_N^T & 0 & -u_N P_N^T \\ 0 & P_N^T & -v_N P_N^T \\ \end{bmatrix} \begin{bmatrix} t_1 \\ t_2 \\ t_3 \end{bmatrix} =0 P1T0⋮PNT00P1T⋮0PNT−u1P1T−v1P1T⋮−uNPNT−vNPNT t1t2t3 =0

2 求解P3P

假设 A , B , C A,B,C A,B,C为世界坐标系中的三个点, a , b , c a,b,c a,b,c为这三个点在相机像平面的对应投影点,则我们可以得到三角形之间的对应关系:

Δ O a b − Δ O A B , Δ O b c − Δ O B C , Δ O a c − Δ O A C (1) \Delta Oab - \Delta OAB, \Delta Obc - \Delta OBC, \Delta Oac - \Delta OAC \tag{1} ΔOab−ΔOAB,ΔObc−ΔOBC,ΔOac−ΔOAC(1)

根据余弦定理,可以得到三个方程:

{ 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 (2) \begin{cases} {OA}^2 + {OB}^2 - 2 OA \cdot OB \cdot cos \langle a,b \rangle = {AB}^2 \\ {OB}^2 + {OC}^2 - 2 OB \cdot OC \cdot cos \langle b,c \rangle = {BC}^2 \\ {OA}^2 + {OC}^2 - 2 OA \cdot OC \cdot cos \langle a,c \rangle = {AC}^2 \end{cases} \tag{2} ⎩ ⎨ ⎧OA2+OB2−2OA⋅OB⋅cos⟨a,b⟩=AB2OB2+OC2−2OB⋅OC⋅cos⟨b,c⟩=BC2OA2+OC2−2OA⋅OC⋅cos⟨a,c⟩=AC2(2)

上述等式除以 O C 2 {OC}^2 OC2,并记 x = O A / O C , y = O B / O C x=OA/OC, y=OB/OC x=OA/OC,y=OB/OC,有:

{ x 2 + y 2 − 2 x y c o s ⟨ a , b ⟩ = A B 2 / O C 2 y 2 + 1 2 − 2 y c o s ⟨ b , c ⟩ = B C 2 / O C 2 x 2 + 1 2 − 2 x c o s ⟨ a , c ⟩ = A C 2 / O C 2 (3) \begin{cases} x^2 + y^2 - 2xycos \langle a,b \rangle = {AB}^2 / {OC}^2 \\ y^2 + 1^2 - 2ycos \langle b,c \rangle = {BC}^2 / {OC}^2 \\ x^2 + 1^2 - 2xcos \langle a,c \rangle = {AC}^2 / {OC}^2 \end{cases} \tag{3} ⎩ ⎨ ⎧x2+y2−2xycos⟨a,b⟩=AB2/OC2y2+12−2ycos⟨b,c⟩=BC2/OC2x2+12−2xcos⟨a,c⟩=AC2/OC2(3)

令 v = A B 2 / O C 2 , u = B C 2 / A B 2 , w = A C 2 / A B 2 v={AB}^2/{OC}^2,u={BC}^2/{AB}^2,w={AC}^2/{AB}^2 v=AB2/OC2,u=BC2/AB2,w=AC2/AB2,则上式变为:

{ x 2 + y 2 − 2 x y c o s ⟨ a , b ⟩ − v = 0 y 2 + 1 2 − 2 y c o s ⟨ b , c ⟩ − u v = 0 x 2 + 1 2 − 2 x c o s ⟨ a , c ⟩ − w v = 0 (4) \begin{cases} x^2 + y^2 - 2xycos \langle a,b \rangle - v = 0 \\ y^2 + 1^2 - 2ycos \langle b,c \rangle - uv = 0\\ x^2 + 1^2 - 2xcos \langle a,c \rangle - wv = 0 \end{cases} \tag{4} ⎩ ⎨ ⎧x2+y2−2xycos⟨a,b⟩−v=0y2+12−2ycos⟨b,c⟩−uv=0x2+12−2xcos⟨a,c⟩−wv=0(4)

关于 a , b , c a,b,c a,b,c的三个余弦角 c o s ⟨ a , b ⟩ , c o s ⟨ b , c ⟩ , c o s ⟨ a , c ⟩ cos \langle a,b \rangle,cos \langle b,c \rangle,cos \langle a,c \rangle cos⟨a,b⟩,cos⟨b,c⟩,cos⟨a,c⟩,以及 u , w u,w u,w可以直接计算出。将(4)中的第一个等式分别带入第二和第三个等式,得到关于 x , y x,y x,y的一个二元二次方程(多项式方程):

( 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 \langle b,c \rangle y+2uxycos \langle a,b \rangle +1 = 0 \\ (1-w)x^2-wy^2-cos \langle a,c \rangle x+2wxycos \langle a,b \rangle +1 = 0 (1−u)y2−ux2−cos⟨b,c⟩y+2uxycos⟨a,b⟩+1=0(1−w)x2−wy2−cos⟨a,c⟩x+2wxycos⟨a,b⟩+1=0

相关推荐
大江东去浪淘尽千古风流人物16 小时前
【VGGT-Ω】前馈式3D重建的规模化之路:Register Attention、自监督训练与10B参数Scaling Law深度解析
深度学习·计算机视觉·transformer·slam·vio·3d重建
大江东去浪淘尽千古风流人物17 小时前
【VGGT】统一3D重建:单网络同时预测相机位姿、深度图、点云与3D轨迹的前馈Transformer架构深度解析
网络·数码相机·3d·transformer·slam·3d重建·cvpr2025
kobesdu4 天前
【ROS2实战笔记-24】ROS2 Launch 实用技巧:条件逻辑与节点动态生成
笔记·ros·slam
大江东去浪淘尽千古风流人物5 天前
【RADIO-ViPE】动态环境下的在线开放词汇语义SLAM:视觉-语言-几何紧耦合BA与自适应鲁棒核深度解析
slam·语义slam·vio·开放词汇·动态场景
大江东去浪淘尽千古风流人物6 天前
【KV-Tracker】Transformer 实时位姿跟踪:KV-Cache 加速多视图几何网络达 27FPS
网络·深度学习·transformer·slam·位姿估计·kv-cache
大江东去浪淘尽千古风流人物6 天前
【ACE-SLAM】场景坐标回归实时神经 SLAM:TriMLP 架构与隐式回环闭合
人工智能·神经网络·数据挖掘·回归·实时·slam·场景坐标回归
元让_vincent6 天前
论文 Review SLAM LiLoc | Lifelong Localization
slam·性能提升·激光slam·multi-session·先验地图
大江东去浪淘尽千古风流人物7 天前
【SharpSLAM】无人机高速飞行下的物体级视觉 SLAM:GAN 去模糊与 3D 重建联合优化
生成对抗网络·3d·无人机·slam·3d重建·deepsdf·去模糊
大江东去浪淘尽千古风流人物11 天前
【Structure PLP-SLAM】点-线-面三基元融合SLAM:从Plücker坐标到Graph-Cut平面重建的完整技术解析
平面·slam·视觉slam·点线面融合·plücker坐标·平面重建
Undergoer_TW18 天前
SLAM实战避坑指南:对极几何与极点极线推导——吃透零空间与对极约束
slam·对极几何