【3D视觉原理】2-3D传感器原理

article/2025/9/14 18:07:50

文章目录

  • 内容概要
  • 3D光学测量方法概述
    • 被动测距
      • 单目立体视觉(精度不高)
        • 聚焦法
        • 离焦法
      • 双目立体视觉(精准)
      • 多目立体视觉(更精准)
    • 主动测距
      • 结构光法
        • 光点法
        • 光条法
        • 光面法
      • 飞行时间法(ToF)
        • 脉冲激光
        • 连续激光
  • 针孔相机模型
    • 透镜模型
    • 针孔模型
    • 成像平面
    • 传感器平面
    • 传感器平面物理坐标&物体空间物理坐标
    • 图像像素坐标(整数)转为传感器平面物理坐标
    • 深度图数据转为点云数据
    • 作业
  • 双目3D视觉原理
    • 如果只有RGB图,如何得到距离信息?
      • 从视差得到3D坐标
        • 视差匹配查找
        • 视差匹配查找示例
          • 要求
          • 搜索时用到的图像特性。
          • 搜索方案
          • 匹配度如何计算?
        • 视差图
          • 为什么点云图中距离Z是离散的?
        • OpenCV 视差计算(效果更好)
    • 双目视觉计算作业
      • 作业提示
    • 双目视觉缺点 - 不适用于纹理单调(光滑)场景
    • 双目视觉改进 - 投影特殊图案到光滑物体表面
  • 结构光3D相机
    • 点光源
    • 线光源
    • 结构光编码
  • TOF 3D成像原理
    • 脉冲间隔测量法
      • 直接飞行时间测量(DTOF, Direct ToF)
        • 脉冲飞行时间(pToF,PluseToF)
    • 幅度调制相位测量法
      • 间接飞行时间测量(ITOF, Indirect ToF)
        • 连续波飞行时间(cwToF,Continuous Wave ToF)
          • 如何测量相位差?
        • 模糊问题
          • 双频去模糊
    • 频率调制的相干测量法
      • 基于条纹投影的3D成像
        • 正弦亮度条纹
    • ToF平面弯曲问题 - 像素到镜头距离->物体与像平面距离
  • ToF Vs 结构光
  • RGB-D 融合
    • RGB-D 融合流程
    • 深度相机三维点云坐标映射到RGB二维像素坐标
      • Case1:旋转+平移
      • Case2:只平移不旋转(深度相机与RGB相机平行)
    • RGB-D 融合结果
  • 镜头畸变矫正
    • 镜头畸变矫正流程
    • 像素坐标修正
    • 基于Opencv镜头校准
        • 平面弯曲问题(深度相机得到的深度d ≠ 物体到相机的距离Z)
  • 软件安装
  • TOF深度相机数据到点云转换
    • 深度图-TOF 3D相机数据中距离Z的计算关系
    • 深度图-TOF 3D相机光源位置和物体距离的关系
  • 深度图和点云的转换代码示例
  • 点云重投影到深度图
    • 遮挡 & 透射
  • 作业

内容概要

3D光学测量方法概述
针孔相机模型.
双目3D视觉原理
结构光3D成像原理
TOF 3D成像原理
图像畸变与矫正
RGB-D融合概述
TOF深度相机数据到点云转换
深度图-TOF 3D相机数据中距离Z的计算关系
深度图-TOF 3D相机光源位置和物体距离的关系
点云重投影到深度图

3D光学测量方法概述

在这里插入图片描述

被动测距

在这里插入图片描述

单目立体视觉(精度不高)

聚焦法

利用相机焦距可变的特性,变化焦距使被测量物体处于聚焦位置,然后利用成像公式计算出被测量物体距离相机的距离。

离焦法

不需要被测量物体处于焦距上,而是根据标定好的离焦模型计算物体与相机之间的距离。

双目立体视觉(精准)

在两个视点观察同一个场景,然后利用匹配算法计算两个图像像素的位置偏差进行3D测距。

多目立体视觉(更精准)

对双目立体视觉的扩展,多个视点观察同一个场景,进行多次匹配计算实现距离测量。

主动测距

在这里插入图片描述

结构光法

光点法

光条法

光面法

飞行时间法(ToF)

脉冲激光

连续激光

针孔相机模型

透镜模型

在这里插入图片描述

针孔模型

在这里插入图片描述

成像平面

在这里插入图片描述

传感器平面

在这里插入图片描述

传感器平面物理坐标&物体空间物理坐标

在这里插入图片描述
在这里插入图片描述

图像像素坐标(整数)转为传感器平面物理坐标

图像像素坐标:图像的左上角为原点。
传感器平面物理坐标:坐标原点(光心)在传感器平面原点。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

Z可以从深度图获取。

深度图数据转为点云数据

在这里插入图片描述

作业

在这里插入图片描述

双目3D视觉原理

前面可以看到,如果有每个像素点对应的物体的距离信息Z,则可以通过针孔相机模型,计算对应物体的三维坐标(X,Y,Z)。

作业中的距离信息Z是从深度图中获取的。

如果只有RGB图,如何得到距离信息?

从视差得到3D坐标

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

Z Z Z Δ d \Delta d Δd成反比,这与人眼实际观察一样,物体离人眼越远,视差越小。

在这里插入图片描述

视差匹配查找

左图偏右,右图偏左。

在这里插入图片描述

视差匹配查找示例

在这里插入图片描述

要求

计算左图像(200,100)位置图像在右图中的位置。

搜索时用到的图像特性。

左右图像中同一物体对应的纵坐标相同,仅仅横坐标不同,并且右图像中物体"偏左"移动。

假设左右图像对应像素的水平偏移不超过30像素上述特性和假设帮助降低搜索的难度。

搜索方案

在右图中,从(200,100)位置开始搜索,依次检查右图位置(200,100)、(200-1.100)、 (200-2.100)…(200-30.100)的图像,看哪一个位置和左图(200,100)位置图像匹配度最高。

假设右图(200-d,100)位置匹配度最高,这就意味着在左图(200,100)处像素对应的物体在左右眼图像中的视差为d。

匹配度如何计算?

思想:差别通过像素的RGB3通道的色彩差的绝对值之和表示,该值越小,匹配程度越高。

为了提高匹配的准确性,我们需要匹配左图以(200,100)为中心的一个窗口内所有的像素,计算该窗口内每个像素和右图搜索位置对应窗口内所有像素的色彩差的绝对值的和(SAD) ,作为匹配度指标f(d),如右边公式所示

注意:公式中窗口尺寸参数W根据图像特性设置,比如这里的例子可以设W=2。

左图(x, y)位置像素和右图(x,y, d)位置像素的差异计算公式(SAD):

f ( x , y , d ) = ∑ d x W = − W ∑ d y W = − W ∣ I L ( x + d x , y + d y ) − I R ( x − d + d x , y + d y ) ∣ f(x,y,d)=\sum_{d_x}^{W}=-W\sum_{d_y}^{W}=-W|I_L(x+dx, y+dy)-I_R(x-d+dx, y+dy)| f(x,y,d)=dxW=WdyW=WIL(x+dx,y+dy)IR(xd+dx,y+dy)

其中

找到使得 f ( x , y , d ) f(x,y,d) f(x,y,d)最小的位置。

视差图

在这里插入图片描述

最右边图即为使用SAD算法得到的视差图,与深度图很像。

边缘匹配效果不好,因为对于物体左图看到的比右图看到的多,两张图片的视野范围不同,所以边缘匹配效果不好。

在这里插入图片描述

为什么点云图中距离Z是离散的?

两张图的分辨率比较小,因为计算视差时,视差都是整数,所以根据视差计算出的距离Z也是整数,所以距离Z是离散的。

OpenCV 视差计算(效果更好)

在这里插入图片描述

双目视觉计算作业

在这里插入图片描述

作业提示

在这里插入图片描述

双目视觉缺点 - 不适用于纹理单调(光滑)场景

适用于纹理丰富的场景,不适用于单调缺乏纹理的场景。

因为双目视觉根据视觉特征进行图像匹配,所以对于缺乏视觉特征的场景(如天空、白墙、沙漠等)会出现匹配困难甚至匹配失败,无法做像素级匹配。

在这里插入图片描述

双目视觉改进 - 投影特殊图案到光滑物体表面

在这里插入图片描述

结构光3D相机

点光源

在这里插入图片描述

线光源

在这里插入图片描述

结构光编码

在这里插入图片描述

TOF 3D成像原理

飞行时间法采用雷达测距的原理,通过测量光波从光源发出并经被测物体反射后回到传感器所需的时间,就可以获得距离信息。

在这里插入图片描述

注:一般光源和TOF相机镜头尽可能靠近,这种情况下,测量的光线飞行距离大约是物体到镜头距离的1/2,计算方便。

滤光片:一般ToF相机发射的是红外信号,滤光片是为了减少外部光源的干扰。

脉冲间隔测量法

在这里插入图片描述

时间差模块同时接收脉冲激光源直接发射的激光和经过光电转换的反射光,测量发射脉冲和接收脉冲的时间差。

直接飞行时间测量(DTOF, Direct ToF)

脉冲飞行时间(pToF,PluseToF)

思想:测量脉冲时间差
方法:利用方波脉冲间隔 或 超声波测量时间。

在这里插入图片描述

计算公式:时延(发送信号与接收信号时间差) Δ t \Delta t Δt,光速 c c c,被测距离 d d d,关系为 d = 1 2 c Δ t d=\frac {1}{2} c \Delta t d=21cΔt

问题:需要精确测量上升沿时间差,实际使用时,因为接收距离、接收脉冲失真等影响,接收传感器的上升沿变形(并不是标准的方波),导致很难检测接收上升沿,所以时间差测量不准确,进而导致距离计算误差大。

改进1:将测量上升沿时间差改为测量积分值。使用简单的积分电路甚至一个电容就可以计算得到。

在这里插入图片描述

改进2:为了提高精度,经常使用多个脉冲重复测量,求平均得到测量结果。

幅度调制相位测量法

思想:测量相位差
方法:利用幅度调制的连续波相位差测量时间。

在这里插入图片描述

间接飞行时间测量(ITOF, Indirect ToF)

思想:测量时间差。
方法:利用连续波相位差测量时间。

连续波飞行时间(cwToF,Continuous Wave ToF)

在这里插入图片描述

系数 a ∈ ( 0 , 1 ] a\in(0,1] a(0,1](已知); w w w调制信号频率(已知),一般是10m~100m;

ϕ \phi ϕ指飞行时间带来的相移量(待测量)。

F F F 光调制信号的频率。

如何测量相位差?

在这里插入图片描述

θ \theta θ:参考信号与发送信号固定的相移。(已知,且有多个参考信号)
ϕ \phi ϕ:接收信号的相位差。(未知)
a a a:接收信号的强度。(未知)

脉冲时间差的方法只需要计算积分即可,相位差的方法需要计算4个相关值才能得到结果,但是也因为这个原因相位差方法得到的结果更好。

相关器相当于一个带通滤波器,滤波器的中心频率就是光信号的调制频率,在一定程度上可以过滤掉干扰信号,可以提高接收信号的质量。

模糊问题

无论是时间差还是相位差,在实际使用时,都有模糊问题。以下以计算相位差获得距离方法为例说明模糊问题。

模糊问题:相位差超过一个周期。但是通过以上介绍的方法和公式只能计算一个周期内的相位差。一般物体离相机的距离比较远时会出现模糊问题。

在这里插入图片描述

如果多个物体距离相机的距离相差整数倍的 c 2 F \frac {c}{2F} 2Fc的距离,那么通过公式计算出的相位差是一样的,这其实是错误的计算结果,也就是,不能只通过公式计算唯一确定物体离相机的距离。

一种方式是降低调制频率F,当F很小时,离相机近的物体反射的信号正常,离相机远的物体反射的信号会很弱,进而区别出距离相机不同距离的物体。但是这种方式的缺点是频率F越低,相位测量的分辨率也低,导致距离测量准确度不高,想提高准确率,就得增大F,又导致模糊问题严重,所以这种方式不可行。

双频去模糊

在这里插入图片描述

两种频率分别测量出不同可能距离分别为 d 1 + N D 1 d_1+ND_1 d1+ND1 d 2 + N D 2 d_2+ND_2 d2+ND2,两种可能距离中一定能匹配到相同位置(可能有多个),这个位置就是物体的真实距离。

但即使是双拼测试,也会匹配出多个相同位置,只是相较单频率测试多个相同位置间的距离会更大,更容易通过信号的强弱判断出物体的远近,得到更精确的结果,一定程度上解决模糊度问题。

频率调制的相干测量法

思想:测量高度差。
实现:利用不含物体(校准平面)时的条纹相位和含物体时接收信号条纹相位对比得出相位差,相位差反映了相对高度变化。

基于条纹投影的3D成像

正弦亮度条纹

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

ToF平面弯曲问题 - 像素到镜头距离->物体与像平面距离

在这里插入图片描述

ToF Vs 结构光

在这里插入图片描述

RGB-D 融合

方法:RGB+Depth,将RGB图色彩映射到深度图,为从深度相机得到的每个点云“染色”。
目的:使得后续应用计算过程中可以使用RGB算法和RGB现有的一些成果。

RGB-D 融合流程

在这里插入图片描述

点云平移旋转是为了将深度相机看到的图像旋转为RGB相机看到的图像。

深度相机三维点云坐标映射到RGB二维像素坐标

Case1:旋转+平移

在这里插入图片描述

通常将上述公式计算出的三维向量中的Z方向的值 λ \lambda λ作为归一化值,则X方向和Y方向归一化后得到 ( u R G B , v R G B ) (u^{RGB},v^{RGB}) (uRGB,vRGB)即为深度相机三维点云坐标映射到RGB相机的像素坐标。

Case2:只平移不旋转(深度相机与RGB相机平行)

在这里插入图片描述

RGB-D 融合结果

在这里插入图片描述

镜头畸变矫正

在这里插入图片描述

镜头畸变矫正流程

在这里插入图片描述

像素坐标修正

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

基于Opencv镜头校准

在这里插入图片描述

角点粗检测:grap表示原始图片,(7,6)表示7行6列角点。

角点精检测:检测结果中的像素坐标不是整数级而是亚像素级的坐标,比粗检测的结果更准确。

计算矫正模型参数:结果总mtx为内参矩阵,dist为失真参数向量。

图像矫正:img原图。

在这里插入图片描述

平面弯曲问题(深度相机得到的深度d ≠ 物体到相机的距离Z)

深度相机得到的深度d:像素到镜头的距离(视线“射线”)。

物体到相机的距离z:物体垂直于相机平面的距离。

d修正为z: Z = d c o s ( γ ) , γ = t a n − 1 r f Z=dcos(\gamma), \gamma=tan^{-1} \frac {r}{f} Z=dcos(γ),γ=tan1fr

在这里插入图片描述

软件安装

在这里插入图片描述

TOF深度相机数据到点云转换

在这里插入图片描述

深度图-TOF 3D相机数据中距离Z的计算关系

在这里插入图片描述

深度图-TOF 3D相机光源位置和物体距离的关系

在这里插入图片描述

深度图和点云的转换代码示例

在这里插入图片描述

点云重投影到深度图

在这里插入图片描述

遮挡 & 透射

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

腐蚀滤波会使得整张图偏近。

作业

在这里插入图片描述

在这里插入图片描述


http://chatgpt.dhexx.cn/article/BTlawPRH.shtml

相关文章

Xcode Cloud

一、使用Xcode Cloud 的要求 (1)开发者账户要求 已加入Apple Developer Program向xcode加入Apple IDApp Store Connect上有app 记录或者可以创建一个app记录 (2)Project和workspace要求 Project或者workspace使用Xcode项目使用…

使用Xcode13进行Swift开发2

使用Xcode13进行Swift开发2 1.应用功能1.1 UIScreen与systemName1.2 struct,ScrollView,padding,ForEach和创建列表1.3 GeometryReader1.4 list,combine 使用Xcode13进行Swift开发https://blog.csdn.net/gavinliu266/article/details/126407896 Monterey…

Xcode简明教程(使用Xcode编写C++语言程序)

Xcode 是由Apple官方开发的IDE,支持C、C++、Objective-C、Swift等,可以用来开发 Mac OS X 和 iOS 上的应用程序。Xcode使用LLVM/Clang作为编译器。 去App store下载Xcode,打开点击Command Line Tool,再选c++,完成。 在Xcode上运行C语言程序 在 Xcode 上运行C语言程序需…

Mac m1 使用Xcode配置OpenMp教程完善版

目录 安装brew安装llvm配置xcode添加libomp.dylib文件代码测试引用 安装brew 自己搜教程 安装llvm brew install llvm安装完成后使用 brew info llvm,复制保存安装路径(后续配置会用,路径用自己的) 下图中为:/opt/h…

Xcode下使用git

1.创建仓库 可以使用命令来创建,做法参考之前的文章git代码管理工具使用 也可以登录github,找到new repository,点击后进入创建页面输入标题helloworld,点击创建。 创建好后进入创建好的repository拷贝地址,我此处…

写给设计师同学的xcode使用教程: 教你用 Xcode 做原型设计

在过去的一个月,我每天早上 7 点起床,一直工作到晚上 7 点,在完成在 Carshare.hk 的那份全职工作之余,一直都在致力于完善那个 Ripple 应用。这个月全是关于 iOS 方面的经验,我面对的挑战是在年底前发布这个 iOS 应用之…

使用Xcode13进行Swift开发

使用Xcode13进行Swift开发 1.软件Xcode 2.快捷键3.应用功能3.1 VStack,HStack,ZStack3.2 frame,foregroundColor,cornerRadius,shadow,resizable与aspicRatio3.3 font,fontWeight,offset,rotationEffect和rotation3DEffset3.4 State,onTapGuesture与animation3.5 gesture和Disp…

Xcode使用教程详细讲解 1

Xcode使用教程详细讲解是本文要介绍的内容,Xcode是一个款强大的IDE开发环境,就像你在写Windows程序时需要VS2005一样 需要要Xcode为你写Mac程序提供环境。因此,如果你要成为Mac 程序的开发者,灵活运用Xcode工具是你必须做的第一步…

xcode编程c语言,使用xcode编写c语言的方法介绍

使用xcode编写c语言的方法介绍 发布时间:2020-03-26 17:08:31 来源:亿速云 阅读:149 作者:小新 今天小编分享的是使用xcode编写c语言的方法介绍,可能大家对xcode并不陌生,或者从来没有了解过xcode。但是不用…

使用Xcode 真机无线调试

1.iPhone和Xcode连在同一WIFI下 2.打开Xcode 顶部菜单 选中Window -> Device and Simulators 3.选中Connect via network (注意:勾选前还要用数据线连接,测试机要设置密码,出弹窗的话要点击信任) 真机设备旁边出现小地球 就代表成功了

Xcode 使用教程(简版)

1.Xcode IDE概览 说明:从左到右,依次是“导航窗格(Navigator)->边列(Gutter)->焦点列(Ribbon)->代码编辑窗口(Standard/Primary Editor)”。 边列&a…

Xcode使用教程详细讲解

from: http://mobile.51cto.com/iphone-273735.htm http://mobile.51cto.com/iphone-273738.htm Xcode使用教程详细讲解是本文要介绍的内容,Xcode是一个款强大的IDE开发环境,就像你在写Windows程序时需要VS2005一样 需要要Xcode为你写Mac程序提供环境…

Xcode使用教程详细讲解 (下)

转载:http://mobile.51cto.com/iphone-273738.htm Xcode使用教程详细讲解 (下)是本节要介绍的内容,继续Xcode使用教程详细讲解 (上)的内容开始介绍。 j)Xcode中书签的使用 如果你要将代码中的某个部分标注起…

Xcode使用教程详细讲解 (上)

http://mobile.51cto.com/iphone-273735.htm 本文介绍的是Xcode使用教程详细讲解,Xcode是一个款强大的IDE开发环境,就像你在写Windows程序时需要VS2005一样 需要要Xcode为你写Mac程序提供环境。 AD:2013云计算架构师峰会课程资料下载 Xcode使…

xcode使用教程

xcode 增加ios版本 window > Devices and Simulators 打开ios版本下载页面下载ios版本,并安装 xcode 增加设备 window > Devices and Simulators 打开选择系统和手机类型新增模拟器 遇到的问题 macOs版本过高, 无法创建 解决方案 打开Xcode…

IOS开发入门之Xcode使用教程详细讲解(全)

摘要:本次的IOS开发入门学习中,Xcode使用教程详细讲解是本文要介绍的内容,Xcode是一个款强大的IDE开发环境,就像你在写Windows程序时需要VS2005一样 需要要Xcode为你写Mac程序提供环境。因此,如果你要成为Mac 程序的开…

Xcode简明教程(使用Xcode编写C语言程序)

原文地址::http://c.biancheng.net/view/476.html 相关文章 1、IOS开发:Xcode入门开发第一个HelloWorld程序----https://jingyan.baidu.com/article/a17d5285c9afc48099c8f279.html 2、30分钟学会iOS 11开发环境xcode 9图文教程----https://blog.csdn.net/epubit1…

使用Xcode创建第一个c语言项目和源文件进行编程(xcodes使用教程)

一、Xcode简介 Xcode 是运行在操作系统Mac OS X上的集成开发工具(IDE),由Apple Inc开发。Xcode是开发 macOS 和 iOS 应用程序的最快捷的方式。Xcode 具有统一的用户界面设计,编码、测试、调试都在一个简单的窗口内完成。 二、如…

【Xcode】使用教程

之前一直都是用的windows下的codeblocks进行刷题的,现在改成mac电脑的之后,下载后发现codeblocks无法使用,改成使用Xcode进行刷题。 一、创建一个C文件 打开一个Xcode 这样就创建好了一个C文件 二、刷leetcode时的使用方式 如果用&l…

主流聚合支付对比分析【转】

前言 最近准备做聚合支付相关的产品,做新产品除了要知道自己做什么还要知道目前的竞品都做了些什么,所以对目前市面上的主流聚合支付产品做了对比分析,每家产品的一些实现细节,这里出于保护没有明确写出来,其实大家看…