您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Python校准相机

Python校准相机

这是一个好问题,涉及校准和计算几何的几个重要问题。我将提供一个深入的答案,希望我能弄清楚这些事情。

执行相机校准时,如果使用不同的对应关系重复校准,则可能会有 三个 固有矩阵的 三个 原因。

应该很明显。如果对应关系因测量噪声而损坏,则通常使用不同的对应关系集将获得不同的校准。这是因为在校准过程中,相机是一个优化过程,其中相机参数被优化为最适合对应关系。当有噪音时,最佳配合可能会因测得的噪音而异。

如果您尝试使用不足的信息进行校准,则会发生这种情况。例如,如果每个图像只有三个对应关系,则校准问题正在确定中。您可以通过计算参数来考虑这一点。三种对应关系在校准方程式上提供了6个约束(通过x和y位置,每个对应关系对应两个)。现在,当我们进行校准时,我们必须共同估算校准对象的姿态(每个图像具有6个自由度),再加上内在函数的未知数(焦距,主点,失真等)。因此,未知数多于约束,因此许多校准可以无限!因此,如果您选择了三种不同的对应关系集,则返回校准(如果一个返回了)将永远是不正确的,并且通常也不会是相同的。

更微妙。为了解释这一点,请记住,可以通过指定具有不同数量的未知固有参数的摄像机来进行校准。在校准信息非常有限的情况下,最好减少未知数。例如,如果使用单个图像进行校准,则平面校准对象将为您在校准时为每个图像最多提供8个约束(因为单应性具有8个自由度)。要获得飞机的姿势需要6个约束,因此每个图像剩下2个约束。如果只有一张图像,则当未知数超过2个(例如焦距和镜头失真)时,您将无法进行校准。因此,如果要使用单个图像进行校准,则必须减少未知数。

在您的情况下,您已将未知数减少为单焦距(f = fx = fy)和相机的主要点。那是3个未知数,但要记住,对单个图像进行校准意味着您最多只能有2个固有未知数。因此,您有一个约束不足的问题(请参见上面的原因2)。

现在,您可能决定通过将主点固定到图像中心来克服此问题,这是很常见的事情,因为它通常是真实主点的良好近似值。现在您有一个校准问题,其中有1个未知的固有(f)。重要的问题是,如果我们尝试使用单个图像和4个无噪音的对应关系来校准f,我们是否可以期望使用不同的对应关系集获得相同的值?您可能会认为是,但答案是否定的。

原因是因为校准过程将解决一个过度约束的问题(8个约束和7个未知数)。通常,它将calibrateCamera使用功能最小化过程来解决此问题(就像OpenCV的方法一样)。在OpenCV中,这是通过最小化重新投影误差来完成的。解决方案将根据您提供的信件而有所不同。很难想象,因此请考虑一个不同的问题,在该问题中,您试图使一条直线与一条略微弯曲的线上的点拟合。直线是数据的过度简化模型。如果我们尝试通过对曲线上的两个点进行采样来拟合直线,则最佳拟合解决方案将根据采样的点而变化。

在您的特殊情况下,您可以通过使用恰好具有2个未知数的本征矩阵,删除标记以固定纵横比并将主点固定到图像中心,来消除问题2和3。

python 2022/1/1 18:47:14 有350人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶