有没有一种方法可以将摄像机的视平面与场景中的物体表面平行对齐?

时间:2019-01-09 15:00:29

标签: python c++ opencv image-processing camera-calibration

我正在以正交方式设置两个摄像头,以便每个摄像头可以看到放置在中间的立方体的相邻表面之一,并且两个摄像头的主线之间的角度为90度。我正在考虑在正在查看的立方体的每一侧粘贴两个棋盘图案以帮助对齐。我应该如何进行或还有其他选择?

布局基本上是这样的: enter image description here

主线之间的角度必须非常接近90度,否则至少我可以以某种方式量化误差,所以我放弃了物理方法。

谢谢。

修改:
立方体中心与两个相机的视平面之间的距离为400英寸;
相机的焦距为0.77英寸;
FOV(视场)的水平视角为0.95 rad;
视图的纵横比为1280x720。

多维数据集仅用作设置摄像机的参考对象。当我假设一个1m x 1m x 1m的立方体是合理的时,它可以大也可以小。

在此可以忽略热条件的影响。

我要针对的误差是+ -1度。与在相机侧使用诸如气泡管之类的东西相比,在目标侧进行校准似乎给了我更少的误差。

我一直在使用带有棋盘(https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_calib3d/py_pose/py_pose.html)的姿势估计方法。但是,当棋盘表面的法线矢量与来自相机视平面的法线矢量对齐时,它将停止工作或不再精确。

对于上述问题,还有其他合适的解决方案吗?

1 个答案:

答案 0 :(得分:0)

姿势估计应该足够了(为什么在您的情况下它停止工作?)。 否则,您可能需要进行其他校准,请滚动至下方!

第一。 您可以定义两个摄像机的固有参数。

秒。 您放置棋盘图案是一个不错的选择,因为通过检测角点可以获得更准确的图像点结果。您已经知道这些图案的几何形状和距离,并像标准opencv一样将棋盘的左上角定义为原点(0,0,0)。

第三。 您使用solvePnP来获取姿势估计(旋转和平移)。您必须将(并要小心)将初始旋转和平移到resolvePnP()中,因为这将确定您的整体结果。

第四。 您可以将相机位置调整为所需的90度。此时,请确保放置棋chess的立方体侧面也完全成90度。您可以结合使用opencv的手动校准和姿势估计。

替代品:(光源校准)

您可以使用光学物理学中的干涉仪概念,用光源替换相机并仔细标记其位置。用棱镜镜头更换立方体,并仔细标记其位置。

您可以借用干涉仪概念并按自己的术语进行设置。

一旦获得所需的东西,将相机放回原处,并将其作为上述步骤3的初始旋转和平移位置。