Python 视觉里程测量后,哪些点需要三角测量以进行束调整

Python 视觉里程测量后,哪些点需要三角测量以进行束调整,python,opencv,computer-vision,pose-estimation,Python,Opencv,Computer Vision,Pose Estimation,我正在逐步建立从单目视觉里程计管道到束调整。使用2D-2D特征对应(例如ORB特征),编写了一个简单的VO管道。最重要的是,在通常为10帧的窗口中,每个帧中的公共点存储在一个数组中。因此,如果总共有10帧,则这些是在10帧结束时可用的不同输出 9个相似性转换(4x4),即i=0:9的帧i和i+1之间的一个转换 10xNkeypoints值,其中在所有10帧中跟踪有N公共关键点N通常为25。每个关键点的形式为(x,y) 现在,要在此窗口中执行任何类型的线束调整,必须找到公共点的3D位置。我的问题是

我正在逐步建立从单目视觉里程计管道到束调整。使用2D-2D特征对应(例如ORB特征),编写了一个简单的VO管道。最重要的是,在通常为10帧的窗口中,每个帧中的公共点存储在一个数组中。因此,如果总共有10帧,则这些是在10帧结束时可用的不同输出

  • 9个相似性转换(4x4),即
    i=0:9的帧
    i
    i+1
    之间的一个转换
  • 10xN
    keypoints值,其中在所有10帧中跟踪有
    N
    公共关键点
    N
    通常为
    25
    。每个关键点的形式为
    (x,y)
  • 现在,要在此窗口中执行任何类型的线束调整,必须找到公共点的3D位置。我的问题是,如何获得3D点。据我所知,3D点是通过使用它们之间的帧变换对相应2D点进行三角剖分获得的。(使用
    cv2.triangulatePoints
    )但是,必须选择哪些帧进行三角化?假设3D点相对于帧
    0
    的参考,有许多选项可供选择以进行三角剖分。也就是说,可以选择帧
    1
    并进行三角测量以获得3D点,或者甚至可以选择帧
    9
    并通过应用帧
    0
    9
    之间的转换(仅通过连接帧间转换)或类似地选择帧
    9
    并进行调整

    理论上,如果所有帧间姿势估计都正确(具有正确的比例),则使用帧
    0
    和任何其他帧进行三角化的3D点应相同。然而,束调整的全部目的是改进稍微不正确的姿势估计。我的理解是,所有姿势的精度在很大程度上取决于初始三角化3D点的精度。因此,要获得最佳性能,最佳的机架选择是什么。这件事怎么办

    或者有没有一种方法可以在不进行显式三角剖分的情况下进行光束平差

    注意:请不要建议将视觉里程计管道(使用2D-2D对应)更改为PNP算法,因为我想知道如何在纯2D-2D情况下(使用基本矩阵)执行此操作