单张图像的相机校准?它似乎工作,但我错过了什么?

问题描述 投票:7回答:2

我必须做相机校准。我理解一般概念并且我有它的工作,但在许多指南中它说要使用许多图像或至少两个具有不同方向。为什么这有必要?我似乎通过14x14点的单个图像获得了相当不错的结果:

我找到了cv :: findCirclesGrid的点,并使用cv :: calibrateCamera来查找外部和内部参数。内在猜测设置为false。当切向失真固定为零时,主点和纵横比不固定。

然后我使用cv :: getOptimalNewCameraMatrix,cv :: initUndistortRectifyMap和cv :: remap来恢复图像。

在我看来,结果非常好,但我错过了什么?这实际上是错的,等待以后给我带来麻烦吗?

在你问为什么我不只是使用多个图像以确定之前;我正在编写的软件将与半固定相机支架一起使用,一次一个地校准多个相机。因此,首先需要修改支架,以便将图案定位在一个角度或偏离中心,因为目前它只能移近或远离。其次,不应该通过必须捕获更多图像来不必要地减慢该过程。

编辑:要向Micka询问“如果您的视角在图案上不是90°会发生什么?您可以尝试将图案旋转离开相机吗?”。我得到了一个类似的结果,虽然它发现了更少的失真。从用尺子看边界看来,90°的校准似乎更好,但实在很难说。

c++ opencv camera-calibration
2个回答
2
投票

正如here所述,圆形图案(理论上)只与单个图像相处得很好。您需要多个图像的原因是输入数据中存在噪声。

我的建议是比较不同输入图像的结果。如果误差很小,您可能会得到一个样本。


1
投票

在不同方向上具有更多图案是必要的,以避免外部参数非常不准确但不畸变的像素重投影误差仍然很低的情况,因为不同的误差是补偿的。

为了说明这一点:如果您只有一个以90度视角拍摄的图像,那么水平焦距的变化与从侧面稍微观察图案的差别很小。将两个参数分开的唯一线索是线的逐渐变细,但测量非常嘈杂。因此,您需要以重要角度的多个视图来将姿势的这个方面与内在参数分开。

如果您知道您的图像是以90度查看的,那么您可以使用它,但它需要修改opencv算法。如果您确定将从与校准图像相同的姿势捕获所有图像,那么即使单个校准参数不准确但补偿(即它们对这种特定姿势的补偿很好),因此无畸变也无关紧要,但其他姿势很差)。

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