直接线性转换DLT

  • Post author:
  • Post category:其他




概念

直接线性变换(DLT)是建立图像点坐标和相应物点物方空间坐标之间直接的线性关系的算法。



功能

已知一组3D空间点坐标信息和其在图像中的投影坐标信息,计算图像相对的位姿变换信息。如果把3D点的空间坐标信息转换为另一个相机坐标下即可求解的来个相机坐标之间的位姿变换信息。



步骤

已知相机2坐标系下的一组3D点坐标为



P

c

2

=

(

x

c

2

,

y

c

2

,

z

c

2

)

P_{c2}=(x_{c2},y_{c2},z_{c2})







P











c


2





















=








(



x











c


2



















,





y











c


2



















,





z











c


2



















)





,该点在相机1的投影坐标为



(

u

c

1

,

v

c

1

)

(u_{c1},v_{c1})






(



u











c


1



















,





v











c


1



















)





,相机1对应的内参矩阵为



K

K






K





,根据上述信息有




(

u

c

1

v

c

1

1

)

=

K

(

R

12

(

x

c

2

y

c

2

z

c

2

)

+

t

12

)

  


  

(

x

c

1

y

c

1

z

c

1

)

=

[

R

12

t

12

]

(

x

c

2

y

c

2

z

c

2

1

)

  


  

s

(

u

c

1

v

c

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

c

2

y

c

2

z

c

2

1

)

\begin{pmatrix} u_{c1} \\ v_{c1}\\ 1 \end{pmatrix}=K(R_{12}\begin{pmatrix} x_{c2} \\ y_{c2}\\ z_{c2} \end{pmatrix}+t_{12})\\ \implies\begin{pmatrix} x_{c1} \\ y_{c1}\\ z_{c1} \end{pmatrix}=[R_{12}|t_{12}]\begin{pmatrix} x_{c2} \\ y_{c2}\\ z_{c2}\\ 1 \end{pmatrix}\\\implies s\begin{pmatrix} u_{c1} \\ v_{c1}\\ 1 \end{pmatrix}=\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{pmatrix} x_{c2} \\ y_{c2}\\ z_{c2}\\ 1 \end{pmatrix}























































u











c


1


























v











c


1

























1



























































=








K


(



R











1


2






































































x











c


2


























y











c


2


























z











c


2












































































+









t











1


2



















)








































































x











c


1


























y











c


1


























z











c


1












































































=








[



R











1


2























t











1


2



















]







































































x











c


2


























y











c


2


























z











c


2

























1
































































































s





















































u











c


1


























v











c


1

























1



























































=

























































t










1

























t










5

























t










9














































t










2

























t










6

























t











1


0















































t










3

























t










7

























t











1


1















































t










4

























t










8

























t











1


2















































































































































x











c


2


























y











c


2


























z











c


2

























1















































































上述矩阵方程可以写成来个线性方程的形式




u

c

1

=

t

1

x

c

2

+

t

2

y

c

2

+

t

3

z

c

2

+

t

4

t

9

x

c

2

+

t

10

y

c

2

+

t

11

z

c

2

+

t

12

v

c

1

=

t

5

x

c

2

+

t

6

y

c

2

+

t

7

z

c

2

+

t

8

t

9

x

c

2

+

t

10

y

c

2

+

t

11

z

c

2

+

t

12

u_{c1}=\frac{t_1x_{c2}+t_2y_{c2}+t_3z_{c2}+t_4}{t_9x_{c2}+t_{10}y_{c2}+t_{11}z_{c2}+t_{12}}\\v_{c1}=\frac{t_5x_{c2}+t_6y_{c2}+t_7z_{c2}+t_8}{t_9x_{c2}+t_{10}y_{c2}+t_{11}z_{c2}+t_{12}}







u











c


1





















=




















t










9



















x











c


2





















+





t











1


0




















y











c


2





















+





t











1


1




















z











c


2





















+





t











1


2
































t










1



















x











c


2





















+





t










2



















y











c


2





















+





t










3



















z











c


2





















+





t










4











































v











c


1





















=




















t










9



















x











c


2





















+





t











1


0




















y











c


2





















+





t











1


1




















z











c


2





















+





t











1


2
































t










5



















x











c


2





















+





t










6



















y











c


2





















+





t










7



















z











c


2





















+





t










8








































我们的目的就是求解



t

1

t

12

t_1\cdots t_{12}







t










1


























t











1


2






















,通过多组匹配的2D-3D点可以构建线性方程组





(

x

c

2

1

y

c

2

1

z

c

2

1

1

0

0

0

0

u

1

x

c

2

1

u

1

y

c

2

1

u

1

z

c

2

1

1

0

0

0

0

x

c

2

1

y

c

2

1

z

c

2

1

1

v

1

x

c

2

1

v

1

y

c

2

1

v

1

z

c

2

1

1

x

c

2

n

y

c

2

n

z

c

2

n

1

0

0

0

0

u

n

x

c

2

n

u

n

y

c

2

n

u

n

z

c

2

n

1

0

0

0

0

x

c

2

n

y

c

2

n

z

c

2

n

1

v

n

x

c

2

n

v

n

y

c

2

n

v

n

z

c

2

n

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

)

=

0

\begin{pmatrix} x^1_{c2}&y^1_{c2}&z^1_{c2}&1&0&0&0&0&-u_1x^1_{c2}&-u_1y^1_{c2}&-u_1z^1_{c2}&1\\ 0&0&0&0&x^1_{c2}&y^1_{c2}&z^1_{c2}&1&-v_1x^1_{c2}&-v_1y^1_{c2}&-v_1z^1_{c2}&1\\ \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots\\ x^n_{c2}&y^n_{c2}&z^n_{c2}&1&0&0&0&0&-u_nx^n_{c2}&-u_ny^n_{c2}&-u_nz^n_{c2}&1\\ 0&0&0&0&x^n_{c2}&y^n_{c2}&z^n_{c2}&1&-v_nx^n_{c2}&-v_ny^n_{c2}&-v_nz^n_{c2}&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}=0




































































































x











c


2









1
























0






















x











c


2









n
























0






























y











c


2









1
























0






















y











c


2









n
























0






























z











c


2









1
























0






















z











c


2









n
























0





























1








0





















1








0





























0









x











c


2









1





































0









x











c


2









n













































0









y











c


2









1





































0









y











c


2









n













































0









z











c


2









1





































0









z











c


2









n













































0








1





















0








1

































u










1



















x











c


2









1




























v










1



















x











c


2









1









































u










n



















x











c


2









n




























v










n



















x











c


2









n

















































u










1



















y











c


2









1




























v










1



















y











c


2









1









































u










n



















y











c


2









n




























v










n



















y











c


2









n

















































u










1



















z











c


2









1




























v










1



















z











c


2









1









































u










n



















z











c


2









n




























v










n



















z











c


2









n













































1








1





















1








1



























































































































































































































































































































t










1

























t










2

























t










3

























t










4

























t










5

























t










6

























t










7

























t










8

























t










9

























t











1


0


























t











1


1


























t











1


2














































































































































































































































=








0






如果一共有6对匹配的2D-3D点我们可以通过线性求解的形式获得



t

1

t

12

t_1\cdots t_{12}







t










1


























t











1


2






















,如果大于6对点我们可以通过SVD分解求最小二乘解获得



t

1

t

12

t_1\cdots t_{12}







t










1


























t











1


2






















。其中




R

=

[

t

1

t

2

t

3

t

5

t

6

t

7

t

9

t

10

t

11

]

t

=

[

t

4

t

8

t

12

]

R=\begin{bmatrix}t_1&t_2&t_3\\t_5&t_6&t_7\\t_9&t_{10}&t_{11}\\\end{bmatrix}\\t=\begin{bmatrix}t_4\\t_8\\t_{12}\end{bmatrix}






R




=

























































t










1

























t










5

























t










9














































t










2

























t










6

























t











1


0















































t










3

























t










7

























t











1


1


















































































t




=

























































t










4

























t










8

























t











1


2














































































由于在整个求解的过程中没有考虑到旋转矩阵的单位正交性,可以将上述求的旋转矩阵进行



Q

R

QR






Q


R





分解求得或者




R

=

(

R

R

T

)

1

2

R

R=(RR^T)^{-\frac1 2 }R






R




=








(


R



R










T










)

























2














1




























R







链接

[PnP问题之DLT解法](https://zhuanlan.z hihu.com/p/58648937)



补充



版权声明:本文为ABC1225741797原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。