如何理解PnP问题的DLT解法以及Python编程实践

PnP问题的DLT解法

欢迎关注知乎@司南牧
已知:上一帧相机坐标系下的点的三维齐次坐标 Q Q Q,和,那 n n n个点在当前帧中的二维齐次坐标 q q q, 和相机内参矩阵 K K K

待求解变量 :当前帧相对上一帧的位姿变换矩阵 [ R ∣ t ] [R|t] [Rt]

约束方程
K [ R ∣ t ] Q = λ q K[R|t]Q = \lambda q K[Rt]Q=λq

我们记

[ R ∣ t ] = [ a 11 a 12 a 13 a 14 a 21 a 22 a 23 a 24 a 31 a 32 a 33 a 34 ] [R|t]= \begin{bmatrix} a_{11}&a_{12}&a_{13}&a_{14}\\ a_{21}&a_{22}&a_{23}&a_{24}\\ a_{31}&a_{32}&a_{33}&a_{34} \end{bmatrix} [Rt]=a11a21a31a12a22a32a13a23a33a14a24a34

DLT的思路就是把 a i j a_{ij} aij代入式 ( 1 ) (1) (1),然后求出 a i j a_{ij} aij就可以求出 [ R ∣ t ] [R|t] [Rt]。可以看到]现在我们有12个未知数一对点只能提供两个方程,所以需要6对点。

目前已知相机内参矩阵
K = [ f x 0 c x 0 f y c y 0 0 1 ] K= \begin{bmatrix} f_x&0&c_x\\ 0&f_y&c_y\\ 0&0&1 \end{bmatrix} K=fx000fy0cxcy1

还已知在上一帧相机坐标系下的三维齐次坐标
Q = [ x y z 1 ] Q=\begin{bmatrix}x\\y\\z\\ 1\end{bmatrix} Q=xyz1
还已知对应点在当前帧的二维坐标

q = [ u v 1 ] q=\begin{bmatrix}u\\v\\1\end{bmatrix} q=uv1
将式子 ( 2 ) , ( 3 ) , ( 4 ) , ( 5 ) (2),(3),(4),(5) (2),(3),(4),(5)代入到式 ( 1 ) (1) (1)中得到:
K [ R ∣ t ] Q = [ f x 0 c x 0 f y c y 0 0 1 ] [ a 11 a 12 a 13 a 14 a 21 a 22 a 23 a 24 a 31 a 32 a 33 a 34 ] [ x y z 1 ] = λ [ u v 1 ] K[R|t]Q = \begin{bmatrix} f_x&0&c_x\\ 0&f_y&c_y\\ 0&0&1 \end{bmatrix} \begin{bmatrix} a_{11}&a_{12}&a_{13}&a_{14}\\ a_{21}&a_{22}&a_{23}&a_{24}\\ a_{31}&a_{32}&a_{33}&a_{34} \end{bmatrix} \begin{bmatrix} x\\ y\\ z\\ 1 \end{bmatrix} =\lambda \begin{bmatrix}u\\ v\\1\end{bmatrix} K[Rt]Q=fx000fy0cxcy1a11a21a31a12a22a32a13a23a33a14a

  • 7
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值