opencv - OpenCV摄像机校准:distCoeffs中的k3值非常大

标签 opencv camera-calibration stereo-3d

我在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的问题,直到他们需要答案,所以我将分享我学到的东西。

借助涉及校准板高度定向的校准数据集,立体声校准算法很容易过度拟合。例如,我的40张校准图像与1cm的增量变化以及17个横向方向相关。相机质量很高,基本上没有失真。这导致大量的过度拟合:我认为opencv算法正在学习校准图像方向上的图案。

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

关于opencv - OpenCV摄像机校准:distCoeffs中的k3值非常大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51567380/

相关文章:

image-processing - 如何检查恢复深度

opencv - 有没有办法使用我的分类器对更多训练数据进行分类并获得准确的结果?

opencv - 可视化 OpenCV 关键点

python - 如何在opencv python中放置驻留时间

opencv - 在给定R和T的情况下,立体整流能否始终成功

python - 如何使用 image_proc 发布/流式传输校正图像的 roi?

c++ - OpenCV - 将相机矩阵和畸变系数存储为 Mat

opencv - 类似于鹰眼的3D三角剖分

c++ - 使用 Media Foundation source reader 读取 3D(左右)视频

c++ - 粒子滤波器中的多元高斯分布