单平面的摄像机校准

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

我的问题陈述很简单。但我无法让opencv校准工作。我正在使用这里的代码:source code。我必须以固定的距离拍摄与相机平行的图像。我尝试仅在相机和不同平面上拍摄测试图像(大约20张)。我也改变了大小和方块的数量。

在这种情况下校准的最佳方法是什么?

未失真的图像稍后会被裁剪,这就是它看起来更小的原因。

仔细检查图像后,枕形失真似乎已得到纠正。但“梯形”失真仍然存在。由于相机安装在一个封闭的盒子里,我可以拍摄图像的平面是有限的。

opencv camera-calibration
2个回答
0
投票

为了简化弗拉德已经说过的内容:理论上不可能仅使用与摄像机平行的测试图像来校准您的摄像机。您必须更改校准板的方向。实际上,每个测试图像中应该有不同的方向。

查看以下链接中的前两个图像,了解校准板应如何倾斜(或倾斜):http://www.vision.caltech.edu/bouguetj/calib_doc/


0
投票

将校准问题看作寻找投影矩阵P:

image_points = P * 3d_points,其中P =内在的*外在的

现在跟我说吧:你基本上对内在部分感兴趣,但校准算法必须找到内在和外在。现在,如果选择无穷远处的3D点,则可以获得每列投影矩阵,例如xInf = [1,0,0,0]。这个点是无穷远的,因为当你从齐次坐标转换为笛卡儿时,得到[1 / 0,0,0]。如果将投影矩阵与无穷远点相乘,您将获得其相应的列(第1列为Xinf,第2列为yInf,第3列为zInf,第4列为相机中心)。

因此,结论很简单 - 要获得投影矩阵(即成功校准),您必须清楚地看到无限远点或消失点的点,这些点来自棋盘装备中的线的会聚扩展(也就是地平线上的铁轨末端) 。您的图像不易检测消失点,因为您不会倾斜您的棋盘,也不会通过后退来旋转或缩放它。因此,您的校准将始终失败。

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