python - OpenCV/Python Bundle调整

标签 python opencv computer-vision

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

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

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

最佳答案

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

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

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

关于python - OpenCV/Python Bundle调整,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68072056/

相关文章:

c++ - 从背景中提取前景

python - 从周围的边界框提取车牌平行四边形?

python - 如何在 Envoy 中使用通配符

python - 模块递归导入其子模块是一种好习惯吗?

c++ - 将 YCrCb 图像拆分为其强度 channel

c++ - OpenCV 3.2 包括与 protobuf 3.1 冲突的 libmir* 和 protobuf 2.6

python - 如何将绘图线颜色从蓝色更改为黑色?

python - 尝试使用执行 ID 检索对象时 AWS Athena python 连接 S3 错误

python - 如何使用 Django Streaming HTTPS Response 正确渲染图像?

python - tensorflow slim : 'module' object has no attribute 'sum_of_squares'