OpenCV / Python Bundle调整

Sea*_*ker 2 python opencv computer-vision

我有一个应用程序,我正在尝试使用 Python 中的 OpenCV 从同一相机的多个视图中进行运动结构。(OpenCV 不是硬性要求,但 Python 目前是硬性要求)。示例:我有 16 张相机图像需要处理,每帧之间都有微小的运动。在帧 (200x200) 中,我可以跟踪约 50 个特征,并且我想尽可能准确地估计特征的相机姿势和 3D 点位置。

我现在想使用帧流(来自视频)来细化相机姿势和 3D 点位置的估计,因为从两帧估计姿势和对 3D 点进行三角测量会产生大量噪声。我相信捆绑调整是下一个明显的方向,但我没有找到任何明显的捆绑调整的 Python 实现可供使用。许多选项(例如 LevMarqSparse::bundleAdjust())似乎仅部分完成或未完全采用。

什么是一个好的起点?我想我正在寻找一个相对简单的 Python 捆绑包调整原型,看看这是否是我想投入更多时间的方向。

Mia*_*iau 5

假设您有一个校准过的相机以及内部和外部参数的初始估计,您可以首先直接在 Python 中执行简单的捆绑调整。例如,您可以使用三张图像的堆栈,通过齐次三角测量方法从特征点计算 3D 点。例如,可以通过 scipy.least_squares 和可信区域反射非线性优化技术构建简单的捆绑调整作为第一个原型。看看这个教程

之后,您可以决定是否要实现或使用 Levenberg-Marquardt 优化技术,该技术能够处理稀疏雅可比行列式,甚至可以通过分析确定雅可比行列式,以假设在需要时提高收敛性。

到目前为止,我认为 Python 中还没有足够的库来提供有效且高性能的捆绑调整实现。