【ORBSLAM2点线融合】空间直线参数化

一、空间直线参数化

一条空间直线可以由两个点或两个平面交线来表示。
通常,空间直线的定义会通过直线与两个正交平面的交点来表示,这两个交点分别有2个自由度,所以直线有在三维空间中有4个自由度,如图(来自《计算机视觉中的多视图几何》3.2.2)
在这里插入图片描述

普吕克矩阵和普吕克坐标

一条空间直线可以用一个4x4的反对称矩阵来表示,这个矩阵称为普吕克矩阵,已知两个三维空间中的点齐次坐标A,B,则普吕克矩阵L为
L = A B T − B A T L=AB^{T}-BA^{T} L=ABTBAT
L的秩为2,并且其中有6个独立的非零元素(因为是反对称矩阵,主对角线是0,剩下的元素相当于只有6个),但只有5个比率是有意义的,由于L的行列式为0,所以普吕克矩阵表示的直线有4个自由度。(这一段直接来自书里,没明白为什么)
而普吕克坐标就是用普吕克矩阵的6个非零元素组成的向量,可以写成
L = { l 12 , l 13 , l 14 , l 23 , l 42 , l 34 } \mathcal{L}=\left\{ l_{12},l_{13},l_{14},l_{23},l_{42},l_{34}\right\} L={ l12,l13,l14,l23,l42,l34}
因为L行列式为0,所以普吕克坐标还满足
l 12 l 34 + l 13 l 42 + l 14 l 23 = 0 l_{12}l_{34}+l_{13}l_{42}+l _{14}l_{23}=0 l12l34+l13l42+l14l23=0
按照书中说法,一个六维向量如果满足上式,则这个向量就对应了三维空间中的一条直线。实际上,这个六维向量的可以有很多种组合,Bartoli在文献[2]中使用了以下形式:
已知两个三维空间中的点 M ∼ ( M ~ , m ) , N ∼ ( N ~ , n ) M\sim(\widetilde{M}, m),N\sim(\widetilde{N}, n) M(M ,m),N(N ,n)(~表示非齐次坐标),则这两个点连成的直线的普吕克坐标 L \mathcal{L} L
L = [ M ~ × N ~ m N ~ − n M ~ ] = [ n v ] \mathcal{L}= \begin{bmatrix} \widetilde{M}\times \widetilde{N} \\ m\widetilde{N}-n\widetilde{M} \end{bmatrix}=\begin{bmatrix}n \\ v \end{bmatrix} L=[M ×N mN nM ]=[nv]
其中v是直线方向向量,n是过该直线且通过原点的平面的法向量,且满足 n T v = 0 n^{T}v=0 nTv=0,如下图

在这里插入图片描述

普吕克坐标转化成普吕克矩阵公式如下
L = [ [ n ] × v − v ⊤ 0 ] L=\left[\begin{array}{cc} {[n]_\times} & v \\ -v^{\top} & 0 \end{array}\right] L=[[n]×vv0]
其中 [ . ] × [.]_{\times} [.]×表示向量的反对称矩阵形式
[ n 1 n 2 n 3 ] × = [ 0 − n 3 n 2 n 3 0 − n 1 − n 2 n 1 0 ] \begin{bmatrix} n_{1} \\ n_{2} \\ n_{3} \end{bmatrix}_{\times}=\begin{bmatrix} 0 & -n_{3} & n_{2} \\ n_{3} & 0 & -n_{1} \\ -n_{2} & n_{1} & 0 \end{bmatrix} n1n2n3 ×= 0n3n2n30n1n2n10 并且两个向量叉乘可以表示成
a × b = [ a ] × b a \times b=[a]_{\times}b a×b=[a]×b

二、普吕克坐标的变换

普吕克坐标表示的直线从世界坐标到相机坐标转化如下
[ n c v c ] = [ R c w [ t c w ] × R c w 0 R c w ] [ n w v w ] \begin{bmatrix} n_{c} \\ v_{c} \end{bmatrix}=\begin{bmatrix} R_{cw} & \left[ t_{cw}\right]_\times R_{cw} \\ 0 & R_{cw} \end{bmatrix}\begin{bmatrix} n_{w} \\ v_{w} \end{bmatrix} [ncvc]=[Rcw0[tcw]×RcwRcw][nwvw]
推导过程其实很好理解,首先直线方向向量部分只需要把两个点转换到相机坐标下,再相减即可,法向量部分推导如下,拿上面那张图举例
n c = M c × v c = ( R c w M w + t c w ) × R c w v w = R c w M w × R c w v w + t c w × R c w v w = R c w M w × v w + [ t c w ] × R c w v w = R c w n w + [ t c w ] × R c w v w \begin{aligned} n_{c} &= M_{c} \times v_{c}\\ &= \left (R_{cw}M_{w}+t_{cw} \right )\times R_{cw}v_{w}\\ &= R_{cw}M_{w} \times R_{cw}v_{w}+t_{cw}\times R_{cw}v_{w}\\ &= R_{cw}M_{w} \times v_{w} + [t_{cw}]_{\times}R_{cw}v_{w} \\ &=R_{cw}n_{w} + [t_{cw}]_{\times}R_{cw}v_{w} \end{aligned} nc=Mc×vc=(RcwMw+tcw)×Rcwvw=RcwMw×Rcwvw+tcw×Rcwvw=RcwMw×vw+[tcw]×Rcwvw

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值