首页 文章

OpenCV摄像机校准:distCoeff中非常大的k3值

提问于
浏览
0

我在67个图像上运行cv2.calibrateCamera,每个图像中有19x3个棋盘角点检测 . 我发现重投影误差在0.3左右 . 当我不失真的图像时,它们看起来很棒 . 之前它们几乎没有变形,之后看起来基本上是完美的 . 这是使用高质量的科学相机,但他们认为是在水下,这使问题复杂化 .

之后,我使用这些相机校准(以及来自立体声设置中的其他相机的那些)作为stereoCalibrate的输入,其返回大约0.3的误差 . 当我尝试立体校正和重新映射时,我会得到废话:黑色图像或扭曲图像,具体取决于cv2.stereoRectify中的alpha参数 .

这让我回到原来的相机矩阵 . 我相机校准的失真系数是

array([[-1.44561083e-01, -3.21620254e+01,  0.00000000e+00,
 0.00000000e+00,  1.72034253e+03]])

K3看起来非常大!知道这里发生了什么吗?这会破坏我以后的立体声整流吗?

1 回答

  • 0

    由于很少有人在他们需要答案之前似乎遵循opencv问题,我会分享我学到的东西 .

    校准数据集涉及校准板的高度有序方向,立体校准算法容易过度拟合 . 例如,我的40个校准图像与1cm增量变化相关,并且在17个横向方向上相关 . 相机质量非常高,基本没有失真 . 这导致了大量的过度拟合:opencv算法正在学习校准图像方向中的模式 .

    我在这种情况下找到的解决方案是在Matlab中使用Bouquet工具箱 . 它优于opencv,因为它允许在优化中约束许多参数 . 这有助于克服我遇到的过度拟合问题,这会导致大的图像失真 .

相关问题