OpenCV / Python 束调整
OpenCV / Python Bundle adjustment
我有一个应用程序,我尝试在 Python 中使用 OpenCV 从同一相机的多个视图中构建运动结构。 (OpenCV 不是硬性要求,但 Python 现在是)。示例:我有 16 个相机图像,每帧之间都有小动作。在帧 (200x200) 中,我可以跟踪约 50 个特征,我想尽可能准确地估计特征的相机姿势和 3D 点位置。
我现在想使用帧流(来自视频)来改进相机姿势和 3D 点位置的估计,因为从两帧估计姿势和三角测量 3D 点会产生很多噪音。我相信 Bundle Adjustment 是下一个明显的方向,但我没有找到任何明显的 Python 实施来使用 bundle adjustment。许多选项(例如 LevMarqSparse::bundleAdjust())似乎仅部分完成或未完全采用。
从哪里开始比较好?我想我正在寻找一个相对简单的 Python 原型捆绑调整,看看这是否是我想投入更多时间的方向。
假设您有一个已校准的相机和一个内在参数和外在参数的初始估计,您首先可以直接在 Python 中执行简单的束平差。
例如,您可以使用三个图像的堆栈,通过齐次三角测量方法从特征点计算 3D 点。例如,可以通过 scipy.least_squares 和可信区域反射非线性优化技术构建一个简单的束调整作为第一个原型。看看这个 tutorial.
之后您可以决定是否要实施或使用 Levenberg-Marquardt 优化技术,该技术能够处理稀疏雅可比行列式,甚至可以通过分析确定雅可比行列式以假设增加收敛性(如果需要)。
到目前为止,我认为 Python 中没有足够的库来提供有效且高性能的捆绑调整实施。
我有一个应用程序,我尝试在 Python 中使用 OpenCV 从同一相机的多个视图中构建运动结构。 (OpenCV 不是硬性要求,但 Python 现在是)。示例:我有 16 个相机图像,每帧之间都有小动作。在帧 (200x200) 中,我可以跟踪约 50 个特征,我想尽可能准确地估计特征的相机姿势和 3D 点位置。
我现在想使用帧流(来自视频)来改进相机姿势和 3D 点位置的估计,因为从两帧估计姿势和三角测量 3D 点会产生很多噪音。我相信 Bundle Adjustment 是下一个明显的方向,但我没有找到任何明显的 Python 实施来使用 bundle adjustment。许多选项(例如 LevMarqSparse::bundleAdjust())似乎仅部分完成或未完全采用。
从哪里开始比较好?我想我正在寻找一个相对简单的 Python 原型捆绑调整,看看这是否是我想投入更多时间的方向。
假设您有一个已校准的相机和一个内在参数和外在参数的初始估计,您首先可以直接在 Python 中执行简单的束平差。 例如,您可以使用三个图像的堆栈,通过齐次三角测量方法从特征点计算 3D 点。例如,可以通过 scipy.least_squares 和可信区域反射非线性优化技术构建一个简单的束调整作为第一个原型。看看这个 tutorial.
之后您可以决定是否要实施或使用 Levenberg-Marquardt 优化技术,该技术能够处理稀疏雅可比行列式,甚至可以通过分析确定雅可比行列式以假设增加收敛性(如果需要)。
到目前为止,我认为 Python 中没有足够的库来提供有效且高性能的捆绑调整实施。