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

问题描述 投票:0回答:1

我在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看起来非常大!知道这里发生了什么吗?这可能会在以后破坏我的立体声整流吗?

opencv camera-calibration stereo-3d
1个回答
0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.