在没有棋盘的情况下找到相机的内在参数

问题描述

我需要使用一组历史镜头图像找到闭路电视摄像机的内在参数(这就是我所得到的,无法控制环境,因此没有棋盘校准)。

好消息是我可以访问一些真实世界坐标,在大多数图像中都可见。

只是想知道是否有任何可靠的方法来提出相机内在参数。

附言我已经在 Python 中使用 cv2.findHomography 找到了单应矩阵。

附言我已经在两台机器上测试了 QTcalib,但它首先无法可视化图像。不知道有什么问题。

提前致谢。

解决方法

内在参数包含 fx fy cx cy 和 skew 以及附加失真参数 k1-k5 r1-r2。

假设您没有失真并且 cx 和 cy 完全位于中心。左上角的图像原点作为对图像的正常理解。正如您所说,您知道一些真实级别的 3D 点。3D 测量是关于相机光轴的。然后这个 3D 点 P 可以投影到称为 p 的相机图像平面。 P p O(相机光学中心)与中心线形成等腰三角形。

fx / (p_x-cx) = P_z / P_x

fx = (p_x-cx) * P_z / P_x

enter image description here

fy 也是如此。并且通常 fx 和 fy 是相同的。

这是在您在相机上没有失真的完美假设下。如果你开始有畸变,那么你需要在整个图像中找到足够多的样本点来形成畸变理解,如下图所示。一两点不会让你全面了解。

enter image description here

一些论文中存在一些使用海消失线(见参考,这是一系列作品)或完美的3D建筑消失点来检测失真的作弊。我们从外在到内在开始,经过一些试验最终可以得到一些很好的猜测。但它在研究中非常多,不能适用于一般情况。

参考文献:Han Wang、Wei Mou、Xiaozheng Mou、Shenghai Yuan、Soner Ulun、Shuai Yang 和 Bok-Suk Shin,一种使用海面图像的宽基线立体相机自动自校准方法,无人系统

,

如果您只有一个视频和一些 3d 点,最好的办法可能是匹配移动它,即使用 3D 计算机图形环境进行手动辅助束调整,例如搅拌机。网上有很多关于如何做的教程(example)。要将 3d 点添加为约束,您需要在虚拟世界中构建一些表示它们的形状(例如一些小球体)并放置它们,使它们的相对位置与您拥有的地面实况相匹配,然后将它们添加到跟踪器解决方案中。