我们如何确认固有的矩阵是正确的

How can we confirm that the intrinsic matrix is correct?

本文关键字:何确认 确认 我们      更新时间:2023-10-16

i使用Aruco标记执行了相机校准。由于固有矩阵是K = [fx 0 cx; 0 fy cy; 0 0 1],其中fx = image_width/2 and fy = image_height/2。我进行了两次校准,结果是:

案例1

camera_matrix: !!opencv-matrix
   rows: 3
   cols: 3
   dt: d
   data: [ 1.7837087835808685e+004, 0., 9.4648597205501767e+002, 0.,
       1.7846680517567835e+004, 6.2655678552312384e+002, 0., 0., 1. ]
distortion_coefficients: !!opencv-matrix
   rows: 1
   cols: 5
   dt: d
   data: [ 1.3214125616841757e-001, 1.3720591379476604e+001,
       4.1379706976846960e-003, 3.2630160993931338e-002,
       7.2446581087476508e-002 ]

案例2

camera_matrix: !!opencv-matrix
   rows: 3
   cols: 3
   dt: d
   data: [ 3.9925887362481939e+004, 0., 9.6015637557091463e+002, 0.,
       3.5268399261164773e+003, 5.9886507612381956e+002, 0., 0., 1. ]
distortion_coefficients: !!opencv-matrix
   rows: 1
   cols: 5
   dt: d
   data: [ 4.4338539084399781e-001, 4.9217843346948866e+000,
       5.8004377137432547e-002, 1.1762688789809046e-004,
       -5.4097967557812456e+002 ]

图像的分辨率为1920*1200,因此cxcy应为960和600。在第二种情况下,cxcy是预期的。重投影误差很大。在其他情况下,cxcy不匹配,但重新投影错误很低(小于1)。

所以现在可以考虑哪些结果,最好如何定义fxfy

您是正确的,cx和cy应该接近960和600。从这个角度来看,案例2似乎更有可能,但是案例1肯定是可行的,中心点(946,626))。

更多的眉毛升起是获得的焦距参数。对于焦距对(17837,17846)和(39925,3526)都不是合理的。根据经验,FX参数应与像素宽度(在这种情况下为1920年)相匹配到2倍以内(例如,iPhone 5S具有FX〜= 0.8*PixelWidth)。FY应将FX匹配到1.2倍左右。对于案例1,FX的宽度为10倍,对于情况2 FX,FY不匹配为10倍。

我建议尝试几个校准工具箱,并在其中任何两个之间找到共识(例如要求多个机械师看您的汽车)。我建议Jean-Yves Bouguet的校准工具箱,它是OpenCV方法的先驱。

如果您仍然可以访问相机,我会说尝试捕获更多图像并多次重复校准过程。

@willem在使用Jean-Yves的答案中提到的工具箱中提到,您将可视化木板的转角检测,3D位置,并帮助您丢弃嘈杂的图像。但是,Jean-Yves的工具箱仅在棋盘上工作,并且需要手动输入具有正方形的ROI。

如果您觉得Aruco董事会没有给出很高的精度,则可以在OpenCV中尝试Charuco板。

我想说的是mm中的焦距很难与像素焦距有关,因为要这样做,您需要相机的成像器的大小。通常不可用。