【问题标题】:Calculation of focal length from images从图像计算焦距
【发布时间】:2013-08-14 12:46:23
【问题描述】:

我正在尝试计算镜头的焦距(我有 4 个不同的镜头,我将它们称为镜头 1、2、3、4)。我知道我正在使用的相机的传感器尺寸(我正在使用 2 个不同的相机),我知道对象的宽度,并且我知道工作距离。

我正在使用以下公式:

f = 焦距宽度=(工作距离*传感器宽度)/(物体 宽度 + 传感器宽度)

我也使用了相同的公式,稍作改动:

f' = 焦距宽度 =(工作距离 * 传感器宽度)/物体 宽度

我的相机的传感器尺寸如下:

型号:134MCU - 1/3" - 3,52 mm * 4,78 mm

型号:130CU - 1/4" - 2,75 毫米 * 3,64 毫米

这就是问题所在,我用两个相机从已知的工作距离拍摄了几张照片,并测量了图像宽度(我在图像场景中放置了一把尺子)。之后,我使用给定的公式计算了 ff'。在计算焦距后,我提出了几个观察结果,我认为这些观察结果不一致。观察结果如下:

  1. 随着工作距离的增加,每个镜头的计算焦距会收敛到某个值。我期望为每个工作距离计算相同的 ff' 值。为什么会这样?是否对工作距离有任何依赖性,或对工作距离有任何限制(例如,对于焦距 f mm 工作距离不能小于 n 的镜头)?
  2. 我有 8 种不同的成像设置,因为我有 4 个镜头和 2 个相机。使用 134MCU 拍摄的图像计算的 ff' 值与使用 130CU 拍摄的图像不同镜头 1 和镜头 2。镜头 3 和 4 的计算值相同。为什么会发生这种情况?

    • 使用 130CU 计算的 lens 1 值约为 1.6 mm
    • 使用 130CU 计算的 lens 2 值约为 2.4 mm
    • 使用 130CU 计算的 lens 3 值约为 2.8 mm
    • 使用130CU计算出的lens 4值约为3.6 mm
    • 使用 134MCU 计算出的 lens 1 值约为 1.4 mm
    • 使用 134MCU 计算的 lens 2 值约为 2.2 mm
    • 使用134MCU计算出的lens 3值约为2.8 mm
    • 使用134MCU计算出的lens 4值约为3.6 mm
  3. 当我与镜头供应商交谈时,他们告诉我镜头 1、2、3、4 的焦距分别为 2.1 毫米、2.5 毫米、2.8 毫米和 3.6 毫米。那么,为什么我的计算值与这些不匹配?我的计算有什么问题吗?

我使用的图片可以在here 中找到。如果有人能提供帮助,我将不胜感激。

问候,

居内·凯伊姆

【问题讨论】:

  • 什么叫“工作距离”?到传感器表面,还是到镜头中心?很难相信您可以在 1/3" 传感器上获得 1.6 mm 的焦距 - 您会在边缘获得巨大的失真。请记住,“现实世界的光学”并不完全遵循“近轴公式” "。光不会直线穿过光学元件。
  • “工作距离”是指物体和镜头之间的距离。实际上,边缘的扭曲是巨大的。我相信我的提供者告诉我的焦距值是正确的,但我不知道为什么我不能计算它。可能是因为镜头(2.1 毫米和 2.5 毫米)格式不适合 1/3" 和 1/4" 传感器吗?
  • 我认为你完全正确。请参阅我的更新答案。
  • 我的供应商说他们现在有更好的镜头。当我查看他发送的图像时,我可以看到大部分失真都消失了,但图像宽度相同。我猜这与您的想法不符?还是我错了? dl.dropboxusercontent.com/u/14588321/distortion.zip
  • distortionfocus 之间存在差异。原始图像在边缘附近既失真又失焦。在您发布的新图像中,图像的边缘显然更加清晰,但失真是相同的(直线变为弯曲)。理想的(“针孔”)投影会使直线保持直线 - 这就是您的公式所期望的。朝向中心,这是“更真实的”。

标签: camera


【解决方案1】:

我刚刚下载了你发布的图片,答案就在眼前。

您使用的公式是假设每条光线从物体以直线传播到传感器。实际上,这些广角镜头具有相当复杂的多个表面,光线在穿过“堆栈”时会多次改变方向。结果,向边缘有明显的失真。标尺上线条的高度越靠近边缘越小——“完美的针孔相机”会让它们保持精确的比例。

很难想出一个公式来正确解释这种失真 - 通常相机的计量应用(人们真正关心这些事情)会在感兴趣的焦距处进行几何校准以纠正它。

所以你的问题的答案是“我的计算有什么问题吗?”是这样的:“是的,有问题 - 您的计算是针对理想系统的。您没有理想系统。”

编辑我突然想到,使用“更小的传感器”可以做得更好:

  1. 拍摄已有的图像
  2. 查看图像的一部分(靠近中心)
  3. 找出标尺上两个标记之间跨度小于传感器宽度 10% 的距离(以像素为单位)
  4. 计算“表观传感器尺寸”=(number of pixels between markers / number of pixels across sensor) * sensor width
  5. 在计算中使用表观传感器尺寸

通过使用可变数量的像素(与标尺上的精确分割数相匹配),您可以限制您必须执行的估计/插值量。我认为这将解决大部分失真问题,并为您提供与制造商数据一致的结果。

【讨论】:

  • 好的,那我还有一个问题。如果我有一个更好的镜头(同样是 2.1 毫米焦距),它可以防止边缘失真,我的计算会更接近理想吗?这是我从您的回复中得到的结果。
  • 是的——事实上,如果你对不同的视场重复计算,你会发现计算出的焦距变化最小的镜头是“最理想的”。这是定义“好镜头”的有趣方式。
  • 在中心附近具有正畸变并且在边缘附近具有等量负畸变的镜头不能通过这种方法提供正确的焦距测量,并且仍然是一个非常糟糕的镜头吗?
  • 我试过你提供的东西,现在我的计算满足我正在使用的硬件。再次非常感谢您。
  • @enginkurutepe - 原则上是的,但如果你对几个不同的视野进行计算并得到相同的答案,你就会知道这是一个很好的镜头。只有两点你不能确定。
【解决方案2】:

您的计算假设一个理想的针孔系统,而您显然在这里没有。您的广角镜头表现出极大的失真。尝试将您的测量限制在您的光学系统的中心,这似乎是无失真的。您应该得到更符合制造商指定焦距的结果。

编辑: 弗洛里斯上面说的……

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-01
    • 2013-12-01
    • 1970-01-01
    • 2020-12-09
    • 2020-04-08
    • 1970-01-01
    相关资源
    最近更新 更多