对极几何——本质矩阵E和基础矩阵F

原创 2012年03月30日 09:26:14

(1)Essential Matrix

如上图所示,给定一个目标点P,以左摄像头光心Ol为原点。点P相对于光心Ol的观察位置为Pl,相对于光心Or的观察位置为Pr。点P在左摄像头成像平面上的位置为pl,在右摄像头成像平面上的位置为pr注意Pl、Pr、pl、pr 都处于摄像机坐标系,其量纲是与平移向量T相同的(pl、pr 在图像坐标系中对应的像素坐标为 ql、qr )。

假设右摄像头相对于左摄像头的相对位置关系由旋转矩阵R和平移向量T表示,则可得:Pr = R(Pl-T)。

现在我们要寻找由点P、Ol和Or确定的对极平面的表达式。注意到平面上任意一点x与点a的连线垂直于平面法向量n,即向量 (x-a) 与向量 n 的点积为0:(x-a)·n = 0。在Ol坐标系中,光心Or的位置为T,则P、Ol和Or确定的对极平面可由下式表示:(Pl-T)T·(Pl×T) = 0。

Pr = R(Pl-T) 和 RT=R-1 可得:(RTPr)T·(Pl×T) = 0。

另一方面,向量的叉积又可表示为矩阵与向量的乘积,记向量T的矩阵表示为S,得:Pl×T = SPl

clip_image014

图11

那么就得到:(Pr)TRSPl = 0。这样,我们就得到Essential Matrix:E = RS。

通过矩阵E我们知道Pl和Pr的关系满足:(Pr)TEPl = 0。进一步地,由 pl = fl*Pl/Zl 和 pr = fr*Pr/Zr 我们可以得到点P在左右两个摄像机坐标系中的观察点 pl 和 pr 应满足的极线约束关系为:(pr)TEpl = 0。

注意到 E 是不满秩的,它的秩为2,那么 (pr)TEpl = 0 表示的实际上是一条直线,也就是对极线。

(2)Fundamental Matrix

由于矩阵E并不包含摄像头内参信息,且E是面向摄像头坐标系的。实际上我们更感兴趣的是在图像像素坐标系上去研究一个像素点在另一视图上的对极线,这就需要用到摄像机的内参信息将摄像头坐标系和图像像素坐标系联系起来。在(1)中,pl和pr是物理坐标值,对应的像素坐标值为ql和qr,摄像头内参矩阵为M,则有:p=M-1q。从而:(pr)TEpl = 0 à qrT(Mr-1)TE Ml-1ql = 0。这里,我们就得到Fundamental Matrix:F = (Mr-1)TE Ml-1。并有 qrTFql = 0。

(3)OpenCV的相关计算

由上面的分析可见,求取矩阵E和F关键在于旋转矩阵R和平移向量T的计算,而cvStereoCalibrate的代码中大部分(cvcalibration.cpp的第1886-2180行)也是计算和优化R和T的。在cvcalibration.cpp的第1913-1925行给出了计算R和T初始估计值的基本方法:

    /*
       Compute initial estimate of pose

       For each image, compute:
          R(om) is the rotation matrix of om
          om(R) is the rotation vector of R
          R_ref = R(om_right) * R(om_left)'
          T_ref_list = [T_ref_list; T_right - R_ref * T_left]
          om_ref_list = {om_ref_list; om(R_ref)]

       om = median(om_ref_list)
       T = median(T_ref_list)
    */

具体的计算过程比较繁杂,不好理解,这里就不讨论了,下面是计算矩阵E和F的代码:

 

    if( matE || matF )
    {
        double* t = T_LR.data.db;
        double tx[] =
        {
            0, -t[2], t[1],
            t[2], 0, -t[0],
            -t[1], t[0], 0
        };
        CvMat Tx = cvMat(3, 3, CV_64F, tx);
        double e[9], f[9];
        CvMat E = cvMat(3, 3, CV_64F, e);
        CvMat F = cvMat(3, 3, CV_64F, f);
        cvMatMul( &Tx, &R_LR, &E );
        if( matE )
            cvConvert( &E, matE );
        if( matF )
        {
            double ik[9];
            CvMat iK = cvMat(3, 3, CV_64F, ik);
            cvInvert(&K[1], &iK);
            cvGEMM( &iK, &E, 1, 0, 0, &E, CV_GEMM_A_T );
            cvInvert(&K[0], &iK);
            cvMatMul(&E, &iK, &F);
            cvConvertScale( &F, matF, fabs(f[8]) > 0 ? 1./f[8] : 1 );
        }
    }


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

两视图基础矩阵和本质矩阵的最简单推导

由于所写公式为word中编辑中,上传图片形式。 对于向量的说明: 如果对两个向量做点乘以及叉乘操作时,如果需要将向量表示为坐标形式,应将两个向量放到同一个坐标系。

Optimal Step Nonrigid ICP Algorithms for surface registration

这篇paper的约束有三个: 距离, stiffness, landmark

基本矩阵、本质矩阵和单应矩阵

基本矩阵、本质矩阵和单应矩阵

单应矩阵 基本矩阵 本质矩阵的区别与联系

1. 对极几何 两个相机在不同位置(实际要求光心位置不同即可)拍摄两张图,这个模型就是对极几何,如下图(摘自《计算机视觉中的多视图几何》): 两摄像机光心分别是C和C',图像平面是两白色的平面,...

OpenCV学习笔记(17)双目测距与三维重建的OpenCV实现问题集锦(二)双目定标与双目校正

三、双目定标和双目校正 双目摄像头定标不仅要得出每个摄像头的内部参数,还需要通过标定来测量两个摄像头之间的相对位置(即右摄像头相对于左摄像头的三维平移 t 和旋转 R 参数)。 图6 要计算...

旋转向量-旋转矩阵

今天接触到摄像机标定,其中用到旋转矩阵的知识,就具体恶补学习了一下,顺便做个笔记。物体在空间中的旋转物体在三维空间中的旋转,可以被分为解为在直接坐标系下,分别先后围绕x,y,z坐标轴旋转得到。旋转的角...
  • TL_TJ
  • TL_TJ
  • 2015-07-22 17:32
  • 3808

对极几何——本质矩阵E和基础矩阵F

(1)Essential Matrix 如上图所示,给定一个目标点P,以左摄像头光心Ol为原点。点P相对于光心Ol的观察位置为Pl,相对于光心Or的观察位置为Pr。点P在左摄像头成像平面上的位置...

基础矩阵、本质矩阵、单应性矩阵、透射变换、仿射变换

再讲下基本矩阵,存在这么一个矩阵F,使得空间中不在两图像平面上的任意点X分别在两图像的投影坐标x,x'满足等式(x')T*F*x=0,即x'的转置乘以F,再乘以x的结果为0,那么F就是左边图像到右边图...

计算机视觉基础(三)——对极几何中的基本矩阵F和本质矩阵E

计算机视觉中,尤其是双视图几何中,基本矩阵F和本质矩阵E扮演着重要角色,今天我们就来简单了解一下它们吧。由于公式比较多,所以直接在word中编辑好后整个截图过来了。(参考书目——《计算机视觉中的多视图...
  • zzlyw
  • zzlyw
  • 2017-01-05 13:26
  • 1468

多视几何:对极几何的代数表示--基本矩阵F

对极几何的基本概念中是对对极几何的基本形式进行了描述,但并没有从数学角度对其进行描述,而基本矩阵正是对对极几何的代数描述 1.总述 对极几何描述的就是点x和它的对极线l’之间的关系:l′=Fxl'...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)