C++ OpenCV';摄像机校准
我正在使用8x8棋盘用OpenCV校准我的相机;但我有一些奇怪的结果: 我尝试用棋盘上的两张照片校准相机,其中一张照片未失真是正确的,但另一张的角被拉伸:C++ OpenCV';摄像机校准,c++,opencv,camera-calibration,C++,Opencv,Camera Calibration,我正在使用8x8棋盘用OpenCV校准我的相机;但我有一些奇怪的结果: 我尝试用棋盘上的两张照片校准相机,其中一张照片未失真是正确的,但另一张的角被拉伸: 有人能告诉我为什么我会得到这些奇怪的结果吗?我该如何解决这个问题呢?试着使用更多的图像,使电路板处于不同的方向。我会用至少10个。另外,一定要移动电路板,以获得整个视野的点。第一张图像:它几乎与图像平面平行。在这种情况下,图像中的消失点很难观察到,因此相机内部的约束很模糊 建筑场景图像中消失点的摄像机校准,BMVC(1999), 作者:R
有人能告诉我为什么我会得到这些奇怪的结果吗?我该如何解决这个问题呢?试着使用更多的图像,使电路板处于不同的方向。我会用至少10个。另外,一定要移动电路板,以获得整个视野的点。第一张图像:它几乎与图像平面平行。在这种情况下,图像中的消失点很难观察到,因此相机内部的约束很模糊 建筑场景图像中消失点的摄像机校准,BMVC(1999), 作者:R Cipolla,T Drummond,D Robertson 此外,失真校正仅在没有观测数据的区域(沿图像边界)是错误的。这告诉我们,校准后的模型不擅长外推,但擅长插值。这是一个过度拟合的经典示例
我的猜测是,在第二幅图像中,由于更好的深度变化,内部函数受到更好的约束。内部函数的约束允许使用可用数据更好地估计失真。好的,我将使用更多图像。但是,这两个图像之间的差异是什么导致了第一个图像中的问题?openCV的文档非常具体地介绍了如何使用多个图像进行校准。由于标定算法是一种优化算法;它可能与模型过于吻合。这导致一部分图像被“正确”重建,另一部分图像被错误重建。该算法不适用于少量图像。我建议使用10张以上的图像(大约15-20张)进行校准。校准只考虑图案内的像素(据我所见,在您的示例中,这是没有正方形外边界的棋盘)。图案之外的所有东西都可能会非常扭曲,因此您应该拍摄足够的照片,以覆盖整个相机视野。