opencv - 使用内部和外部相机参数进行图像匹配

标签 opencv image-processing camera-calibration

目前,我有一个图像数据集(帧序列),并且我具有固有的相机校准矩阵。另外,对于每张图像,我都有外部参数(旋转和移动)。

我想知道是否有可能使用该参数在每对图像之间找到正确的像素对应。

我发现了两个不同透 View 之间每个对应点的关系traslation(t)和旋转(R)。

enter image description here

我猜想使用上面的图像,只需要固定一个“x”点(在齐次坐标中)并为“x'”求解方程组,但是我不知道正在使用什么运算(符号)。如果有人知道如何使用matlab做到这一点,希望对您有所帮助。

另外,如果还有使用相同信息发现匹配项的另一种方法,希望有人帮助。

谢谢

最佳答案

不,此信息不足以找到帧之间的点对应关系。我将首先说明我认为您可以使用给定的信息做什么,然后我们将了解为什么仅凭Essentials不可能获得像素与像素的匹配。

  • 您可以做什么。 对于点m,您可以使用基本矩阵在m'所在的另一张图像上找到该行。假设您在问题中给出的XX'(分别)被投影为mm',即
    //K denotes the intrinsics matrix
    m=KX
    m'=KX'
    

    从您的方程式开始,我们有:
     X^{T}EX'=0  ==>  m^T K^{-T} E K^{-1} m' 
    

    矩阵K^{-T} E K^{-1}(我们将注意F)被称为基本矩阵,现在您在图像平面的2d点之间具有约束:
     m^TFm'=0
    

    注意,mm'是用齐次坐标表示的3d vector 。在这里需要注意的有趣事情是Fm'm位于第一张图像上的行(因为上面给出的约束只不过是mFm'之间的点积)。类似地,m^TF是另一幅图像上预期m'所在的行。因此,您可以找到m的匹配项,是在Fm'附近进行搜索。
  • 为什么无法获得像素到像素的匹配。 让我们从直观的 Angular 来看约束xEx'=0的含义。基本上说的是,我们期望xx'和基线T共面。假设您修复了x,并且寻找满足xEx'=0的点。然后,尽管您图中的x'满足此约束,但如下图所示的每个点n(从y投影)也将是一个不错的选择:

    enter image description here

    这表明正确的匹配取决于您对x的深度的估计,而您没有。
  • 关于opencv - 使用内部和外部相机参数进行图像匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52536520/

    相关文章:

    c++ - 将 Rob Hess 的 SIFT 库(使用 C 语言,使用 OpenCV)与 C++ 链接

    c++ - 合并两个显示亮度的图像

    image - 如何使用 Octave 音阶和矩阵处理来平均多个图像以减少噪声?

    visual-studio-2010 - 使用opencv相机校准的畸变系数

    c++ - 视差图颜色反转

    python - 比较两个图像与 python 排除阴影

    python - 使用python从矩形图像创建非矩形图像

    python - 如何从屏幕中提取选定的矩形作为顶 View 图像?

    matlab - 从深度提取轮廓

    c++ - OpenCV立体声校准产生微小/零尺寸的投资返回率