OpenCV-在水中使用静态图像校准相机

OpenCV-在水中使用静态图像校准相机,opencv,computer-vision,camera-calibration,Opencv,Computer Vision,Camera Calibration,我有一个垂直安装在水箱水下的摄像机,向下看。 水箱底部有一个平面网格(距离摄像机约2m)。 我希望能够在底部放置标记,并使用计算机视觉知道它们在现实生活中的确切位置 所以,我需要从像素映射到mm。 如果我没有弄错的话,cv::calibrateCamera(…)就是这样做的,但是它依赖于在相机前面移动一个图案。 我只有场景的静态图片,相机永远不会相对于网格移动。因此,我只有一个“单一”图像来查找参数。 如何使用网格进行此操作 多谢各位 要校准相机,您确实需要棋盘格的多个图像(或找到的其他图案之一

我有一个垂直安装在水箱水下的摄像机,向下看。 水箱底部有一个平面网格(距离摄像机约2m)。 我希望能够在底部放置标记,并使用计算机视觉知道它们在现实生活中的确切位置

所以,我需要从像素映射到mm。 如果我没有弄错的话,cv::calibrateCamera(…)就是这样做的,但是它依赖于在相机前面移动一个图案。 我只有场景的静态图片,相机永远不会相对于网格移动。因此,我只有一个“单一”图像来查找参数。 如何使用网格进行此操作


多谢各位

要校准相机,您确实需要棋盘格的多个图像(或找到的其他图案之一)。你可以做的是在水外校准摄像机,或者执行一次校准序列

一旦你有了这些信息(焦距、镜头中心、失真等)。您可以使用solvePNP函数估计单板的方向。此估计为您提供了从相机到电路板的距离

另一种完全不同的方法是找到相机使用的镜头类型并手动填充数据。我还没有试过这个,所以我不确定它的效果如何。

有趣的问题!“可爱”部分是对水玻璃界面折射固有参数的影响,即与空气中的相同透镜相比,增加焦距(或相反,减小视野)。理论上,你可以在空气中校准,然后校正折射率的差异,但直接在水中校准可能会得到更准确的结果

你知道你的精度要求吗?您是否验证了您的镜头/传感器组合足以满足这些要求(具有足够的裕度)?要回答这个问题,您需要估计(通过镜头和传感器规格的计算,或通过实验使用分辨率图表)您是否可以在图像中解析应用程序所需的最小距离

从你问题的措辞来看,我认为你只对单平面上的测量感兴趣。因此,您只需要(a)消除非线性(桶形或枕形)镜头畸变,(b)估计感兴趣平面和图像之间的距离。一旦有了后者,就可以通过矩阵乘法直接将未失真图像坐标转换为世界坐标。此外,如果(如我所想象的)感兴趣的平面大致平行于图像平面,则保持整个视野的焦点应该没有任何问题

当然,要使所有这些都按预期工作,您应该确保油箱底部是真正平坦的,在应用程序的测量公差范围内。否则,您实际上是在处理3D问题,需要相应地修改您的过程

实际的程序在很大程度上取决于油箱的大小,而您没有明确指出。如果它足够小,可以制造一个棋盘状的可移动校准靶,那就千方百计去做吧。您可能需要查看一下以获得建议。在下文中,我将讨论一个更有趣的案例,其中您的水箱很大,例如游泳池大小

我会将校准标记粘贴在池底的规则网格中。我可能会选择像格子一样的标记,比如,自己用一台好的激光打印机在塑料上打印,背面有粘性(假设你可以永远把它们留在原处)。您应该计划使用相当多的网格,例如8x8或10x10网格,以尽可能多地覆盖相机在其工作位置和姿势下的视野。为了更好地排列网格,您可以使用具有适当扇形角度的激光线投影仪,或连接到旋转支架上的激光指针。请注意,无需将它们粘贴在精确的X-Y网格中(这可能很复杂,取决于您的池的大小),只需知道它们相对于任意选择的(但固定的)其中三个的位置即可。换句话说,您可以将它们近似地附着到网格的底部,然后尽可能精确地测量三个极端角点之间的距离,从而构建一个基本三角形,然后测量所有其他角点与三角形顶点之间的距离,最后用三角法重建它们的真实位置。这基本上是一个测量问题,根据您的精度要求和预算,您可能希望注册一名当地友好的专业测量师(及其工具),以便在必要时准确完成测量

一旦你有了网格,你就可以根据应用程序的需要填充池、获取相机、对焦和f-stop镜头。从现在起,你可能再也不会触摸焦距和f-stop了,这将受到校准错误的惩罚-曝光只能由曝光时间控制,所以请确保有足够的光线。禁用任何和所有自动对焦和自动光圈功能(如果有)。如果相机具有非刚性镜头支架(例如DLSR),则需要某种机械装置来确保镜头-主体对保持刚性。鉴于可用的照明和传感器,F-stop尽可能靠近,以获得相当的景深。然后拍摄几张网格的照片(~10),移动并旋转相机,距离飞机的预期工作距离越来越近。你会想在一些图像中“看到”网格的一些重要透视缩短-这是准确校准焦距所必需的。存储图像时避免JPG和任何其他有损压缩格式-使用无损PNG或TIFF

获得图像后,可以手动标记和识别图像中的棋盘格标记。一次性项目