image-processing - 为什么基本矩阵有 7 个自由度?

标签 image-processing camera computer-vision

基本矩阵中有 9 个参数来关联左右图像的像素坐标,但只有 7 个自由度 (DOF)。

我搜索过的几页上的推理说:

  • 齐次方程意味着我们失去了一个自由度
  • F = 0 的行列式,因此我们失去了另一个自由度。

  • 我不明白为什么这两个原因意味着我们失去了 2 个自由度 - 有人可以解释一下吗?

    最佳答案

    我们最初有 9 个自由度,因为基本矩阵由 9 个参数组成,这意味着我们需要 9 个对应点来计算基本矩阵 (F)。但是由于以下两个原因,我们只需要7个对应点。

    原因一

    我们失去了 1 个自由度,因为我们使用了 齐次坐标 .这基本上是一种通过添加额外维度将 nD 点表示为向量形式的方法。即)2D 点 (0,2) 可以表示为 [0,2,1],通常为 [x,y,1]。将齐次坐标与 2D/3D 变换一起使用时有一些有用的属性,但我假设您知道这一点。

    现在给出表示像素坐标的表达式 p 和 p':

    p'=[u',v',1] and p=[u,v,1]
    

    基本矩阵:
    F = [f1,f2,f3]
        [f4,f5,f6]
        [f7,f8,f9]
    

    和基本矩阵方程:
    (transposed p')Fp = 0
    

    当我们以代数形式乘以这个表达式时,我们得到以下结果:
    uu'f1 + vu'f2 + u'f3 + uv'f4 + vv'f5 + v'f6 + uf7 + vf8 + f9 = 0. 
    

    在线性方程形式 Af=0 的齐次系统中(基本上是上述公式的因式分解),我们得到两个分量 A 和 f。

    A:
    [uu',vu',u', uv',vv',v',u,v,1] 
    

    f(f本质上是向量形式的基本矩阵):
    [f1,f2'f3,f4,f5,f6,f7,f8,f9]
    

    现在,如果我们查看向量 A 的分量,我们有 8 个未知数,但由于齐次坐标,我们有一个已知值 1,因此我们现在只需要 8 个方程。

    原因2
    det F = 0.
    

    行列式是可以从方阵获得的值。

    我不完全确定这个属性的数学细节,但我仍然可以推断出基本思想,希望你也可以。

    基本上给出了一些矩阵 A
    A = [a,b,c]
        [d,e,f]
        [g,h,i]
    

    可以使用以下公式计算行列式:
    det A = aei+bfg+cdh-ceg-bdi-afh
    

    如果我们使用基本矩阵查看行列式,代数将如下所示:
    F = [f1,f2,f3]
        [f4,f5,f6]
        [f7,f8,f9]
    
    det F = (f1*f5*f8)+(f2*f6*f7)+(f3*f4*f8)-(f3*f5*f7)-(f2*f4*f9)-(f1*f6*f8)
    

    现在我们知道基本矩阵的行列式为零:
    det F = (f1*f5*f8)+(f2*f6*f7)+(f3*f4*f8)-(f3*f5*f7)-(f2*f4*f9)-(f1*f6*f8) = 0
    

    因此,如果我们只计算出基本矩阵的 9 个参数中的 7 个,我们可以使用上述行列式方程计算出最后一个参数。

    因此基本矩阵有7DOF。

    关于image-processing - 为什么基本矩阵有 7 个自由度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49763903/

    相关文章:

    java - 将 python sklearn 模型导出到生产环境 (java/c++)

    image - 如何使用 react-native 制作模糊效果?

    python - 我试图找出背景是彩色的还是单色的

    opencv中的图像缩放/锐度

    OpenCV 校准参数和立体相机的 3d 点转换

    matlab - 基础矩阵的投影矩阵

    python - 物体检测 Action

    c# - 当轮廓可以撕裂时,如何检测简单形状(使用emgu cv)?

    android - 如何不将照片保存到本地?

    android - 相机在未经相机许可的情况下工作?