python - Easy单目相机自标定算法

标签 python opencv camera-calibration kalman-filter

我有一段道路/建筑物的视频,我想用它创建一个 3D 模型。我正在看的场景是僵硬的,无人机在移动。我假设没有任何额外信息,如相机姿势、加速度或 GPS 位置。我很想找到一个我可以根据自己的喜好进行调整的 python 实现。

到目前为止,我已决定将 OpenCV calcOpticalFlowFarneback() 用于光流,这看起来相当快速和准确。有了它,我可以用 findFundamentalMat() 得到基本矩阵 F。到目前为止一切顺利。

现在,根据我正在关注的教程 here ,我应该神奇地拥有相机的校准矩阵,我显然没有也不打算在我正在开发的 future 应用程序中使用它。

经过长时间的研究,我找到了一篇论文(Self-calibration of a moving camera from point correspondences and 基本矩阵)从 1997 年定义了我正在寻找的东西(有一个很好的总结 here )。我正在寻找最简单/最容易的实现方式,但我遇到了这些问题:

  • 如果我要使用的相机会自动更改曝光和对焦(无变焦),相机的内在参数是否会发生变化?
  • 我不熟悉用于数值求解方程的同伦延拓法,而且它们似乎很慢。
  • 我打算使用扩展卡尔曼滤波器,但不知道从哪里开始,因为我知道错误的初始化会导致不收敛。

深入挖掘后,我发现了一个多相机自校准工具箱,它是为 Octave 使用 Python 包装器编写的开源工具。我最后的办法是分解代码并直接用 Python 编写。还有其他选择吗?

注意:我不想使用棋盘和平面度约束。

有没有其他方法可以非常准确地自校准我的相机?自 1997 年以来经过 20 年的研究,有没有人想出更直接的方法??

最佳答案

这是一次性的事情,还是您正在开发一款应用来自动处理大量此类视频?

如果是前者,我宁愿使用像 Blender 这样的集成工具。在 youtube 上查找运动跟踪(或“matchmoving”)教程之一以了解它,例如 this one .

关于python - Easy单目相机自标定算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45247683/

相关文章:

python - 在 Django ModelForm 中传递相关对象的字段

python - 如何填充 kinect v1 深度图像中的黑色补丁

opencv - 使用opencv进行3D相机标定

python - 有没有办法使我的相机的视平面与场景中的物体表面平行?

python - PyInstaller 的问题

python - FIFO 管道仅在写入端关闭后读取

c++ - 创建在linux中使用opencv的C++动态库

opencv - 使用 opencv 教程代码的相机校准结果不佳

python - 如何使用 Python 3 和 Beautiful Soup 获取 Wikipedia 文章的文本?

opencv - 如何互动并从相机获取直播