单目摄像头物体深度计算基础原理

embedded/2025/2/26 12:36:34/

三维空间物体表面点位与其在图像中对应点之间的相互关系,必须建立相机成像的几何模型,这些几何模型参数就是相机参数,而相机参数的求解就是相机标定

相机的参数矩阵包括内参外参
外参:决定现实坐标到摄像机坐标。摄像机的旋转平移属于外参,用于描述相机在静态场景下相机的运动,或者在相机固定时,运动物体的刚性运动。因此,在图像拼接或者三维重建中,就需要使用外参来求几幅图像之间的相对运动,从而将其转换到同一个坐标系下面。
内参:决定摄像机坐标到图像坐标。
畸变矩阵:镜头的映射无法做到直线射影变换,存在的误差需要畸变参数来描述。为易于理解,以下公式假设完美状态下,不存在该项。

  • 内参数矩阵 ( K ):
    K = ( f x s c x 0 f y c y 0 0 1 ) K = \begin{pmatrix} f_x & s & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{pmatrix} K= fx00sfy0cxcy1
    其中:

    • f x , f y f_x, f_y fx,fy:相机在 x x x y y y 方向的焦距(单位:像素)。
    • c x , c y c_x, c_y cx,cy:相机的主点(光轴与图像平面交点在图像中的位置)。
    • s s s:坐标轴倾斜参数,理想情况为0。
  • 外参数矩阵 ( [R | T] ):
    [ R ∣ T ] = ( r 11 r 12 r 13 t x r 21 r 22 r 23 t y r 31 r 32 r 33 t z ) [R | T] = \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} [RT]= r11r21r31r12r22r32r13r23r33txtytz
    其中:

    • R R R 为旋转矩阵,描述相机坐标系相对于世界坐标系的旋转。
    • T = ( t x , t y , t z ) T = (t_x, t_y, t_z) T=(tx,ty,tz) 为平移向量,描述相机坐标系原点相对于世界坐标系原点的平移。

公式推导:

为了通过相机模型测距,我们可以通过 图像坐标与世界坐标的转换 来推导出目标物体的深度(Z轴):

  1. 假设目标物体的世界坐标为 P w o r l d = ( X , Y , Z ) T P_{world} = (X, Y, Z)^T Pworld=(X,Y,Z)T,并且它在图像平面上的投影点为 p i m a g e = ( u , v ) p_{image} = (u, v) pimage=(u,v)

  2. 相机的成像过程可以表示为:
    λ ( u v 1 ) = K [ R ∣ T ] ( X Y Z 1 ) \lambda \begin{pmatrix} u \\ v \\ 1 \end{pmatrix} = K [R | T] \begin{pmatrix} X \\ Y \\ Z \\ 1 \end{pmatrix} λ uv1 =K[RT] XYZ1
    其中, λ \lambda λ是比例因子(与深度 Z相关)。
    方程中,每个图像点 ( u , v ) (u, v) (u,v)对应一条三维射线,需额外信息确定具体深度。

  3. 通过矩阵乘法,得到:
    ( u v 1 ) = 1 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{1}{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 =Z1 fx00sfy0cxcy1 R11R21R31R12R22R32R13R23R33txtytz XYZ1

  4. 通过图像坐标 ( u , v ) (u, v) (u,v)和世界坐标的关系,我们可以推导出物体的 深度 ( Z )
    Z = f x ⋅ ( X ⋅ r 13 + Y ⋅ r 23 + Z ⋅ r 33 + t z ) X ⋅ r 11 + Y ⋅ r 21 + Z ⋅ r 31 + t x Z = \frac{f_x \cdot \left( X \cdot r_{13} + Y \cdot r_{23} + Z \cdot r_{33} + t_z \right)}{X \cdot r_{11} + Y \cdot r_{21} + Z \cdot r_{31} + t_x} Z=Xr11+Yr21+Zr31+txfx(Xr13+Yr23+Zr33+tz)
    在这里插入图片描述

参数定义:

  • Z Z Z:目标物体的实际距离(即深度或相机到物体的距离)。
  • f x , f y f_x, f_y fx,fy:相机的焦距(在像素单位下)。
  • c x , c y c_x, c_y cx,cy:图像平面的主点位置(通常是图像的中心)。
  • ( u , v ) (u, v) (u,v):物体在图像中的像素坐标。
  • ( X , Y , Z ) (X, Y, Z) (X,Y,Z):目标物体在世界坐标系中的三维坐标。
  • R R R:相机的旋转矩阵,描述相机坐标系相对于世界坐标系的旋转。
  • T = ( t x , t y , t z ) T = (t_x, t_y, t_z) T=(tx,ty,tz):相机的平移向量,描述相机坐标系与世界坐标系之间的平移。

求解方式:

  1. 已知平面约束(如地面)
    假设目标点位于 ( Z = 0 ) 平面,代入投影方程后,方程简化为:
    { u = f x ( r 11 X + r 12 Y + t x ) + c x ( r 31 X + r 32 Y + t z ) r 31 X + r 32 Y + t z v = f y ( r 21 X + r 22 Y + t y ) + c y ( r 31 X + r 32 Y + t z ) r 31 X + r 32 Y + t z \begin{cases} u = \frac{f_x (r_{11}X + r_{12}Y + t_x) + c_x (r_{31}X + r_{32}Y + t_z)}{r_{31}X + r_{32}Y + t_z} \\ v = \frac{f_y (r_{21}X + r_{22}Y + t_y) + c_y (r_{31}X + r_{32}Y + t_z)}{r_{31}X + r_{32}Y + t_z} \end{cases} {u=r31X+r32Y+tzfx(r11X+r12Y+tx)+cx(r31X+r32Y+tz)v=r31X+r32Y+tzfy(r21X+r22Y+ty)+cy(r31X+r32Y+tz)
    解法:通过线性代数解方程组,直接求出 X, Y。
    应用场景:自动驾驶(地面目标定位)、AR(平面跟踪)。

  2. 多视角观测(立体视觉)
    原理:两个及以上相机(已知相对位姿)观测同一目标,通过三角化计算唯一三维坐标。
    公式:联立多视角投影方程,求解超定方程组。
    示例:双目摄像头或运动中的单目相机(SLAM)。

  3. 深度传感器辅助(RGB-D相机)
    通过激光雷达或结构光测得每个像素的深度值 ( Z ) , 通过深度获取每个像素的深度值,代入投影方程反推 ( X ) 和 ( Y ):
    X = ( u − c x ) ⋅ Z f x , Y = ( v − c y ) ⋅ Z f y X = \frac{(u - c_x) \cdot Z}{f_x}, \quad Y = \frac{(v - c_y) \cdot Z}{f_y} X=fx(ucx)Z,Y=fy(vcy)Z

  4. 几何约束(已知物体尺寸或距离)
    已知两点的实际距离 ( L ),结合投影方程与距离公式:
    ( X 1 − X 2 ) 2 + ( Y 1 − Y 2 ) 2 + ( Z 1 − Z 2 ) 2 = L \sqrt{(X_1 - X_2)^2 + (Y_1 - Y_2)^2 + (Z_1 - Z_2)^2} = L (X1X2)2+(Y1Y2)2+(Z1Z2)2 =L

解释:

这个公式利用了相机的 内外参数矩阵,它描述了如何将物体的世界坐标投影到相机图像平面。在这个公式中,物体的深度 Z Z Z由物体在图像平面中的位置(像素坐标 u , v u, v u,v)以及相机的参数(焦距、内外参数矩阵)决定。通过将物体的图像坐标与相机的内外参数矩阵结合,我们可以推算出物体的实际距离。

总结:

必要条件:单目需场景约束(平面假设、已知尺寸等);多目或深度传感器可直接求解。

公式核心:利用相机参数将图像点映射到三维射线,通过约束确定唯一交点。

实际建议:根据场景选择合适方法(如自动驾驶用多传感器融合,AR用平面跟踪)。


http://www.ppmy.cn/embedded/167263.html

相关文章

python unzip file

要在 Python 中解压文件并显示进度,我们需要在解压过程中跟踪文件的提取进度。由于 zipfile 模块本身不直接支持进度显示,我们可以通过手动计算并使用 tqdm 库来显示进度条。 安装 tqdm 首先,确保你已经安装了 tqdm 库,用于显示…

MAC 安装Tensorflow简单方法

MacOS M1 pro安装tensorflow 1、环境配置(必需) PYTHON版本:3.11.0,python采用homebrew安装。(已有python或更高版本可跳过,更高版本未经过测试,题主自认为可行) brew install pyt…

将CUBE或3DL LUT转换为PNG图像

概述 在大部分情况下,LUT 文件通常为 CUBE 或 3DL 格式。但是我们在 OpenGL Shader 中使用的LUT,通常是图像格式的 LUT 文件。下面,我将教大家如何将这些文件转换为 PNG 图像格式。 条形LUT在线转换(不是8x8网络)&am…

DeepSeek 助力 Vue 开发:打造丝滑的滚动动画(Scroll Animations)

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…

1.2部署可视化工具es head:9100

ElasticSearch Head是集群管理、数据可视化、增删查改、查询语句可视化工具 1.下载插件 插件下载地址: https://github.com/mobz/elasticsearch-head node下载地址: wget https://registry.npmmirror.com/-/binary/node/latest-v14.x/node-v14.19.3-linux-x64.tar.gz 2.安装插…

【Qt】可爱的窗口关闭确认弹窗实现

文章目录 ​​​实现思路界面构建交互逻辑实现颜色渐变处理圆形部件绘制 代码在主窗口的构造函数中创建弹窗实例ExitConfirmDialog 类代码ColorCircleWidget 类代码 今天在Qt实现了这样一个可互动的窗口(上图由于录屏工具限制没有录制到鼠标) ​​​实现…

SmartMediakit之音视频直播技术的极致体验与广泛应用

引言 在数字化时代,音视频直播技术已经深入到各个行业和领域,成为信息传递和交流的重要手段。视沃科技自2015年成立以来,一直致力于为传统行业提供极致体验的音视频直播技术解决方案,其旗下的大牛直播SDK凭借强大的功能和卓越的性…

Vue进阶之AI智能助手项目(二)——项目评审与架构设计

AI智能助手项目 基于Vue的最佳实践main.tsApp.vue主应用给子应用下发功能语言language,theme设置及appStore状态管理状态管理router路由index.tspermission.ts基于Vue的最佳实践 src目录概览 api 接口,基于接口可以做 状态处理,interceptorassets/public 静态资源component…