如何使用openCV正确校准带有广角镜头的相机?

2024-04-28 19:20:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试着用鱼眼镜头校准相机。因此,我使用了鱼眼镜头模块,但不管我修正了什么失真参数,都会得到奇怪的结果。 这是我使用的输入图像:https://i.imgur.com/apBuAwF.png

红色圆圈表示我用来校准相机的角。在

这是我能得到的最好结果,输出:https://imgur.com/a/XeXk5

我现在不知道相机传感器的尺寸是多少,但是根据在我的氮矩阵中计算的像素焦距,我推断我的传感器尺寸大约是3.3毫米(假设我的物理焦距是1.8毫米),这对我来说很现实。然而,当我不失真我的输入图像,我得到胡说八道。有人能告诉我我可能做错了什么吗?在

校准输出的矩阵和均方根值:

K:[263.7291703200009, 0, 395.1618975493187;
 0, 144.3800397321767, 188.9308218101271;
 0, 0, 1]

D:[0, 0, 0, 0]

rms: 9.27628

我的代码:

^{pr2}$

如果有人有想法,可以在C++中共享Python中的一些代码。任何能让你的船漂浮的东西。在

编辑:

你可能已经注意到了,我没有用黑白棋盘来校准,而是用了构成我地毯的瓷砖的角落。一天结束的时候,我想我们的目标是得到代表畸变半径样本的角坐标。地毯在某种程度上和棋盘是一样的,唯一的区别-再一次我认为-是事实上你有较少的高频边缘在地毯上的角落比在黑白棋盘。在

我知道照片的数量非常有限。我希望图像在某种程度上是不失真的,但我也希望不失真做得非常好。但在这种情况下,图像输出看起来完全是胡说八道。在

最后我用了一张棋盘的图片:https://imgur.com/a/WlLBR 本网站提供:https://sites.google.com/site/scarabotix/ocamcalib-toolbox/ocamcalib-toolbox-download-page 但是结果仍然很差:对角线和我发布的其他输出图像一样。在

谢谢


Tags: 代码https图像com棋盘尺寸矩阵传感器
1条回答
网友
1楼 · 发布于 2024-04-28 19:20:46

您的第一个问题是您只使用一个图像。即使你有一个理想的针孔相机没有失真,你也不能从一个共面点的图像中估计本质。一个共面点的图像根本没有给你足够的约束来求解本质。在

您需要至少两个不同3D方向的图像,或3D校准装备,其中点不是共面的。当然,在实践中,你需要至少20张图像来进行精确校准。在

你的第二个问题是你用地毯做棋盘。你需要能够以亚像素精度检测图像中的点。小的定位误差会导致估计的摄像机参数误差较大。我真的怀疑你能以任何合理的准确度探测到地毯方格的角落。事实上,你甚至不能非常精确地测量地毯上的实际点位置,因为它是模糊的。在

祝你好运!在

相关问题 更多 >