📷 相机内参、外参、焦距及图像坐标计算的完整解析(超详细版)
📍 一、相机的内参和外参的详细含义
📌 ① 内参(Intrinsic Parameters)的含义
相机内参描述的是相机自身的光学特性,即相机在不考虑外部环境的情况下,将三维空间中的一个点如何精确地映射到相机传感器(图像平面)上。
内参矩阵(K)完整表示:
K = | fx s cx |
| 0 fy cy |
| 0 0 1 |
具体参数的详细含义:
-
焦距(fx, fy):
- 表示光学中心到图像传感器的距离,以像素为单位。
- fx 和 fy 分别表示图像在水平和竖直方向的放大倍数(像素/mm)。
- 一般情况下 fx ≈ fy。
-
主点(光学中心)(cx, cy):
- 图像坐标系的原点位置,通常位于图像中心附近。
-
像素倾斜系数(s):
- 通常为0,表示传感器的像素横竖完全垂直。
📌 ② 外参(Extrinsic Parameters)的含义
相机外参描述的是相机在世界坐标系(大地坐标系)中的位置与朝向,明确了三维世界中物体坐标与相机自身坐标之间的关系。
外参用矩阵 [R|t] 完整表示:
[R|t] = | r11 r12 r13 tx |
| r21 r22 r23 ty |
| r31 r32 r33 tz |
具体参数的详细含义:
-
旋转矩阵(R):
- 表示相机相对于世界坐标系的旋转关系(姿态)。
-
平移向量(t):
- 表示相机坐标系原点相对于世界坐标系原点的位置。
📍 二、焦距的详细作用
焦距(Focal Length)决定了:
- 拍摄视野(FOV)范围的大小
- 物体在图像中的成像比例(大小)
焦距类型 | 视野大小 | 成像特点 | 常见用途 |
---|---|---|---|
长焦距(数值大) | 视野窄 | 远处物体放大明显 | 人像特写、远距离拍摄 |
短焦距(数值小) | 视野宽 | 近处物体较小,边缘易变形 | 风景、广角镜头 |
焦距的数学关系为:
u = fx * (Xc/Zc) + cx
v = fy * (Yc/Zc) + cy
📍 三、已知大地参考系下物体坐标和相机内外参数,如何计算物体在图片上的坐标?
假设已知:
- 世界坐标系物体坐标:(Xw, Yw, Zw)
- 相机外参:旋转矩阵R、平移向量t
- 相机内参矩阵K
🚩 步骤①:世界坐标 → 相机坐标(外参转换)
首先利用外参(R, t)计算:
Xc = r11*Xw + r12*Yw + r13*Zw + tx
Yc = r21*Xw + r22*Yw + r23*Zw + ty
Zc = r31*Xw + r32*Yw + r33*Zw + tz
🚩 步骤②:相机坐标 → 图像坐标(内参转换)
利用内参矩阵K计算图像坐标(u,v):
u = fx * (Xc/Zc) + cx
v = fy * (Yc/Zc) + cy
(u,v)即为物体在图像上的坐标。
🚀 Python代码完整案例(可直接运行)
import numpy as np
# 相机内参矩阵 K
K = np.array([[800, 0, 320],
[0, 800, 240],
[0, 0, 1]])
# 相机外参 (旋转矩阵 R 和平移向量 t)
R = np.eye(3) # 相机无旋转
t = np.array([[0], [0], [-500]]) # 相机位于世界坐标系Z轴负方向500mm
# 世界坐标中物体坐标Pw
Pw = np.array([[100], [50], [100]])
# 世界坐标转相机坐标
Pc = np.dot(R, Pw) + t
# 相机坐标转图像坐标
uv = np.dot(K, Pc / Pc[2])
print("物体在图片上的坐标(u,v):", uv[:2].flatten())
📚 知识点快速总结
参数 | 含义 |
---|---|
内参 | 相机自身的光学参数(焦距、主点、倾斜) |
外参 | 相机在世界坐标中的位置与方向(旋转、平移) |
焦距 | 决定图像视野范围和物体大小 |
计算过程 | 世界坐标 → 相机坐标(外参);相机坐标 → 图像坐标(内参) |
✨ 以上为CSDN兼容的标准Markdown格式,复制后公式显示完全正常!