【问题标题】:Recover Pose OpenCV 3.0恢复姿势 OpenCV 3.0
【发布时间】:2015-11-25 06:01:00
【问题描述】:

我已经使用 opencv 3.0 校准了我的针孔相机,得到了 4 个内在参数 (f_x,f_y,u_0,v_0) 以及一些失真系数。使用这种校准,我从不同位置的两个图像估计基本矩阵。最后,我想使用 opencv 3.0 中的恢复姿势函数来恢复 (R|t)。此功能的接口需要一个焦距,但我有两个来自校准程序。如何从 f_x 和 f_y 中得到焦距 f=f_y/s_y = f_x/s_x(根据 OpenCV 定义),以便正确使用恢复姿势功能?

【问题讨论】:

    标签: opencv computer-vision


    【解决方案1】:

    您可以简单地使用水平焦距 f_x。 f_y/f_x 的比值就是像素的纵横比,是像素的正方形估计。

    请注意,除非您的图像对中有一些绝对比例参考(例如,已知大小的对象),否则您只能按比例恢复姿势,即对于某些未知比例 s,R 和 s*t。

    【讨论】:

    • calibrateCamera 返回的 f_x 以像素为单位。 recoverPose() 函数需要以 mm 为单位的焦距。因此,有必要对它们进行转换。如果您知道 CMOS 传感器的尺寸,就可以做到这一点。或者,使用相机/镜头制造商发布的焦距(以毫米为单位)。
    • @Derec Simkowiak,有几个错误:(1)f_x 和 f_y 的单位是像素/长度,其中长度以校准对象的单位测量,例如通常 OpenCV 设置中棋盘格的宽度。 (2) 更正确的说法是,recoverPose() 返回与给定焦距相同的单位,无论是像素、毫米、英寸还是公里。正如你所说,绝对比例可以从传感器的知识中获得,但如果校准装置的几何形状已知,它也可以从校准过程中恢复。
    • 在进一步阅读时,recoverPose() 并不期望以 mm 为单位的焦距,尽管这在文档中并不清楚。相比之下,calibrationMatrixValues() 的文档确实说它需要 mm。 @Francesco,回复:您的观点(2),我的理解是返回的平移是一个单位向量,表示平移方向而不是距离。这与以某些任意单位(例如棋盘方单位)的绝对平移的 t 略有不同。我很想阅读有关此主题的任何参考资料,尤其是。如何将 t 转换为绝对单位。
    • 通过实验我已经确认recoverPose() 总是返回一个单位向量进行平移。所以,它给出了方向,但没有给出距离。
    【解决方案2】:

    您不能仅从 f_x 和 f_y 中得出实际焦距。对于针孔相机,实际焦距是针孔到成像平面的距离。您的相机可能在规格中的某处写有焦距。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-28
      • 2011-12-26
      • 1970-01-01
      • 2013-02-15
      • 1970-01-01
      • 2013-11-05
      • 2015-05-01
      相关资源
      最近更新 更多