camera - 水平、垂直和对角线视野之间的关系

标签 camera computer-vision video-capture fieldofview

这些值之间是否存在数学关系?如果我知道 hFOV 和 vFOV,我可以计算对角 FOV 而不涉及焦距等其他值吗?

我的第一个想法是使用毕达哥拉斯定理,但也许这是错误的。

最佳答案

感兴趣的物理量是传感器尺寸和焦距。在针孔相机模型中,后者是相机中心与像平面之间的距离。因此,如果用 f 表示焦距(单位为毫米),W 和 H 分别表示图像传感器的宽度和高度(单位为毫米),并假设焦轴与图像平面正交,通过简单的三角函数可以得到:

FOV_Horizontal = 2 * atan(W/2/f) = 2 * atan2(W/2, f)  radians
FOV_Vertical   = 2 * atan(H/2/f) = 2 * atan2(H/2, f)  radians
FOV_Diagonal   = 2 * atan2(sqrt(W^2 + H^2)/2, f)    radians

请注意,如果您有传感器尺寸和水平或垂直视场,您可以求解 f 的前两个方程之一并将其代入第三个方程以获得对角视场。

像往常一样,当焦距是通过相机校准来估计并以像素表示时,上述表达式需要进行一些调整。

用 K 表示 3x3 相机矩阵,相机框架的原点位于相机中心(焦点),X 轴从左到右,Y 轴从上到下,Z 轴朝向场景。令 Wp 和 Hp 分别为图像的宽度和高度(以像素为单位)。

  1. 在最简单的情况下,焦轴与图像平面正交 (K12 = 0),像素为正方形 (K11 = K22),主点位于图像中心 (K13 = Wp/2 ;K23 = 马力/2)。然后应用与上面相同的方程,将 W 替换为 Wp,将 H 替换为 Hp,将 f 替换为 K11。

  2. 情况比上面的情况更复杂,但主点偏离中心。然后只需将每个 FOV 角度的两侧相加即可。因此,例如:

    FOV_Horizo​​ntal = atan2(Wp/2 - K13, K11) + atan2(Wp/2 + K13, K11)

  3. 如果像素不是正方形,则相同的表达式适用于 FOV_vertical,但使用 K22 和 Hp 等。对角线有点棘手,因为您需要将图像高度“转换”为与宽度。为此,使用“像素长宽比”PAR=K22/K11,以便:

    FOV_Diagonal = 2 * atan2(sqrt(Wp^2 + (Hp/PAR)^2)/2, K11)

关于camera - 水平、垂直和对角线视野之间的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31257664/

相关文章:

Android 媒体播放器 - 从网络流播放

iphone - 第一代 iPhone 摄像头如何录像?

iphone - 存储超过 100,000 个整数(表示图像增量数据)的好方法是什么?

ios - 从 Photos.app 获取最后一张图片?

opencv MSER.detectRegions() 与 findContours() : what's the difference?

opencv - 在视频中跟踪眼瞳

java - 为什么相机在 Android 5 中无法使用?

java - 图像特征提取

python - 每 10 秒从视频文件中捕获一帧

c++ - 如何从网络摄像头获取原始 mjpg 流