对极几何——本质矩阵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 );
        }
    }


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

基本矩阵、本质矩阵和单应矩阵
  • kokerf
  • kokerf
  • 2017年05月15日 20:18
  • 1555

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

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

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

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

对极几何原理

http://blog.csdn.net/ssw_1990/article/details/53355572  先思考一个问题:用两个相机在不同的位置拍摄同一物体,如果两张照片中的景...

对极几何约束、基本矩阵求解、求极线

对极几何约束、基本矩阵求解、求极线 Email:chentravelling@163.com 在看一篇论文里,提到使用对极几何约束来寻找运动区域,于是来回看了几遍对极几何约束的知识,具体的步骤没有详细...

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

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

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

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

单应性矩阵、本质矩阵

转载:http://blog.csdn.net/yvonnezju/article/details/40982197 这一篇,要搞清楚两个概念,Planar Homography (共面点成像)...

三维重建(一)外极几何,基础矩阵及求解

最近在看三维重建的东西,把看到的东西总结一下。一、外极几何已知两个摄像头的光心OO和O′O',PP为空间中的一点,pp和p′p'是点PP在两个摄像头成的像中的投影。 平面OO′POO'P称为外极平面...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:对极几何——本质矩阵E和基础矩阵F
举报原因:
原因补充:

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