双目摄像头物体测距定位基础原理

前言

单目摄像头物体深度计算基础原理
传统的单目坐标转换公式为:

( 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相机外参矩阵[RT]世界坐标
公式表述了从世界坐标系转换到相机坐标系;从相机坐标系转换到图像平面坐标系;最后畸变校正,详细的单目测距原理见本人前博客。

双目摄像头测距原理

在这里插入图片描述

在双目摄像头系统中,两台相机共同工作,用于获取同一场景的两个视角图像。通过这两个视角的差异(视差),可以计算出场景中物体的深度信息,从而实现测距。具体来说:

  • 假设左相机和右相机的内参矩阵为 K L K_L KL K R K_R KR,外参矩阵分别为 [ R L ∣ t L ] [R_L | t_L] [RLtL] [ R R ∣ t R ] [R_R | t_R] [RRtR]

双目坐标解算方程

在双目摄像头中,假设目标点在世界坐标系为 ( X , Y , Z ) (X, Y, Z) (X,Y,Z) ,根据几何关系和标定信息,忽略畸变情况下,可以得到以下方程:

  1. 左、右相机视角的投影方程
    (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[RLtL] 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[RRtR] XYZ1 左右相机距离(基线距离 B B B):左右摄像头光心的水平间距,由平移向量 t R − t L t_R-t_L tRtL的模长决定。

  2. 同名点匹配、求解视差
    极线校正,通过匹配左右图像中的同名点(即在两个图像中表示同一物体的像素位置,常用角点或边缘),使图像行对齐( v L = v R v_L = v_R vL=vR),此时这些点的水平视差
    d = u L − u R d = u_L - u_R d=uLuR
    图像匹配辅助理解样式,见本人另一篇博客–图像匹配:基于SIFT和FLANN的双视图匹配及极线绘制代码,网址:https://blog.youkuaiyun.com/qq_36112576/article/details/145880158

  3. 视差与深度关系
    通过相似三角形的几何关系,根据三角测量原理,公式:
    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=dfB

  1. 三维坐标解算方程
    基于视差 d = u L − u R d = u_L - u_R d=uLuR,可以通过以下公式解算三维坐标:
    • 深度 ( Z ):根据视差公式 Z = f ⋅ B d Z = \frac{f \cdot B}{d} Z=dfB,计算获得。

    • 水平坐标 ( 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(uLcLu)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(vLcLv)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)。这些公式基于相机的标定参数,考虑了相机的姿态和内外参,并通过视差与深度之间的关系实现了精确的测距。

实现效果:http://v.youku.com/v_show/id_XMTU2Mzk0NjU3Ng==.html 如何在你的电脑上运行这个程序? 1,它需要cvblobslib这一个opencv的扩展库来实现检测物体与给物体画框的功能,具体安装信息请见: http://dsynflo.blogspot.com/2010/02/cvblobskib-with-opencv-installation.html,当你配置好cvblobslib之后,你可以用这一的程序进行测试:http://dl.dropbox.com/u/110310945/Blobs%20test.rar 2,视频中两个摄像头之间的距离是6cm,你可以根据你摄像头的型号,来选择合适的距离来达到最好的效果。 3,在进行测距之前,首先需要对摄像头进行标定,那么如何标定呢? 在stdafx.h中把"#define CALIBRATION 0"改成 “#define CALIBRATION 1”表示进行标定,标定之后,你就可以在工程目录下的"CalibFile" 文件夹中得到标定信息的文件。如果标定效果还不错,你就可以吧"#define CALIBRATION " 改成0,以后就不需要再标定,直接使用上一次的标定信息。你还需要把"#define ANALYSIS_MODE 1"这行代码放到stdafx.h中。 4,视频中使用的是10*7的棋牌格,共摄录40帧来计算摄像头的各种参数,如果你像使用其他棋盘格,可以在 "StereoFunctions.cpp"文件中修改相应参数。 5,如果你无法打开摄像头,可以在 "StereoGrabber.cpp"文件中修改代码“cvCaptureFromCAM(index)”中index的值。 6,About computing distance: it interpolates the relationship between depth-value and real-distance to third degree polynomial. So i used excel file "interpolation" for interpolation to find k1 to k4, you should find your own value of these parameters. 7,你可以通过调整控制窗口中各个参数的滑块,从而来得到更好的视差图。 8,在目录下的”distance“文件夹中,有计算距离信息的matlab代码。 9,如果你想了解基本的理论,可以看一下这个文档:http://scholar.lib.vt.edu/theses/available/etd-12232009-222118/unrestricted/Short_NJ_T_2009.pdf 视频中环境:vs2008,opencv2.1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值