gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 20:58:18 27 4
gpt4 key购买 nike

我有一个照相相机垂直安装在水箱中,朝下看。
水箱底部有一个平坦的网格(距离相机约2m)。
我希望能够将标记放置在底部,并使用计算机视觉来了解其实际位置。

因此,我需要从像素映射到毫米。
如果我没记错的话,cv::calibrateCamera(...)只是这样做,但是取决于在相机前面移动图案。
我只有场景的静态图片,并且相机从不相对于网格移动。因此,我只有一个“单个”图像来查找参数。
如何使用网格做到这一点?

谢谢。

最佳答案

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

知道您的准确性要求吗?并且您是否已验证您的镜头/传感器组合足以满足要求(有足够的余量)?为了回答这个问题,您需要估计(通过镜头和传感器规格的计算,或者通过实验使用分辨率表)是否可以在图像中分辨出应用所需的最小距离。

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

当然,要使所有这些工作都能按预期进行,应确保油箱底部确实平整,且不超出应用程序的测量公差。否则,您实际上是在处理3D问题,因此需要相应地修改过程。

实际步骤在很大程度上取决于水箱的尺寸,您没有明确指出。如果它足够小,可以制造出像棋b​​oard一样的可移动标定靶,则一定要这样做。您可能需要查看this other answer以获得建议。在下文中,我将讨论更有趣的情况,其中您的战车很大,例如游泳池的大小。

我将在游泳池底部的常规网格中粘贴校准标记。我可能会选择像these这样的类似方格的标记,也许自己用一台好的激光打印机在带有粘合剂背衬的塑料上自己打印(假设您可以将它们永久放置在适当的位置)。您应该计划使用其中的一些,例如8x8或10x10的网格,以其工作位置和姿势尽可能覆盖摄像机的视野。为了更好地排列网格,您可以使用具有合适扇角的激光投影仪,或将激光指示器连接到旋转支架上。请仔细注意,不必将它们固定在精确的X-Y网格中(可能会很复杂,具体取决于池的大小),只需要知道它们相对于任意选择(但固定)的三个位置的位置即可。换句话说,您可以将它们大致固定在网格的底部,然后尽可能精确地测量三个极角之间的距离,从而建立一个底三角形,然后测量所有其他角与平面之间的距离。三角形的顶点,最后用一点三角函数重建它们的真实位置。从根本上讲,这是一个测量问题,根据您的准确性要求和预算,您可能希望注册一个本地友好的专业测量师(及其工具),以根据需要精确地完成测量。

一旦有了网格,就可以填充池,获取相机,聚焦并根据应用程序的需要对镜头进行自动对焦。从现在开始,您可能再也无法触摸焦点并停止f停,否则会受到校准错误的影响-曝光只能由曝光时间控制,因此请确保有足够的光线。禁用所有自动对焦和自动光圈功能(如果有)。如果相机具有非刚性镜头座(例如DLSR),则需要某种机械装备以确保镜头-机身对保持刚性。在有可用照明和传感器的情况下,F-stop尽可能接近,以确保有足够的景深可用。然后在网格上拍摄几张照片(约10张),移动和旋转相机,并使其离飞机的预期操作距离更近,更远。您需要在某些图像中“看到”透视网格的一些重要透 View -这是准确校准焦距所必需的。存储图像时,请避免使用JPG和其他任何有损压缩格式-使用无损PNG或TIFF。

拥有图像后,您可以手动标记和识别图像中的检查标记。对于这样的一次性项目,我不会为自动识别而烦恼,只需手动进行(例如在Matlab中,甚至在Photoshop或Gimp中)。为了帮助识别标记,您可以例如在他们旁边打印一个数字。有了手动标记后,您可以自动将其精确到亚像素精度,例如使用cv::findCornerSubpix。

你几乎完成。将实角的“参考”测量位置以及在所有图像中观察到的位置馈入您喜欢的相机校准例程,例如cv::calibrateCamera。您将相机的标称焦距(转换为像素)用于初始估计,同时使用零失真。如果一切顺利,您将获得将保留的相机固有参数,并将相机摆在所有图像上,然后将它们丢弃。

现在,您可以根据应用程序的需要将摄像机安装到最终设置中,并获取网格的另一张图像。像以前一样标记和细化拐角位置。使用校准返回的失真参数使它们的图像位置不失真。最后,计算真实标记的参考位置(以米为单位)与它们的未失真位置之间的单应性,您就完成了。

高温超导

关于opencv - OpenCV-使用水中的静态图像校准相机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17785642/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com