3

我有以下图像 I1。我没有捕捉到它。我从谷歌下载的

在此处输入图像描述

我将已知的单应性 H 应用于 I1 以获得以下图像 I2。

在此处输入图像描述

我想假设相机已经拍摄了 I2 的上面这张照片。我不知道这台相机的相机矩阵,我想找到它。为了找到这个相机矩阵mtx,我使用了OpenCV相机校准方法:ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, gray.shape[::-1], None, None,flags=cv2.CALIB_FIX_ASPECT_RATIO|cv2.CALIB_FIX_K1|cv2.CALIB_FIX_K2|cv2.CALIB_FIX_K3|cv2.CALIB_FIX_K4|cv2.CALIB_FIX_K5)

这是使用正方形完成的,它是真实世界和图像坐标。我在图像 I1 中选择一个正方形,并使用单应性 H 得到 I2 中正方形的对应角点。由于我知道 I2 中的这些对应点形成一个正方形,所以我应该能够从这些点得到相机矩阵。但是,当我在图像的不同位置拍摄同一个正方形时,我会得到不同的相机矩阵。为什么是这样?我做错了什么,我该如何解决?如何计算正确的相机矩阵?

一个例子如下所示。对于这两个选择的方块,我mtxcalibrateCamera函数中得到不同的值。

在此处输入图像描述 在此处输入图像描述

注意:上图中的红点不是 I1 中完美正方形的角点。我只是粗略地标记了它们以传达我的观点,即当我取两个相同大小但在不同位置的正方形时,我会得到相机矩阵的不同值。

4

1 回答 1

4

这是一个很好的问题,它涉及校准和计算几何的几个重要问题。我将提供一个深入的答案,希望能让这些事情变得清晰。

在执行相机校准时,如果您使用不同的对应集重复校准,那么您可以拥有不同的内在矩阵的三个原因。

  1. 通信是嘈杂的。
  2. 相机校准问题尚未确定。这意味着没有足够的对应信息来唯一地解析所有相机参数。
  3. 相机校准使用不精确或过度限制的相机模型。

原因1应该是相当明显的。如果对应被测量噪声破坏,那么如果您使用不同的对应集,通常会获得不同的校准。这是因为在校准期间,您是一个优化过程,其中相机参数被优化以最适合对应。当有噪声时,最佳拟合可能会因测量的噪声而异。

原因 2如果您尝试使用不充分的信息进行校准,则会发生这种情况。例如,如果每个图像只有三个对应关系,则校准问题未确定。您可以通过计算参数来考虑这一点。三个对应关系为校准方程提供了 6 个约束(每个对应关系通过其 x 和 y 位置两个)。现在,当我们校准时,我们必须联合估计校准对象的姿态(每张图像有 6 个自由度),加上内在函数的未知数(焦距、主点、失真等)。因此,未知数多于约束,因此可以有无穷多个校准!因此,如果您选择了不同的三个对应集,则返回校准(如果完全返回)将永远不会正确并且通常不会相同。

原因3更微妙。为了解释这一点,请记住,可以通过指定具有不同数量的未知内在参数的相机来完成校准。在校准信息非常有限的情况下,减少未知数的数量通常是件好事。例如,如果使用单个图像进行校准,平面校准对象将在校准时为每个图像提供最多 8 个约束(因为单应性有 8 个自由度)。获得平面的位姿需要 6 个约束,因此每个图像剩下 2 个约束。如果您只有一个图像,当有超过 2 个未知数(例如焦距和镜头畸变)时,您将无法进行校准。因此,如果我们想使用单个图像进行校准,我们必须减少未知数。

您的情况发生了什么在您的情况 下,您已将未知数减少到单个焦距(f = fx = fy)和相机的主要点。那是 3 个未知数,但回想一下,使用单个图像进行校准意味着您最多只能有 2 个内在未知数。因此,您遇到了一个约束不足的问题(参见上面的原因 2)。

现在,您可能决定通过将主点固定到图像中心来克服这个问题,这是一种常见的做法,因为它通常是真实主点的一个很好的近似值。现在你有一个带有 1 个未知内在函数 (f) 的校准问题。重要的问题是,如果我们尝试使用单个图像和 4 个无噪声对应来校准 f,我们能否期望使用不同的对应集得到相同的值?你可能认为是,但答案是否定的。

原因是校准过程将解决一个过度约束的问题(8 个约束和 7 个未知数)。它通常会calibrateCamera使用函数最小化过程来解决这个问题(就像 OpenCV 的方法一样)。在 OpenCV 中,它是通过最小化重投影误差来完成的。对此的解决方案将根据您提供的信件而有所不同。这很难想象,所以考虑一个不同的问题,你试图将一条直线拟合到一条稍微弯曲的线上的点。直线是数据的过度简化模型。如果我们尝试将线拟合到曲线数据,通过从中采样两个点,最佳拟合解决方案将根据采样的点而改变。

在您的特定情况下,您可以通过使用具有恰好 2 个未知数的内在矩阵、删除标志以固定纵横比以及将主点固定到图像中心来消除问题 2 和 3。

于 2018-01-13T15:16:32.667 回答