前言
单目摄像头物体深度计算基础原理
传统的单目坐标转换公式为:
(
u
v
1
)
=
G
Z
(
f
x
s
c
x
0
f
y
c
y
0
0
1
)
(
R
11
R
12
R
13
t
x
R
21
R
22
R
23
t
y
R
31
R
32
R
33
t
z
)
(
X
Y
Z
1
)
\begin{pmatrix} u \\ v \\ 1 \end{pmatrix} = \frac{G}{Z} \begin{pmatrix} f_x & s & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} R_{11} & R_{12} & R_{13} & t_x \\ R_{21} & R_{22} & R_{23} & t_y \\ R_{31} & R_{32} & R_{33} & t_z \end{pmatrix} \begin{pmatrix} X \\ Y \\ Z \\ 1 \end{pmatrix}
uv1
=ZG
fx00sfy0cxcy1
R11R21R31R12R22R32R13R23R33txtytz
XYZ1
简化后,上述单目公式为:
影像坐标
=
(
畸变矩阵
G
/
深度
Z
)
∗
相机内参矩阵
K
∗
相机外参矩阵
[
R
∣
T
]
∗
世界坐标
影像坐标 =(畸变矩阵G/深度Z)* 相机内参矩阵K * 相机外参矩阵[R|T] * 世界坐标
影像坐标=(畸变矩阵G/深度Z)∗相机内参矩阵K∗相机外参矩阵[R∣T]∗世界坐标
公式表述了从世界坐标系转换到相机坐标系;从相机坐标系转换到图像平面坐标系;最后畸变校正,详细的单目测距原理见本人前博客。
双目摄像头测距原理
在双目摄像头系统中,两台相机共同工作,用于获取同一场景的两个视角图像。通过这两个视角的差异(视差),可以计算出场景中物体的深度信息,从而实现测距。具体来说:
- 假设左相机和右相机的内参矩阵为 K L K_L KL 和 K R K_R KR,外参矩阵分别为 [ R L ∣ t L ] [R_L | t_L] [RL∣tL] 和 [ R R ∣ t R ] [R_R | t_R] [RR∣tR]。
双目坐标解算方程
在双目摄像头中,假设目标点在世界坐标系为 ( X , Y , Z ) (X, Y, Z) (X,Y,Z) ,根据几何关系和标定信息,忽略畸变情况下,可以得到以下方程:
-
左、右相机视角的投影方程
(1)左相机视角的像素坐标:
( u L v L 1 ) = 1 Z K L [ R L ∣ t L ] ( X Y Z 1 ) \begin{pmatrix} u_L \\ v_L \\ 1 \end{pmatrix} = \frac{1}{Z} K_L [R_L | t_L] \begin{pmatrix} X\\ Y\\ Z \\ 1 \end{pmatrix} uLvL1 =Z1KL[RL∣tL] XYZ1
(2)右相机视角的像素坐标:
( u R v R 1 ) = 1 Z K R [ R R ∣ t R ] ( X Y Z 1 ) \begin{pmatrix} u_R \\ v_R \\ 1 \end{pmatrix} = \frac{1}{Z} K_R [ R_R | t_R ]\begin{pmatrix} X \\ Y \\ Z \\ 1 \end{pmatrix} uRvR1 =Z1KR[RR∣tR] XYZ1 左右相机距离(基线距离 B B B):左右摄像头光心的水平间距,由平移向量 t R − t L t_R-t_L tR−tL的模长决定。 -
同名点匹配、求解视差:
极线校正,通过匹配左右图像中的同名点(即在两个图像中表示同一物体的像素位置,常用角点或边缘),使图像行对齐( v L = v R v_L = v_R vL=vR),此时这些点的水平视差
d = u L − u R d = u_L - u_R d=uL−uR
图像匹配辅助理解样式,见本人另一篇博客–图像匹配:基于SIFT和FLANN的双视图匹配及极线绘制代码,网址:https://blog.youkuaiyun.com/qq_36112576/article/details/145880158 -
视差与深度关系:
通过相似三角形的几何关系,根据三角测量原理,公式:
B Z = d f \frac{B}{Z} = \frac{d}{f} ZB=fd
其中:
-
Z Z Z:目标物体的深度,表示物体到相机的距离(单位通常为米或毫米)。
-
f f f:相机的焦距(单位为像素)。可以通过相机的内部参数(如相机的成像系统特性)获得,双目测距中通常左右相机焦距相同。
-
B B B:基线距离,表示两台相机之间的距离(单位通常为米或毫米)。这是双目视觉系统中两个相机的物理间距。
-
d d d:视差,指的是同一物体在两幅图像中对应点之间的水平偏移量(单位为像素)。
因此视差 d d d 与物体的深度 Z Z Z之间存在反比关系:
Z = f ⋅ B d Z = \frac{f \cdot B}{d} Z=df⋅B
- 三维坐标解算方程:
基于视差 d = u L − u R d = u_L - u_R d=uL−uR,可以通过以下公式解算三维坐标:-
深度 ( Z ):根据视差公式 Z = f ⋅ B d Z = \frac{f \cdot B}{d} Z=df⋅B,计算获得。
-
水平坐标 ( X ):利用相机的内参和深度信息计算 :
X = ( u L − c L u ) ⋅ Z f L u X = \frac{(u_L - c_L^u) \cdot Z}{f_L^u} X=fLu(uL−cLu)⋅Z
其中 c L u c_L^u cLu 是左相机主点的水平坐标, f L u f_L^u fLu 是左相机的水平焦距。(结合最上面单目坐标公式内参矩阵理解) -
垂直坐标 ( Y ):类似地,计算垂直坐标:
Y = ( v L − c L v ) ⋅ Z f L v Y = \frac{(v_L - c_L^v) \cdot Z}{f_L^v} Y=fLv(vL−cLv)⋅Z
其中 c L v c_L^v cLv 是左相机主点的垂直坐标, f L v f_L^v fLv 是左相机的垂直焦距。
-
结论
通过左相机和右相机的内外参矩阵,以及通过图像中的视差 d d d,可以计算出场景中物体的三维坐标 ( X , Y , Z ) (X, Y, Z) (X,Y,Z)。这些公式基于相机的标定参数,考虑了相机的姿态和内外参,并通过视差与深度之间的关系实现了精确的测距。