2

我使用 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 ]

案例二

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,所以cxandcy应该是960和600。第二种情况,cxand和cy预期的一样;重投影误差很大。在其他情况下cxcy不匹配,但重投影误差非常低(小于 1)。

那么现在可以考虑哪些结果是最好的,一般如何fx定义fy

4

2 回答 2

0

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

正如@willem 的回答中提到的,使用Jean-Yves 的工具箱可以让您可视化角落检测、板的 3d 位置并帮助您丢弃嘈杂的图像。但是,Jean-Yves 的工具箱仅适用于棋盘格,需要手动输入具有正方形的 ROI。

如果你觉得 aruco 板子精度不高,你也可以在 opencv中试试Charuco 板子。

我想说以毫米为单位的焦距很难与像素焦距相关联,因为这样做需要相机成像器的尺寸。这通常不可用。

于 2016-12-26T06:53:29.387 回答
0

你是正确的,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 方法的先驱。

于 2016-12-22T20:45:45.193 回答