确认相机校准仍然有效

时间:2015-07-22 09:00:54

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

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

我的想法是

  1. 使用已知的校准对象(棋盘)并在时间Y将其放置在相机的视野中。
  2. 计算相机图像中的棋盘角点(时间Y)。
  3. 将其中一个棋盘角点定义为世界原点,并根据该原点计算所有剩余棋盘角的世界坐标。
  4. 将坐标与相机坐标系相关联。
  5. 使用在时间X计算的参数来计算4点的图像点。
  6. 计算点之间的距离2.点与5之间的距离。
  7. 这是一个聪明的方法吗?我最终想在MATLAB中实现它,后来可能在openCV中实现它。我想我知道如何做步骤1)-2)和步骤6)。也许某人可以对步骤2)-5)进行粗略的实施。特别是我不确定如何将“棋盘世界坐标系”与“相机世界坐标系”联系起来,我认为我必须这样做。

    谢谢!

1 个答案:

答案 0 :(得分:1)

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

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

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

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

正如您在下图中所见,这些点是相对于第三步的估计值。

enter image description here

[图片来自MATHWORKS的this page。]

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

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

<强>但是,

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

修改:为什么需要X时刻校准过程中使用的图像集?

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