You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于相机内参矩阵与目标深度计算像素空间分辨率(mm)

如何通过相机内参K和深度计算像素的空间分辨率?

问题描述

已知描述像素单位焦距与x、y偏移量的相机内参矩阵K,以及图像中某像素的深度(单位:mm),能否计算出图像中每个像素的空间分辨率(单位:mm)?想了解单个方形像素在真实空间中对应的尺寸,例如在25mm深度下,1个方形像素可能对应10mm×10mm的真实区域。

结论

完全可以计算,你的思路方向正确,但可以通过直接推导简化计算过程,无需求内参矩阵的逆。

推导过程

核心投影公式修正

先修正针孔相机投影的标准齐次坐标公式:
[u, v, 1] = (1/z) * K * [x, y, z]
其中标准3x3内参矩阵为:
K = np.asarray([[f_x, 0, c_x], [0, f_y, c_y], [0, 0, 1]])

  • f_x/f_y:x/y方向的焦距(单位:像素)
  • c_x/c_y:主点坐标(图像中心偏移,单位:像素)
  • (x,y,z):真实空间点坐标(单位:mm,z为深度)
  • (u,v):图像像素坐标

从公式反推空间坐标与像素的关系:

x = z * (u - c_x) / f_x
y = z * (v - c_y) / f_y

计算像素空间分辨率

直接计算相邻像素的空间差值:

  • 水平方向:当u增加1、v不变时,空间x的变化量为:
    Δx = z * [(u+1 - c_x)/f_x - (u - c_x)/f_x] = z / f_x
  • 垂直方向:当v增加1、u不变时,空间y的变化量为:
    Δy = z * [(v+1 - c_y)/f_y - (v - c_y)/f_y] = z / f_y

单个像素对应的真实空间尺寸为 Δx × Δy:

  • 若为方形像素(相机传感器像素为方形,此时f_x = f_y),则尺寸为 (z/f_x) × (z/f_x) 平方毫米。

与你的思路对比

你通过内参逆矩阵计算相邻像素空间差的思路是正确的,本质和上述推导结果一致,但直接推导无需计算矩阵逆,效率更高。

代码实现示例

import numpy as np

# 示例相机内参(焦距为像素单位)
f_x = 1000.0
f_y = 1000.0
c_x = 500.0
c_y = 500.0
K = np.array([[f_x, 0, c_x], [0, f_y, c_y], [0, 0, 1]])

# 目标像素的深度(单位:mm)
z = 25.0

# 计算空间分辨率
delta_x = z / f_x
delta_y = z / f_y

print(f"水平分辨率:{delta_x} mm/像素")
print(f"垂直分辨率:{delta_y} mm/像素")
print(f"单个方形像素对应真实区域:{delta_x * delta_y} 平方毫米")

输出示例

水平分辨率:0.025 mm/像素
垂直分辨率:0.025 mm/像素
单个方形像素对应真实区域:0.000625 平方毫米

注意事项

  • 若f_x != f_y,说明像素非严格方形,需分别计算水平、垂直方向的分辨率
  • 深度z必须是对应像素的真实深度(若为深度图,每个像素的z不同,分辨率会随深度变化)
  • 内参K的焦距必须是像素单位,若为物理焦距(mm),需先转换:f_x = (物理焦距 × 图像宽度) / 传感器宽度,f_y同理

内容的提问来源于stack exchange,提问作者BeginnersMindTruly

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 21:37:36