【问题标题】:Verify that camera calibration is still valid验证相机校准是否仍然有效
【发布时间】:2015-10-12 01:24:39
【问题描述】:

您如何确定您在 X 时间为相机计算的内在和外在参数在 Y 时间仍然有效?

我的想法是

  1. 使用已知的校准对象(棋盘)并在时间 Y 将其放置在相机的视野中。
  2. 计算相机图像中的棋盘角点(时间 Y)。
  3. 将其中一个棋盘角点定义为世界原点,并根据该原点计算所有剩余棋盘角的世界坐标。
  4. 将 3. 的坐标与相机坐标系关联起来。
  5. 使用X时刻计算的参数,计算4点的图像点数。
  6. 从 2. 开始计算点与从 5 开始的点之间的距离。

这是一个聪明的方法吗?我最终想在 MATLAB 中实现它,然后可能在 openCV 中实现它。我想我知道如何执行步骤 1)-2) 和步骤 6)。也许有人可以为步骤2)-5)提供一个粗略的实现。特别是我不确定如何将“棋盘世界坐标系”与“相机世界坐标系”联系起来,我相信我必须这样做。

谢谢!

【问题讨论】:

  • 整件事听起来很对。基本上你所说的是你将重新校准相机并检查新校准是否与旧校准大致相同。然而,我是一个单一的相机系统,“唯一会改变校准的东西”是 a) 改变相机的焦点 b) 改变相机的位置。如果相机“未触及”,则无需重新校准。
  • 嗯,我希望可以避免整个“重新校准”,并且可以更轻松地完成验证步骤(例如,使用更少的图像)。是的,验证步骤的原因是,相机可能会轻微移动,我想知道在移动之后校准是否仍然有效。
  • 取决于您想要的精度,但一般情况下,您需要在移动时重新校准。我想一个好方法是先检测棋盘的所有角落。然后选择 4 个相邻的点(在一个角落更好,因此误差传播得更多),然后用您的参数估计其余点。您可以得到所见和估计之间的误差。
  • 这听起来很像我写的,我相信。但是,您选择相邻的点,而我只取了一个。为什么是 4 个(为什么是相邻的)?
  • 如果你想“估计”平面上的点,你需要知道在哪个平面上。因此 4 个(实际上只需要 3 个)点。然后,使用校准参数估计由这些点形成的平面中的点,这些点在棋盘正方形长度的距离处。点越远,误差越大(尝试不扭曲图像并计算相邻像素的差异,几乎没有!)。因此,最好在某个角落取点,让误差尽可能大(否则它可以是 0.001,即使在未校准的东西中)

标签: matlab opencv camera camera-calibration matlab-cvst


【解决方案1】:

如果您只有一台相机,您可以轻松地按照本文中的步骤操作: Evaluating the Accuracy of Single Camera Calibration

为了实现第 2 步,您可以轻松地使用 MATLAB 中的detectCheckerboardPoints 函数。

 [imagePoints, boardSize, imagesUsed] = detectCheckerboardPoints(imageFileNames);

假设您正在谈论立体相机,对于立体对,imagePoints(:,:,:,1) 是来自第一组图像的点,imagePoints(:,:,:,2) 是来自第二组图像的点。输出包含M 数量的[x y] 坐标。每个坐标代表在棋盘上检测到方角的点。函数返回的点数取决于boardSize 的值,它表示检测到的方块数。该函数以亚像素精度检测点。

正如您在下图中所见,这些点是相对于涵盖您的第三步的第一个点进行估计的。

[图片来自this page@MATHWORKS]

您可以将点 1 视为坐标系 (0,0) 的原点。轴的方向显示在图像上,并且您知道每个点之间的距离(在世界坐标中),因此这只是深度估计的问题。

要找到世界 CS 中的点和相机 CS 中的点之间的变换矩阵,您应该收集一组点并执行SVD 来估计变换矩阵。

但是,

我会估计相机的参数并将它们与时间X 的初始参数进行比较。如果您保存了在时间X 校准相机时使用的图像,这将更容易。如果相机校准仍然有效,通过使用这些图像重复校准过程,您应该会得到非常相似的结果。

编辑:为什么您需要校准过程中使用的图像集X

您有一组图像来进行第一次校准,对吧?要重新校准相机,您需要使用一组新图像。但是为了检查以前的校准,您可以使用以前的图像。如果相机的参数发生变化,则重新估计和第一次估计之间会出现误差。这可用于评估校准的有效性,而不是重新校准相机。

【讨论】:

  • 嘿!是的,我知道该功能,这也是省略步骤 2)的原因。但是,我不太确定这也涵盖了我的第三步,如果您能详细说明一下,那就太好了!我认为第三步实际上更多的是函数“generateCheckerboardPoints”的问题。
  • 在您第一次编辑后:所以您说要将世界 CS 与相机 CS 关联起来,我需要执行 SVD,这意味着我需要一组点来执行此操作,对吗?不确定我是否理解替代解决方案的详细说明。如果我猜对了,您只需在 Y 时间重新校准并将计算的参数与 X 时间获得的参数进行比较。那么我需要 X 的图像做什么?
猜你喜欢
  • 2019-02-17
  • 1970-01-01
  • 2014-09-13
  • 1970-01-01
  • 1970-01-01
  • 2011-04-05
  • 1970-01-01
  • 1970-01-01
  • 2021-07-13
相关资源
最近更新 更多