系统校准


为了能利用立体视觉系统的视差计算三维深度信息,必须首先设法得到立体视觉系统的以下信息:
(1)相机的内部参数。包括各相机的焦距、光心及畸变模型等。
(2)相机的外部参数。包括各相机坐标系与世界坐标系之间的旋转和平移关系。
(3)相机间的相对位置关系。包括各个相机坐标系与其他相机坐标系之间的旋转和平移关系,以及多幅图像中同源像点所对应空间点的坐标等。

投影模型

在实际工程实践当中,将获取上述各种信息的过程称为对立体视觉系统的校准(Stereo Calibration)过程。为实现对立体视觉系统的校准,通常会让立体视觉系统的各个相机对同一校准点阵进行图像采集,然后根据点阵信息计算各种参数。

**双目立体视觉系统的校准过程分为相机校准和立体视觉系统校准两个阶段。**相机校准阶段会计算系统中每个相机的焦距、光心位置、相机的畸变模型,以及每个相机坐标系与世界坐标系之间的关系。单个相机校准过程实际上是确定大小为3*4投影矩阵MMM的过程,若投影矩阵的每一项用mij(i=1,2,3,j=1,2,3,4)m_{ij}(i=1,2,3,j=1,2,3,4)mij​(i=1,2,3,j=1,2,3,4)表示,则有
Zc[ij1]=[m11m12m13m14m21m22m23m24m31m32m33m34][XwYwZw1]Z_{c}\begin{bmatrix}i \\j \\1 \end{bmatrix}= \begin{bmatrix}m_{11} &m_{12} &m_{13} &m_{14} \\m_{21} &m_{22} &m_{23} &m_{24} \\m_{31} &m_{32} &m_{33} &m_{34} \end{bmatrix}\begin{bmatrix}X_{w} \\Y_{w} \\Z_{w} \\1 \end{bmatrix}Zc​⎣⎡​ij1​⎦⎤​=⎣⎡​m11​m21​m31​​m12​m22​m32​​m13​m23​m33​​m14​m24​m34​​⎦⎤​⎣⎢⎢⎡​Xw​Yw​Zw​1​⎦⎥⎥⎤​

若已知kkk个投影前后的点对坐标Pw(Xw,Yw,Zw)P_{w}(X_{w},Y_{w},Z_{w})Pw​(Xw​,Yw​,Zw​)和p(i,j)p(i,j)p(i,j),则可得到kkk个方程组,第kkk个方程组结构如下:
{Zck⋅ik=m11Xwk+m12Ywk+m13Zwk+m14Zck⋅jk=m21Xwk+m22Ywk+m23Zwk+m24Zck=m31Xwk+m32Ywk+m33Zwk+m34\begin{cases}Z_{c}^{k} \cdot i^{k}=m_{11}X_{w}^{k}+m_{12}Y_{w}^{k}+m_{13}Z_{w}^{k}+m_{14} \\ \\Z_{c}^{k} \cdot j^{k}=m_{21}X_{w}^{k}+m_{22}Y_{w}^{k}+m_{23}Z_{w}^{k}+m_{24} \\ \\Z_{c}^{k} =m_{31}X_{w}^{k}+m_{32}Y_{w}^{k}+m_{33}Z_{w}^{k}+m_{34} \end{cases}⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧​Zck​⋅ik=m11​Xwk​+m12​Ywk​+m13​Zwk​+m14​Zck​⋅jk=m21​Xwk​+m22​Ywk​+m23​Zwk​+m24​Zck​=m31​Xwk​+m32​Ywk​+m33​Zwk​+m34​​

所有kkk个点对构成的方程组一共有12+k12+k12+k个未知量和3k3k3k个方程,要求解这些未知量,就要3k≥12+k3k\ge12+k3k≥12+k,即k≥6k\ge6k≥6,也就是说,若要通过投影前后的点对来计算投影矩阵MMM,需要至少6个校准点。在实际应用中,通常使用了十几个或更多的特征点基于最小二乘法来减少可能的误差。

注意,投影矩阵和单应矩阵(Homography Matrix)是两个不同的概念。
投影矩阵用于表示三维空间点到二维图像点之间的变换关系,而单应矩阵则是指二维平面点之间的映射关系。
例如,单个相机从一角度拍摄空间某平面,该平面上的点X=(x,y,z)TX=(x,y,z)^{T}X=(x,y,z)T的像点的齐次坐标为P=(u,v,1)TP=(u,v,1)^{T}P=(u,v,1)T,若大小为3×33\times33×3的矩阵HHH能使P=H⋅XP=H\cdot XP=H⋅X成立,则称HHH为平面到成像平面的单应矩阵。再如,两个相机或相机从两个不同视角拍摄平面得到的图像分别为I1和I2I_{1}和I_{2}I1​和I2​空间平面上的点X=(x,y,z)TX=(x,y,z)^{T}X=(x,y,z)T在图像上对应的投影点分别为P1=(u1,v1,1)TP_{1}=(u_{1},v_{1},1)^{T}P1​=(u1​,v1​,1)T和P2=(u2,v2,1)TP_{2}=(u_{2},v_{2},1)^{T}P2​=(u2​,v2​,1)T,若矩阵HHH使得P2=H⋅P1P_{2}=H\cdot P_{1}P2​=H⋅P1​成立,则称HHH为图像I1I_{1}I1​和I2I_{2}I2​关于空间平面的单应矩阵。由于只关心空间平面坐标系(即x,y构成的平面)内点的坐标与另一平面坐标系内对应点之间的关系,因此可通过4个点对计算出单应矩阵(z可被消去)。这也是可以最少使用4个平面点阵进行畸变校准的原因。

如前面所述,表示三维空间点与图像点变换关系的投影矩阵MMM可以通过6个以上的校准点计算得到。而基于它和相机内外参数矩阵的关系,能计算得到相机的内外参数。此后,就可以继续对整个立体视觉系统进行校准,来确定系统中各个相机的坐标系与其他相机坐标系之间的旋转和平移关系,以及多幅图像中同源点所对应空间点的坐标等。

设双目立体视觉系统中左右相机坐标系相对世界坐标系的旋转和平移矩阵分为(RL、BL)(R_L、B_L)(RL​、BL​)和(RR,BR)(R_R,B_R)(RR​,BR​),则三维世界坐标系中的点P(Xw,Yw,Zw)P(X_w,Y_w,Z_w)P(Xw​,Yw​,Zw​)在两个相机坐标系中的坐标PL(XL,YL,ZL)P_L(X_L,Y_L,Z_L)PL​(XL​,YL​,ZL​)和PR(XR,YR,ZR)P_R(X_R,Y_R,Z_R)PR​(XR​,YR​,ZR​)可通过坐标旋转和平移得到。用矩阵表示为:

PL=RLP+BL,PR=RRP+BRP_L=R_LP+B_L, P_R=R_RP+B_RPL​=RL​P+BL​,PR​=RR​P+BR​.

消去PPP可得到以下PLP_LPL​和PRP_RPR​之间的关系式:
PL=RPR+BP_L=RP_R+BPL​=RPR​+B
R=RLRR−1R=R_LR_R^{-1}R=RL​RR−1​
B=BL−RLRR−1BRB=B_L-R_LR_R^{-1}B_RB=BL​−RL​RR−1​BR​

由上式可知,若对双目立体视觉系统中的左右相机分别完成标定得到(RL,BL)(R_L,B_L)(RL​,BL​)和(RR,BR)(R_R,B_R)(RR​,BR​),则左相机坐标系到右相机坐标系的转换关系就能通过R=(RLRR−1)R=(R_LR_R^{-1})R=(RL​RR−1​)和B=(BL−RLRR−1BR)B=(B_L-R_LR_R^{-1}B_R)B=(BL​−RL​RR−1​BR​)来确定。然而在实际中,通常并不会根据空间点和各成像点之间的关系来间接计算立体视觉系统中相机之间的相对位置,而是基于极线几何理论,设法直接得到两个相机图像中对应点的极线约束,然后才完成后续的立体视觉图像调整(Stereo Image Rectification)、图像对应点匹配(Stereo Image Correspondence)和目标的深度信息计算等过程。

对极几何

极线几何理论可用于研究立体视觉系统各个相机图像中,同源像点之间的关系,它不仅在双目立体视觉图像的对应点匹配有着重要通,而且在三维重建和运动分析中也具有广泛应用。立体视觉系统中的极线几何常涉及以下几个关键的定义
(1)基线(Baseline):指左右两摄像机光心的连线。
(2)极平面(Epipolar Plane):指三维空间点P(Xw,Yw,Zw)P(X_w,Y_w,Z_w)P(Xw​,Yw​,Zw​)与两摄像机光心OLO_LOL​和ORO_ROR​所确定的平面。
(3)极点(Epipolar Point):指基线与两摄像机图像平面的交点,如图 1中的ELE_LEL​和ERE_RER​。
(4)极线(Epipolar Line):指极平面与图像平面的交线,如图中p(uL,vL)p(u_L,v_L)p(uL​,vL​)和ELE_LEL​、p(uR,vR)p(u_R,v_R)p(uR​,vR​)和ERE_RER​之间的线段,称“线段p(uR,vR)——ERp(u_R,v_R)——E_Rp(uR​,vR​)——ER​”为点p(uR,vR)p(u_R,v_R)p(uR​,vR​)的极线。称“线段p(uL,vL)——ELp(u_L,v_L)——E_Lp(uL​,vL​)——EL​”为点p(uL,vL)p(u_L,v_L)p(uL​,vL​)的极线。同一图像平面内所有的极线交于极点。
(5)极平面簇(Epipolar Plane Cluster):由基线和空间任意一点确定的一簇平面,它们均相交于基线。如图 2所示,点PPP与P′P^{'}P′与基线所确定的平面相交于基线。


图 1 双目立体视觉系统中的对极几何


图 2 极平面簇

由以上定义可知,若已知点p(uL,vL)p(u_{L},v_{L})p(uL​,vL​)在左图像内的坐标,则右图像内与其同源的像点p(uR,vR)p(u_R,v_R)p(uR​,vR​)必定位于p(uL,vL)p(u_L,v_L)p(uL​,vL​)的极线“线段p(uL,vL)——ELp(u_L,v_L)——E_Lp(uL​,vL​)——EL​”上,反之亦然。双目立体视觉系统的这一个重要特点称为极线约束。为了寻找极线约束的数学关系式,根据上节讨论,不妨将左右相机模型用投影矩阵M表达为:

{ZcLpL=ML⋅Pw′ZcRpR=MR⋅Pw′\begin{cases}Z_{c}^{L}p_{L}=M_{L} \cdot P_{w}^{'} \\Z_{c}^{R}p_{R}=M_{R} \cdot P_{w}^{'} \end{cases}{ZcL​pL​=ML​⋅Pw′​ZcR​pR​=MR​⋅Pw′​​

其中pLp_LpL​和pRp_RpR​是空间点Pw(Xw,Yw,Zw)P_w(X_{w},Y_{w},Z_{w})Pw​(Xw​,Yw​,Zw​)在左右图像中像点pL(i,j)p_{L}(i,j)pL​(i,j)和pR(i,j)p_{R}(i,j)pR​(i,j)的齐次坐标,MLM_{L}ML​和MRM_{R}MR​为左右相机的投影矩阵,Pw′P_{w}^{'}Pw′​是空间点Pw(Xw,Yw,Zw)P_{w}(X_{w},Y_{w},Z_{w})Pw​(Xw​,Yw​,Zw​)的齐次坐标,ZcLZ_{c}^{L}ZcL​和ZcRZ_{c}^{R}ZcR​分别为左右相机系统的比例因子。若将大小为3×43 \times 43×4的两个矩阵MLM_{L}ML​和MRM_{R}MR​中左面的3×33 \times 33×3部分分别记作ML1M_{L1}ML1​和MR1M_{R1}MR1​,右边的3×13 \times 13×1部分分别记作mLm_{L}mL​和mRm_{R}mR​,并且将Pw′P_{w}^{'}Pw′​表示为Pw′=(PwT,1)TP_{w}^{'}=(P_{w}^{T} ,1)^{T}Pw′​=(PwT​,1)T,则有:

{ZcLpL=ML1⋅Pw+mLZcRpR=MR1⋅Pw+mR\begin{cases}Z_{c}^{L}p_{L}=M_{L1} \cdot P_{w}+m_L{} \\Z_{c}^{R}p_{R}=M_{R1} \cdot P_{w}+m_{R} \end{cases}{ZcL​pL​=ML1​⋅Pw​+mL​ZcR​pR​=MR1​⋅Pw​+mR​​

消去PwP_{w}Pw​后可得到:

ZcRpR−ZcLMR1ML1−1pL=mR−MR1ML1−1mLZ_{c}^{R}p_{R}-Z_{c}^{L}M_{R1}M_{L1}^{-1}p_{L}=m_{R}-M_{R1}M_{L1}^{-1}m_{L}ZcR​pR​−ZcL​MR1​ML1−1​pL​=mR​−MR1​ML1−1​mL​,

上式两边均为一个三维向量,则称下列矩阵为该三维向量TTT的反对称矩阵,记作[T]×[T]_{\times}[T]×​:

[T]×=[0−tztytz0−tx−tytx0][T]_{\times}=\begin{bmatrix}0 &-t_{z} &t_{y} \\t_{z} &0 &-t_{x} \\-t_{y} &t_{x} &0 \end{bmatrix}[T]×​=⎣⎡​0tz​−ty​​−tz​0tx​​ty​−tx​0​⎦⎤​

不难看出,反对称矩阵与其对应的三维向量的积[T]xT[T]_{x}T[T]x​T为0.由此令m=mR−MR1ML1−1mLm=m_{R}-M_{R1}M_{L1}^{-1}m_{L}m=mR​−MR1​ML1−1​mL​,则根据三维向量mmm的反对称矩阵与其乘积[m]x[m]_{x}[m]x​(m为0)有

[m]×(ZcRpR−ZcLMR1ML1−1pL)=0\mathbf{[m]_{\times}(Z_{c}^{R}p_{R}-Z_{c}^{L}M_{R1}M_{L1}^{-1}p_{L})=0}[m]×​(ZcR​pR​−ZcL​MR1​ML1−1​pL​)=0

两边除以ZcR\mathbf{Z_{c}^{R}}ZcR​并移项后有

[m]×⋅ZcLZcR⋅MR1⋅ML1−1⋅pL=[m]×⋅pR\mathbf{[m]_{\times} \cdot \frac{Z_{c^{L}}}{Z_{c}^{R}} \cdot M_{R1} \cdot M_{L1}^{-1} \cdot p_{L}=[m]_{\times} \cdot p_{R}}[m]×​⋅ZcR​ZcL​​⋅MR1​⋅ML1−1​⋅pL​=[m]×​⋅pR​

根据反对称矩阵性质,n维列向量XXX的转置与n阶反对称矩阵BBB以及向量XXX的积XTBXX^{T}BXXTBX等于0。若将pRp_{R}pR​看作三维向量,则有:3

pRT⋅[m]×⋅ZcLZcR⋅MR1⋅ML1−1⋅pL=pRT⋅m⋅pR=0\mathbf{p_{R}^{T} \cdot [m]_{\times} \cdot \frac{Z_{c^{L}}}{Z_{c}^{R}} \cdot M_{R1} \cdot M_{L1}^{-1} \cdot p_{L}=p_{R}^{T} \cdot m \cdot p_{R} = 0}pRT​⋅[m]×​⋅ZcR​ZcL​​⋅MR1​⋅ML1−1​⋅pL​=pRT​⋅m⋅pR​=0

消去比例因子ZcLZcR\frac {Z_{c}^{L}}{Z_{c}^{R}}ZcR​ZcL​​后有:

pRT⋅[m]×⋅MR1ML1−1pL=0p_{R}^{T} \cdot [m]_{\times} \cdot M_{R1}M_{L1}^{-1}p_{L}=0pRT​⋅[m]×​⋅MR1​ML1−1​pL​=0

若定义F=[m]×⋅MR1ML1−1F=[m]_{\times} \cdot M_{R1} M_{L1}^{-1}F=[m]×​⋅MR1​ML1−1​为基本矩阵(Fundamental Matrix,大小为3*3),则有:pRTFpL=0p_{R}^{T}Fp_{L}=0pRT​FpL​=0

若给定pLp_{L}pL​,则上式就成为一个关于pRp_{R}pR​的线性方程,反之亦然。换句话说,当左相机图像中的像点坐标确定后,在右相机图像中与其同源的像点将落在由基本矩阵所确定的直线上。这说明采用基本矩阵可以通过以下公式来表示极线约束:

对应左像点的右极线:lR=FpL\mathbf l_{R}=Fp_{L}lR​=FpL​
对应右像点的左极线:lL=FTpR\mathbf l_{L}=F^{T}p_{R}lL​=FTpR​

由于基本矩阵包含了左右图像中对应像素坐标之间的转换关系,因此它实际上是对立体视觉系统中相机的内外参数和相机的相对位置信息的综合。若已知立体视觉系统中相机的内部参数矩阵,还能在约束条件pRTFpL=0\mathbf{p_{R}^{T}Fp_{L}=0}pRT​FpL​=0的基础上,得到位于相机坐标系中的两个同源像点PL(XL,YL,ZL)P_{L}(X_{L},Y_{L},Z_{L})PL​(XL​,YL​,ZL​)和PR(XR,YR,ZR)P_{R}(X_{R},Y_{R},Z_{R})PR​(XR​,YR​,ZR​)之间的约束关系:pRT⋅E⋅PL=0\mathbf{p_{R}^{T} \cdot E \cdot P_{L}=0}pRT​⋅E⋅PL​=0

其中矩阵E\mathbf{E}E称为本质矩阵(Essential Matrix),大小为3*3.本质矩阵实际上描述左右相机坐标系之间的旋转和平移关系。它只与相机之间的相对位置有关,与各个相机自身的焦距、光心和传感器像素大小等内部参数无关。因此,它仅适用于两个相机坐标系中的同源像点的物理坐标系转换,而不能在它们的图像像素坐标系之间建立联系。

总结

由上述几何和数学分析可见,极线约束表示的是像点与其极线之间的约束关系,通过这种约束关系,可得到一个相机图像内某一像点在另一相机图像中位置所在的直线,而不能确切知道同源像点的在该直线上的具体位置。尽管如此,极限约束将两幅图像内对应点的匹配范围,从整幅图像限定在一条直线上。即使考虑噪声,将搜索范围扩大到该直线的邻域内,也能极大地减少图像对应点匹配过程中的计算量,因此对图像对应点匹配具有指导作用。

双目立体视觉笔记(二)相关推荐

  1. 双目立体视觉笔记(三)三角测量、极线校正

    三角测量和极线校正 ·三角测量 假设两个相机像平面精准位于同一平面上,且行对齐,两个光轴严格平行. 利用三角形关系,我们不难推出Z值: 如果主点cxlc_{x}^{l}cxl​,cxrc_{x}^{r ...

  2. 《计算机双目立体视觉》学习笔记:对极几何

    由双目立体视觉系统获得的来自同一场景的两幅图像之间存在着一定的约束关系,也就是说,当我们用两个相机在不同的位置拍摄同一个场景或者物体时,如果两张照片中的景物有重叠的部分,那么这两张照片之间就存在一定的 ...

  3. 双目立体视觉学习笔记(一)

    双目立体视觉 立体视觉(Stereo Vision)又称为三维视觉,它通过两个或多个相机采集被测目标的图像,并将这些图像调整至同一平面,然后基于其中同一被测特征点所对应像素间的差异来重建三维信息或实现 ...

  4. 双目立体视觉Bouguet矫正算法详解

    版权声明:本文为博主原创文章,欢迎转载,请注明出处 https://blog.csdn.net/u011574296/article/details/73826420 </div>< ...

  5. github 视觉测量_教你如何提高双目立体视觉系统的精度

    作者:李迎松 来源:公众号 @3D视觉工坊 链接:教你如何提高双目立体视觉系统的精度 开源代码免费获取,欢迎关注作者的GitHub:https://github.com/ethan-li-coding ...

  6. 关于双目立体视觉的三大基本算法及发展现状的总结

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 双目立体视觉一直是机器视觉研究领域的发展热点和难点,"热 ...

  7. 基于深度学习算法和传统立体匹配算法的双目立体视觉

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 01 立体视觉是什么? 在开始之前,我相信很多站友都会有这个疑问, ...

  8. 教你如何提高双目立体视觉系统的精度

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 来源:https://blog.csdn.net/rs_lys/article/details/107 ...

  9. 聊聊三维重建-双目立体视觉原理

    原文首发于微信公众号「3D视觉工坊」--聊聊三维重建-双目立体视觉原理 作首:Tengfei Jiang https://zhuanlan.zhihu.com/p/81016834 本文已由原作者授权 ...

最新文章

  1. 【机器学习】激活函数(Activation Function)
  2. Xshell配置ssh使用密钥公钥(publice key)登录
  3. java 自定义对话框_Java经典实例:用户自定义对话框
  4. HDOJ HDU 2080 夹角有多大II ACM 2080 IN HDU
  5. 加载XML 添加删除节点
  6. dubbo源码解析(三十五)集群——cluster
  7. 2018年春季个人阅读计划
  8. EntityFramework 并发处理
  9. VS2013提示错误应输入表达式
  10. 概率论(基本概念术语)的理解
  11. React-组件生命周期
  12. php 去掉 回车 换行,php去掉换行符的方法
  13. 使用主成分分析进行人脸识别
  14. git查看某次commit的修改
  15. Linux 内存管理:DAX(Direct Access)机制的作用及实现原理
  16. 【Java二十周年】十年,二十年
  17. python 实时打印控制台输出信息
  18. 2022虎年背景全新UI头像框制作微信小程序源码下载支持多种流量主
  19. linux iio 设备驱动,Linux设备驱动之IIO子系统——IIO框架数据读取
  20. 第04课:组件和商品详情

热门文章

  1. 太丢脸!应届毕业面试程序员,你被PASS的原因不可以是这4点!
  2. matlab rs232 fpga,RS232接口的FPGA程序设计(VHDL)
  3. unity3d导出html,白鹭开发者中心
  4. 数据采集的可靠性和准确性
  5. JPA 和休眠级联类型
  6. 视频监控系统技术选型
  7. ubuntu安装小米随身wifi驱动
  8. K线形态识别_高开出逃
  9. 基于SVM.NET的验证码识别算法实现
  10. P1164 小A点菜 洛谷