《视觉SLAM十四讲》学习笔记-对极约束问题

  • Post author:
  • Post category:其他


对极约束

对极约束


问题描述

:求取两帧图像










I








1







,





I








2















I

1

,

I

2



之间的运动。设第一帧到第二帧的运动为









R




,







t






























R

,

t





,其中心分别为










O






1







,





O






2















O

1

,

O

2














I








1















I

1



中有一个点










p






1















p

1



对应到










I








2















I

2



的点为










p






2















p

2



.







P












P



为两个摄像机在远处的交点。





O


1




O


2



P




称为极平面(Epipolar plane),










O






1










O






2















O

1

O

2



连线与相机平面交点称为极点(Epipoles),










O






1










O






2















O

1

O

2



称为基线,










l






1







,





l






2















l

1

,

l

2



为极线(Epipolar line).

以第一帧的坐标系作为基准,设







P












P



坐标为





P



=


[


X


,


Y


,


Z



]








,










p






1







,





p






2















p

1

,

p

2



位置为:










s






1










p






1







=




K






P




,







s






2










p






2







=




K




(




R






P




+







t






















)










s

1

p

1

=

K

P

,

 

s

2

p

2

=

K

(

R

P

+

t

)



其中









K












K



为相机内参,









R




,







t






























R

,

t





为坐标系的相机运动。转化为齐次等式:










p






1







=




K






P




,







p






2







=




K




(




R






P




+







t






















)










p

1

=

K

P

,

 

p

2

=

K

(

R

P

+

t

)



















x


























1







=







K













1

















p


























1















x

1

=

K

1

p

1



,















x


























2







=







K













1

















p


























2















x

2

=

K

1

p

2



,则有:















x


























2







=




R












x


























1







+







t






























x

2

=

R

x

1

+

t





两边左乘















t










































t





,有:















t










































x


























2







=










t




































R












x


























1











(










x


























2












t






















=


0


)










t

x

2

=

t

R

x

1

 

 

(

x

2

t

=

0

)



两边再左乘















x

































2















x

2





















x

































2















t










































x


























2







=










x

































2















t




































R












x


























1















x

2

t

x

2

=

x

2

t

R

x

1



因为















t










































x


























2















t

x

2



















t










































t





















x


























2















x

2



皆为垂直,所以左侧为0:















x

































2















t




































R












x


























1







=


0










x

2

t

R

x

1

=

0



再代入










x






1







,





x






2















x

1

,

x

2



得到:







(







K













1

















p


























2










)






















t




































R









K













1

















p


























1







=


0










(

K

1

p

2

)

t

R

K

1

p

1

=

0



即:















p

































2












K































t




































R









K













1

















p


























1







=


0










p

2

K

t

R

K

1

p

1

=

0

此式即为

对极约束

,几何意义为










O






1







,





O






2







,


P












O

1

,

O

2

,

P



共面。

将中间拆为基础矩阵和本质矩阵,可简化约束为:









E




=










t




































R




,




R




=







K













T













E









K













1









,










x

































2









E












x


























1







=










p

































2









F












p


























1







=


0










E

=

t

R

,

R

=

K

T

E

K

1

,

x

2

E

x

1

=

p

2

F

p

1

=

0



上式中,









E












E





本质矩阵

(Essential Matrix),









F












F





基础矩阵

(Fundamental Matrix).所以相机位势估计问题变为:

  • 根据配对点的像素位置, 求出









    E












    E













    F












    F



    ;
  • 根据









    E












    E













    F












    F



    , 求出









    R




    ,







    t






























    R

    ,

    t





    .

本质矩阵









E












E



性质:

  • 尺度等价性:









    E












    E



    在不同尺度下等价
  • 内在性质:









    E












    E



    的奇异值必定是







    [


    ρ


    ,


    ρ


    ,


    0


    ]










    [

    ρ

    ,

    ρ

    ,

    0

    ]



    的形式
















  • t




































    R












    t

    R



    有6个自由度,而









    E












    E



    有5个自由度

如何求解本质矩阵









E












E



:

  • 方法一:因为









    E












    E



    有五个自由度,说明可以用五对点来求解









    E












    E



    。但









    E












    E



    的内在性质是非线性的,用线性的方程求解会带来问题。
  • 方法二:从尺度等价性出发,用

    八对点

    来解方程。

八对点求解本质矩阵









E












E



考虑一对匹配点,它们的归一化坐标为















x


























1







=


[





u






1







,





v






1







,


1





]






















x

1

=

[

u

1

,

v

1

,

1

]





,















x


























2







=


[





u






2







,





v






2







,


1





]






















x

2

=

[

u

2

,

v

2

,

1

]





,根据对极约束有:







[





u






1







,





v






1







,


1





]












































e






1


















e






4


















e






7
























e






2


















e






5


















e






8
























e






3


















e






6


















e






9






































[





u






2







,





v






2







,


1





]






















[

u

1

,

v

1

,

1

]

[

e

1

e

2

e

3

e

4

e

5

e

6

e

7

e

8

e

9

]

[

u

2

,

v

2

,

1

]















E












E



展开成向量表示,












e






















=


[





e






1







,





,





e






9










]






















e

=

[

e

1

,

,

e

9

]





,则线性方程为:







[





u






1










u






2







,





u






1










v






2







,





u






1







,





v






1










u






2







,





v






1










v






2







,





v






1







,





u






2







,





v






2







,


1


]










e






















=







0






























[

u

1

u

2

,

u

1

v

2

,

u

1

,

v

1

u

2

,

v

1

v

2

,

v

1

,

u

2

,

v

2

,

1

]

e

=

0





对其他点对,也有类似表示。把这8个点对的方程放在一起可组成一个线性方程:








































































u






1






1










u






1






2


















u






2






1










u






2






2


















u






3






1










u






3






2





























u






8






1










u






8






2
























u






1






1










v






1






2


















u






2






1










v






2






2


















u






3






1










v






3






2





























u






8






1










v






8






2
























u






1






1


















u






2






1


















u






3






1





























u






8






1
























v






1






1










u






1






2


















v






2






1










u






2






2


















v






3






1










u






3






2





























v






8






1










u






8






2
























v






1






1










v






1






2


















v






2






1










v






2






2


















v






3






1










v






3






2





























v






8






1










v






8






2
























v






1






1


















v






2






1


















v






3






1





























v






8






1
























u






1






2


















u






2






2


















u






3






2





























u






8






2
























v






1






2


















v






2






2


















v






3






2





























v






8






2





















1










1










1





















1









































































e






















=







0






























[

u

1

1

u

2

1

u

1

1

v

2

1

u

1

1

v

1

1

u

2

1

v

1

1

v

2

1

v

1

1

u

2

1

v

2

1

1

u

1

2

u

2

2

u

1

2

v

2

2

u

1

2

v

1

2

u

2

2

v

1

2

v

2

2

v

1

2

u

2

2

v

2

2

1

u

1

3

u

2

3

u

1

3

v

2

3

u

1

3

v

1

3

u

2

3

v

1

3

v

2

3

v

1

3

u

2

3

v

2

3

1

u

1

8

u

2

8

u

1

8

v

2

8

u

1

8

v

1

8

u

2

8

v

1

8

v

2

8

v

1

8

u

2

8

v

2

8

1

]

e

=

0





则问题变为:

如何根据已估得的本质矩阵









E












E



,恢复得到









R












R
















t






























t






.

不妨设









E












E



的SVD分解为:









E




=




U






Σ









V
























E

=

U

Σ

V





其中









U












U













V












V



为正交阵,









Σ












Σ



为奇异值矩阵,根据之前的推断







Σ


=


d




i


a


g




(


ρ


,


ρ


,


0


)










Σ

=

d

i

a

g

(

ρ

,

ρ

,

0

)



,可知对任一









E












E



存在两个可能的









R












R
















t






























t





与之对应:






















t

































1







=




U









R








Z









(





π








2













)




Σ









U
















,











R








1







=




U









R















Z









(





π








2













)







V
































t

































2







=




U









R








Z









(








π








2













)




Σ









U
















,











R








2







=




U









R















Z









(








π








2













)







V



































t

1

=

U

R

Z

(

π

2

)

Σ

U

,

 

 

R

1

=

U

R

Z

(

π

2

)

V

t

2

=

U

R

Z

(

π

2

)

Σ

U

,

 

 

R

2

=

U

R

Z

(

π

2

)

V





式中












R








Z









(





π








2













)










R

Z

(

π

2

)



表示为沿Z轴旋转90度得到的旋转矩阵。此外,由于-









E












E













E












E



等价,对任意的












t






























t





取负号也会得到同样结果。所以从









E












E



分解到









R












R
















t






























t





时一共存在四个可能的解。

后续为了检查哪个解是正确的时候,可以把任意一点代入四个解中,当该点在两个相机下的深度皆为正的深度时(即解为正数),即可确认该解是所述问题的正确的解。


剩下的问题



如何确认解出的









E












E



满足内在性质

假设对









E












E



做SVD分解后,奇异值矩阵







Σ


=


d




i


a


g




(





ρ






1







,





ρ






2







,





ρ






3







)










Σ

=

d

i

a

g

(

ρ

1

,

ρ

2

,

ρ

3

)



, 不妨设










ρ






1













ρ






2













ρ






3















ρ

1

ρ

2

ρ

3



,构造:









E




=




U




d




i


a


g






(











ρ






1







+





ρ






2












2













,









ρ






2







+





ρ






3












2













,


0




)









V
























E

=

U

d

i

a

g

(

ρ

1

+

ρ

2

2

,

ρ

2

+

ρ

3

2

,

0

)

V





即把求出的矩阵投影到









E












E



的流形上,即可保证其满足内在性质。更简单的做法是直接将奇异值矩阵取为diag(1, 1, 0)使得









E












E



具有尺度等价性。

单应矩阵

单应矩阵(Homography)









H












H



:描述了两个平面之间的映射关系。它描述了处于共同平面上的一些点在两张图像之间的变换关系。

假设图像










I








1















I

1














I








2















I

2



有匹配好的点










p






1















p

1














p






2















p

2



,这些特征点落在平面上,平面满足方程:















n




































P




+


d




=


0










n

P

+

d

=

0



整理有:






















n




































P









d















=


1










n

P

d

=

1



则:






















p


























2















































=




K




(




R


P




+







t






















)












=




K




(




R


P




+







t

























(

















n




































P









d















)


)












=




K




(




R
















t






























n







































d















)




P














=




K




(




R
















t






























n







































d















)







K













1












p






1


























p

2

=

K

(

R

P

+

t

)

=

K

(

R

P

+

t

(

n

P

d

)

)

=

K

(

R

t

n

d

)

P

=

K

(

R

t

n

d

)

K

1

p

1



这是一个关于图像坐标










p






1















p

1














p






2















p

2



的变换,为方便把中间这部记为









H












H



, 于是:















p


























2







=




H












p


























1















p

2

=

H

p

1



为求解









H












H



,类似于









E












E



的做法,将上式展开:





































u






2


















v






2















1

































=
































h






1


















h






4


















h






7
























h






2


















h






5


















h






8
























h






3


















h






6


















h






9




































































u






1


















v






1















1









































[

u

2

v

2

1

]

=

[

h

1

h

2

h

3

h

4

h

5

h

6

h

7

h

8

h

9

]

[

u

1

v

1

1

]



为简化问题,实际上常常乘以一个非0因子使得










h






9







=


1










h

9

=

1



,即乘上







1




/




(





h






7










u






1







+





h






8










v






1







+





h






9







)










1

/

(

h

7

u

1

+

h

8

v

1

+

h

9

)



,再次展开得到式子:

















u






2







=









h






1










u






1







+





h






2










v






1







+





h






3
















h






7










u






1







+





h






8










v






1







+





h






9






























v






2







=









h






4










u






1







+





h






5










v






1







+





h






6
















h






7










u






1







+





h






8










v






1







+





h






9






































u

2

=

h

1

u

1

+

h

2

v

1

+

h

3

h

7

u

1

+

h

8

v

1

+

h

9

v

2

=

h

4

u

1

+

h

5

v

1

+

h

6

h

7

u

1

+

h

8

v

1

+

h

9



注意到










h






9







=


1










h

9

=

1



, 整理后可得到:

















u






2







=


(





h






1










u






1







+





h






2










v






1







+





h






3







)





(





h






7










u






1







+





h






8










v






1







)





u






2


















v






2







=


(







h






4










u






1







+





h






5










v






1







+





h






6









)





(







h






7










u






1







+





h






8










v






1









)





v






2


























u

2

=

(

h

1

u

1

+

h

2

v

1

+

h

3

)

(

h

7

u

1

+

h

8

v

1

)

u

2

v

2

=

(

h

4

u

1

+

h

5

v

1

+

h

6

)

(

h

7

u

1

+

h

8

v

1

)

v

2



由此可见一对匹配点可构造两项约束,于是自由度为8的单应矩阵可通过4对匹配点来算出。构造方程如下:











































































































u






1






1















0













u






2






1















0













u






3






1















0













u






4






1















0



















v






1






1















0













v






2






1















0













v






3






1















0













v






4






1















0
















1










0










1










0










1










0










1










0
















0













u






1






1















0













u






2






1















0













u






3






1















0













u






4






1





















0













v






1






1















0













v






2






1















0













v






3






1















0













v






4






1





















0










1










0










1










0










1










0










1






















u






1






1










u






1






2





















u






1






1










v






1






2





















u






2






1










u






2






2





















u






2






1










v






2






2





















u






3






1










u






3






2





















u






3






1










v






3






2





















u






4






1










u






4






2





















u






4






1










v






4






2
























v






1






1










u






1






2





















v






1






1










v






1






2


















v






2






1










u






2






2





















v






2






1










v






2






2


















v






3






1










u






3






2





















v






3






1










v






3






2


















v






4






1










u






4






2





















v






4






1










v






4






2











































































































































































































h






1


















h






2


















h






3


















h






4


















h






5


















h






6


















h






7


















h






8







































































































=






































































































u






1






2


















v






1






2


















u






2






2


















v






2






2


















u






3






2


















v






3






2


















u






4






2


















v






4






2




















































































































[

u

1

1

v

1

1

1

0

0

0

u

1

1

u

2

1

v

1

1

u

2

1

0

0

0

u

1

1

v

1

1

1

u

1

1

v

2

1

v

1

1

v

2

1

u

1

2

v

1

2

1

0

0

0

u

1

2

u

2

2

v

1

2

u

2

2

0

0

0

u

1

2

v

1

2

1

u

1

2

v

2

2

v

1

2

v

2

2

u

1

3

v

1

3

1

0

0

0

u

1

3

u

2

3

v

1

3

u

2

3

0

0

0

u

1

3

v

1

3

1

u

1

3

v

2

3

v

1

3

v

2

3

u

1

4

v

1

4

1

0

0

0

u

1

4

u

2

4

v

1

4

u

2

4

0

0

0

u

1

4

v

1

4

1

u

1

4

v

2

4

v

1

4

v

2

4

]

[

h

1

h

2

h

3

h

4

h

5

h

6

h

7

h

8

]

=

[

u

2

1

v

2

1

u

2

2

v

2

2

u

2

3

v

2

3

u

2

4

v

2

4

]



解线性方程可得到









H












H



.此法称为直接线性变换法(Direct Linear Transform).

同本质矩阵相似,为验证









H












H



,对









H












H



做SVD分解后可得到四组旋转矩阵与向量,考虑以下事实:

  • 成像的地图点的深度是否全为正值?若是可排除两组解。
  • 场景中的平面的法向量。若场景平面与相机平面平行,又可排除一组解,其法向量












    n






























    n





    的理论值应为












    1






























    1





    .

    可以看到最后的解是通过场景事实筛选而获得的。

问题讨论:

  • 尺度不确定性问题:对












    t






























    t





    归一化时,会导致单目视觉的尺度不确定性(Scale Ambiguity). 当对两张图的












    t






























    t





    归一化时,相当于固定了尺度,即












    t






























    t





    的单位为1,称之为单目SLAM的初始化。要求初始化的两张图像须有一定程度的平移。

  • 初始化的纯旋转问题:若相机发生的是纯旋转,导致












    t






























    t





    为零,会导致无法求解









    R












    R



    . 因而要求:单目初始化不能只有纯旋转,必须要有一定程度的平移。

  • 多于八对点的情况:不妨设线性化后的对极约束等式中,左侧的系数矩阵为









    A












    A



    :









    A









    e






















    =







    0






























    A

    e

    =

    0





    只用八点法的话,









    A












    A



    的大小为8*9; 当多于八对点时,可以通过最小化二次型来求解:










    min











    e
































    A









    e
































    2






    2







    =





    min











    e



































    e







































    A


















    A









    e






























    min

    e

    A

    e

    2

    2

    =

    min

    e

    e

    A

    A

    e





    这样就求出了在最小二乘意义下的矩阵。也可以通过

    Random Sample Concensus

    (随机采样一致性)来求解。