如何确定您在X时刻为相机计算的内在和外在参数在时间Y仍然有效?
我的想法是
这是一个聪明的方法吗?我最终想在MATLAB中实现它,后来可能在openCV中实现它。我想我知道如何做步骤1)-2)和步骤6)。也许某人可以对步骤2)-5)进行粗略的实施。特别是我不确定如何将“棋盘世界坐标系”与“相机世界坐标系”联系起来,我认为我必须这样做。
谢谢!
答案 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
的值,表示检测到的平方数。该功能以亚像素精度检测点。
正如您在下图中所见,这些点是相对于第三步的估计值。
[图片来自MATHWORKS的this page。]
您可以将第1点视为坐标系的原点(0,0)。轴的方向显示在图像上,您知道每个点之间的距离(在世界坐标中),因此这只是深度估计的问题。
要在世界CS中的点与摄像机CS中的点之间找到变换矩阵,您应该收集一组点并执行SVD来估计变换矩阵。
<强>但是,强>
我会估算相机的参数,并将它们与X
时的初始参数进行比较。如果您保存了在X
时校准相机时使用的图像,则这会更容易。如果相机校准仍然有效,通过使用这些图像重复校准过程,您应该得到非常相似的结果。
修改:为什么需要X
时刻校准过程中使用的图像集?
你有一组图像是第一次进行校准,对吗?要重新校准相机,您需要使用一组新图像。但是,要检查先前的校准,您可以使用之前的图像。如果摄像机的参数发生变化,则在重新估计和第一次估计之间会出现误差。这可用于评估校准的有效性,而不是用于重新校准相机。