为什么相机内参矩阵中的焦距有两个维度?

43
针孔相机模型中,只有一个焦距,它位于主点和相机中心之间。
然而,在计算相机的内部参数后,矩阵包含。
(fx,  0,  offsetx,  0,
 0,  fy,  offsety,  0,
 0,   0,  1,        0)

这是因为图像传感器的像素在x和y方向上不是正方形吗?

谢谢。

2个回答

44
简而言之:是的。为了制作一个能够描述矩形像素相机的数学模型,您必须引入两个单独的焦距。我将引用常推荐的《学习OpenCV》(第373页),它对该部分进行了很好的介绍,并且如果您想要更多背景知识,我建议您获取该书:
“例如,焦距fx实际上是镜头的物理焦距和成像元素的大小sx的乘积(这应该是有意义的,因为sx具有像素每毫米的单位,而F具有毫米的单位,这意味着fx以所需的像素为单位)。… …但需要记住的是,sx和sy不能通过任何相机校准过程直接测量,而物理焦距F也不能直接测量。只有组合fx = F * sx和fy = F * sy可以在不拆卸相机并直接测量其组件的情况下得出。”

非常感谢,特别是对于“学习OpenCV”的推荐。 - binzhang
那么,如果我想使用F,并且从相机内参中有fx和fy可用,我们如何知道sx和sy的值? - Megha
2
这个说法实际上是错误和误导性的:“焦距fx(例如)实际上是镜头物理焦距和单个成像元素大小sx的乘积”。 fx和fy以像素为单位测量,因此正确的表达式是:fx [像素] = 焦距 [mm] / 成像元素长度 [mm/像素]。 也就是说,这是一个除法,而不是乘法。 很难相信这样的错误实际上出现在《学习OpenCV》一书中,但我没有副本来核对...(?)。 - Jose Luis Blanco
Google Books的预览确认了书中确实是这么写的。他们关于sx的定义显然是[像素/毫米]。@Megha:sx和sy的值可能由相机制造商提供。 - FvD
2
@JoseLuisBlanco 如果 sx = 10 像素/毫米,f = 35 毫米,则 sx*f = 35 毫米 * 10 像素/毫米 = 350 像素,这不是一个除法。 - WhatAMesh
@WhatAMesh 好的,我理解“sx”是一个像素的大小,也就是说,它是“sx = 每毫米像素数”的倒数,这也是上面答案中的意思。有了这个定义,一切都正确了。很好! - Jose Luis Blanco

0
是的。如果你的像素是正方形的,意味着像素的物理宽度和高度相同(例如3.45x3.45微米),那么fx = fy(例如fx = fy = 21000像素)。
但是,如果像素的宽度和高度不同,并且像素是矩形形状的(例如3.45x2.7微米),那么fx和fy将不同(例如fx = 21000像素,fy = 18000像素)。

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