没有访问相机的情况下去除鱼眼效应

4

我曾经使用一台鱼眼相机拍摄了一些照片,但现在无法再访问这些照片。我想使用opencv消除这些照片上的鱼眼效果,但我看到的所有解决方案都需要拍摄一个已知大小的物体(例如:国际象棋棋盘),然后调用cv2.calibrate()函数,它将返回可用于cv2.undistorted()函数的校准参数。然而,这种方法并不适用于我的情况。不过,这些关于鱼眼效果参数的属性已经与相机绑定在一起。

<intrinsic>
        <fisheyeAmt1 format="float" value="308.8805"/>
        <fisheyeAmt2 format="float" value="-14.2861"/>
        <fisheyeAmt3 format="float" value="51.4445"/>
        <fisheyeAmt4 format="float" value="-10.362"/>
        <opt_axis_x_rot_deg format="float" value="0"/>
        <opt_axis_z1_rot_deg format="float" value="0"/>
        <opt_axis_z2_rot_deg format="float" value="0"/>
        <image_flip_x_bool format="bool" value="false"/>
        <image_flip_y_bool format="bool" value="false"/>
        <cam_aspect format="float" value="0.9999"/>
        <source_image_x_res format="float" value="1280.0"/>
        <source_image_y_res format="float" value="806.0"/>
        <cxoffs_pix format="float" value="5.35"/>
        <cyoffs_pix format="float" value="6.477"/>
      </intrinsic>
<extrinsic>
        <rot__x_deg format="float" value="68.46"/>
        <rot_z1_deg format="float" value="-89.34"/>
        <rot_z2_deg format="float" value="0.75"/>
        <pointx_mm format="float" value="4133.0"/>
        <pointy_mm format="float" value="-97.0"/>
        <pointz_mm format="float" value="919.31"/>
      </extrinsic>

我的问题是,这些属性中是否有任何东西可以用作cv2.calibrate()返回值的替代品?
这里还有一个相关问题(链接),但我不确定我拥有的值是否可以用作另一个问题中使用的fx、fy、cx、cy、k1、k2、p1、p2。

可能是程序化纠正鱼眼畸变的重复问题。 - Tom Wyllie
@TomWyllie 这是一个相似的问题,但是我不知道这些值中哪些代表 fx、fy、cx、cy、k1、k2、p1、p2。 - omargamal8
2个回答

0

如果您有包含已知纹理平面表面的图像,则可以执行另一种校准。

这些属性来自哪里?它们中的一些名称不是标准的。 您是否有关于提及焦距的图像的EXIF信息?

  • cxoffs_pix:cx-1280/2
  • cyoffs_pix:cy-806/2
  • source_image_x_res:应接近2 * cx
  • source_image_y_res:应接近2 * cy
  • cam_aspect:fx / fy
  • image_flip_x_bool:应指示是否否定fx
  • image_flip_y_bool:应指示是否否定fy

您能否给出与名称相关联的值?这可能有助于猜测。

如果您有有关视场的信息,可能会对fx、fy有所帮助


这些是我唯一得到的信息。不过,我会更新它并附上相应的值。 - omargamal8
我还有一张相机拍摄的道路上长直线的照片。我认为这可能会有所帮助,因为它必须是现实世界中的一条直线。@Vincent Vidal - omargamal8
因此,从值cx = cxoffs_pix + 1280/2和cy = cyoffs_pix + 806/2(我编辑了我的帖子)。如果你非常幸运,308.8805可能是以像素为单位的焦距(fx和fy),而fisheyeAmt2、fisheyeAmt3和fisheyeAmt4则可能是k1、k2和k3,但我不能确定。一个矩形可以用来校准没有畸变的图像(以估计/检查fx、fy、cx、cy)。要获取畸变参数,我不知道最小模式是什么。 - Vincent Vidal

0
一个解决方案是使用GUI手动调整相机校准参数!示例代码:camcalib_gui。 另一个自动化的解决方案是在图像中找到应该是直线但因为鱼眼而弯曲的边缘或线条。在这些线条上绘制并保存点。然后将相机参数作为优化问题求解。无法分享此代码,因为我是在Ignitarium完成的。

虽然这个链接可能回答了问题,但最好在此处包含答案的基本部分并提供参考链接。如果链接页面更改,仅有链接的答案可能会失效。-【来自审查】 - Nuclear03020704
链接已失效。您是否在其他地方仍有存储库,或者能否给我一些线索?我一直在尝试手动查找参数,但我很困难,特别是k1、k2、k3、k4。 - dj_rydu
@dj_rydu,代码现在可以访问。您可以实现线条绘制和优化,以找到使直线由于鱼眼效应而变曲的参数,如果有相机可用,则使用检查器/charuco本身。 - Jerin Antony

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接