【问题标题】:Calculating the essential matrix from two sets of corresponding points从两组对应点计算本质矩阵
【发布时间】:2014-11-23 01:33:55
【问题描述】:

我正在尝试从两个校准的相机重建 3d 图像。涉及的步骤之一是计算 3x3 基本矩阵 E,从两组对应(齐次)点(超过所需的 8 个)P_a_origP_b_orig 以及两个相机的 3x3 内部校准矩阵K_aK_b

我们首先用

标准化我们的点
P_a = inv(K_a) * p_a_orig

P_b = inv(K_b) * p_b_orig

我们也知道约束

P_b' * E * P_a = 0

到目前为止,我一直在关注它,但是您如何实际解决最后一个问题,例如找到E 矩阵的九个值?我已经阅读了关于这个主题的几个不同的讲义,但它们都忽略了关键的最后一步。可能是因为它被认为是微不足道的数学,但我不记得我上次这样做是什么时候,而且我还没有找到解决方案。

【问题讨论】:

    标签: matlab image-processing computer-vision matlab-cvst 3d-reconstruction


    【解决方案1】:

    这个方程实际上在几何算法中很常见,本质上,你试图从方程 AXB=0X /em>。为了解决这个问题,你对方程进行矢量化,这意味着,

    vec() 表示矩阵的向量化形式,即简单地将矩阵的列一个一个地堆叠起来以产生一个列向量。如果你不知道这个可怕的符号的含义,它被称为 Kronecker 产品,你可以从here 阅读它,它很简单,相信我:-)

    现在,假设我将 B^TA 的克罗内克积得到的矩阵称为 C。 那么,vec(X)是矩阵C的空向量,获取方法是执行 C^TCSVD decomposition(C 转置乘以 C)并取矩阵的最后一列 V 。最后一列只不过是您的 vec(X)。将 X 重塑为 3 x 3 矩阵。这是你的基本矩阵。

    如果你觉得这个数学太难编码,只需使用 Y.Ma et.al 的以下代码:

    %  p are homogenius coordinates of the first image of size 3 by n
    %  q are homogenius coordinates of the second image of size 3 by n
    
    function [E]  = essentialDiscrete(p,q)
    
    n = size(p);
    NPOINTS = n(2);
    
    % set up matrix A such that A*[v1,v2,v3,s1,s2,s3,s4,s5,s6]' = 0
    A = zeros(NPOINTS, 9);
    
    if NPOINTS < 9
         error('Too few mesurements')
         return;
    end
    
    for i = 1:NPOINTS
      A(i,:) = kron(p(:,i),q(:,i))';
    end
    r = rank(A);
    
    if r < 8 
      warning('Measurement matrix rank defficient')
      T0 = 0; R = [];
    end;
    
    [U,S,V] = svd(A);
    
    % pick the eigenvector corresponding to the smallest eigenvalue
    e = V(:,9);
    e = (round(1.0e+10*e))*(1.0e-10);
    % essential matrix 
    E = reshape(e, 3, 3);
    

    【讨论】:

      【解决方案2】:

      你可以做几件事:

      • 可以使用8-point algorithm 估算基本矩阵,您可以自己实现。
      • 您可以使用计算机视觉系统工具箱中的estimateFundamentalMatrix 函数,然后从基本矩阵中获取基本矩阵。
      • 或者,您可以使用计算机视觉系统工具箱中的 estimateCameraParameters 函数校准立体摄像头系统,该函数将为您计算基本矩阵。

      【讨论】:

      • 你确定可以简单地从基本矩阵中得到基本矩阵吗?我相信,如果不了解相机的内在参数,这是不可能直接实现的......
      猜你喜欢
      • 2019-11-06
      • 2014-09-07
      • 1970-01-01
      • 2016-04-16
      • 2019-11-19
      • 1970-01-01
      • 1970-01-01
      • 2012-03-21
      • 2022-01-13
      相关资源
      最近更新 更多