打开相机校准精度

时间:2015-11-15 17:47:02

标签: opencv camera camera-calibration

我正在校准我的相机,结果非常糟糕。截至目前,我责怪我的相机坏了或我做错了什么。我使用的主要功能是: findChessboardCorners cornerSubPix findCirclesGrid calibrateCamera solvePnP (正如相机校准的opencv文档中所描述的那样)

所以我开始评估如果我添加完美的相机校准算法是如何工作的。数据。我使用3D CAD建模软件(Rhinoceros3D)并以绝对精度建模我的网格,即方形尺寸和之间的距离恰好为10毫米。我的校准模式位于OXY平面上。由于3D cad软件具有透视图,因此我可以轻松地在屏幕上呈现结果,就像它在现实中一样。所以我生成了图像,因为我会在现实世界中捕获它们。这种情况是完美的情况 - 模式绝对精确,没有失真,世界上没有相机可以产生如此好的效果。

Chessboard 8x10 https://www.dropbox.com/sh/9zbzk6bqekih8il/AADUZvxwd5PdmGXauCJSHFMwa?dl=0

不对称网格4 x 11 https://www.dropbox.com/sh/9abr79py4z9hf3x/AABj0ez5_bxL4rsFLjxKwjsma?dl=0

我的下一步是校准相机。我传递了图像并从calibrateCamera函数中获得了棋盘的误差为0.115208像素,非对称网格的误差为0.030177像素。

然后,我需要做的是评估校准的好坏程度。对于同一组图像,我使用solvePnP(使用具有相同结果的solvePnPRansac)来定位摄像机的位置。我明确解决了 - 没有初始猜测摄像机位置(因为这是摄像机空间的新位置)。使用结果的rot和trans,我构造了一个笛卡尔坐标系,从相机原点传递光线,通过UNDISTORTED点并与平面OXY相交。 理想情况下,我希望这些线非常准确地与平面相交(在点(0,0),(0,10),(10,0)等等。)。

问题是我获得了大约0.15毫米的显着偏移,这意味着将我的相机放在3D中是错误的。我想用这个作为基础进行相机 - 投影机校准'但是如果我在“完美”中遇到如此大的错误。在这种情况下,真正的相机/投影机永远不会取得好成绩。

我做的另一个测试是: 1.对于具有calibrationMatrix和偏差系数后的每个图像,使用solvePnP定位摄像机位置。 2.仅交叉图案中检测到的角的第一个点。 (它应该在(0,0)中与0XY相交) 3.评估所有这些点到原点(0,0)的距离的标准偏差 - 位置精度 4.评估所有这些点的距离与其平均点的标准偏差 - 系统精度

问题是,对于LOCATION精度,我得到误差0.165423 mm,对于SYSTEMATIC精度,我得到误差0.035441 mm。

这些错误很高。对于所提供的数据集,我希望LOCATION和SYSTEMATIC的精度达到0.0001 mm。

我的问题是 - 有人可以在实施中测试链接中的图像,让我知道结果是什么?可能是我在实施中遗漏了一些东西,但我真的相信我们应该得到完美的#39;结果当我们提供完美的'数据

我将非常感谢你的帮助。

P.S。 - 我正在使用opencv 2.4.10。这些算法在3.0中有什么改进吗?

非常感谢

0 个答案:

没有答案