2. 传感器原理:深度相机(ToF、结构光、双目立体)与RGB相机的工作原理及标定必要性
做深度图与彩色图融合,第一步不是调算法,而是搞懂你的传感器到底是怎么“看”世界的。我见过太多同学拿着数据直接开干,结果融合出来的图全是鬼影——说白了,就是没搞懂相机各自的脾气。
这一章,咱们把三种主流深度相机和RGB相机的工作原理捋一遍。嗯,重点放在“为什么需要标定”这件事上。
2.1 三种深度相机的工作原理
深度相机,顾名思义,就是能直接输出每个像素距离信息的相机。目前市面上主流的方案有三种:ToF、结构光、双目立体。它们各有各的“看家本领”,也各有各的“死穴”。
2.1.1 ToF(飞行时间法)
ToF的原理其实很简单:发射一束光,等它反射回来,算一下时间差。光速是固定的,时间差乘以光速再除以2,就是距离。
我个人习惯把ToF比作“声呐测距”——只不过用的是光而不是声波。ToF相机内部有一个调制光源(通常是近红外激光或LED),连续发射调制的光脉冲。传感器接收反射光,通过检测相位差或直接测量飞行时间来计算距离。
核心公式:
距离 = (光速 × 飞行时间) / 2
对于连续波调制(CW-ToF),则是通过测量发射信号与接收信号之间的相位差Δφ来计算:
距离 = (c × Δφ) / (4π × f_mod)
其中f_mod是调制频率,c是光速。
ToF最大的优点是速度快,能实时输出深度图,帧率可以做到30fps甚至更高。而且它对纹理不敏感——你想想看,结构光在纯白墙壁上会失效,但ToF不会。
我的经验:ToF在室内短距离(0.3-5米)表现非常好。但到了室外强光下,太阳光里的红外成分会严重干扰测量。我曾经在户外测试一款ToF相机,大中午的深度图全是噪点,后来加了带通滤光片才勉强能用。
2.1.2 结构光
结构光的思路完全不同。它先往场景里投射一个已知图案(比如点阵、条纹、编码网格),然后用一个摄像头拍下这个图案被物体表面“扭曲”后的样子。通过分析图案的变形程度,就能算出深度。
说白了,结构光就像你用手电筒往墙上照一个网格,如果墙是平的,网格就是规整的;如果墙上有凸起,网格就会变形。变形量越大,深度变化越大。
结构光的代表产品就是早期的Kinect v1。它投射的是红外散斑图案,每个散斑的位置都经过精心设计,相当于给场景打上了“编码”。
关键点:结构光的精度取决于图案的密度和摄像头的分辨率。图案越密,空间分辨率越高,但计算量也越大。另外,结构光需要基线(投影仪和摄像头之间的距离),基线越长,深度精度越高,但盲区也越大。
避坑指南:我曾经在强光环境下用结构光做三维重建,结果投射的图案被环境光完全淹没了。后来我加了窄带滤光片,只让投影仪波长的光通过,才解决了问题。记住:结构光在室外基本是废的。
2.1.3 双目立体视觉
双目立体视觉模仿的是人眼。两个摄像头同时拍摄同一场景,通过寻找左右图像中对应的像素点(视差),利用三角测量原理计算出深度。
它的核心公式是:
深度 Z = (f × B) / d
其中f是焦距,B是基线长度(两个摄像头光心之间的距离),d是视差(同一个点在左右图像中的像素偏移量)。
双目立体视觉最大的优势是:它不需要主动光源,所以室内室外都能用,而且功耗低。但它的致命弱点是——对纹理极度依赖。你想想看,如果面对一面纯白墙壁,左右两张图一模一样,根本找不到匹配点,深度就全丢了。
我的经验:双目立体视觉在纹理丰富的场景(比如草地、书架、人群)中表现极好。但在弱纹理区域,我通常会结合ToF或结构光做融合。另外,双目对光照变化很敏感——左右两张图的亮度不一致时,匹配算法会崩溃。所以,硬件上一定要保证两个摄像头的曝光参数完全同步。
2.2 RGB相机的工作原理
RGB相机大家都很熟悉了,就是普通彩色相机。它通过拜耳阵列(Bayer Pattern)的滤光片,将入射光分解为红、绿、蓝三个通道,然后通过去马赛克(Demosaicing)算法还原出彩色图像。
但这里有一个容易被忽略的点:RGB相机的成像模型是“小孔成像”模型,它只记录光线的角度信息,不记录距离。换句话说,RGB相机看到的是一张2D投影图,每个像素的亮度值代表的是场景中某一点反射到镜头的光强。
所以,RGB相机和深度相机本质上是两种完全不同的传感器——一个测颜色,一个测距离。要把它们的数据对齐,就必须知道它们之间的空间位置关系。
2.3 为什么要标定?
好,现在问题来了:深度相机和RGB相机是两套独立的成像系统,它们的光心位置不同、视场角不同、分辨率也可能不同。你拿到的深度图和彩色图,像素点之间天然就是错位的。
举个例子:深度图上第(100, 200)个像素,对应的是场景中某个点P的距离。但彩色图上第(100, 200)个像素,对应的却是另一个点Q的颜色。如果你直接把深度值和颜色值叠加,结果就是一张“鬼影”图。
标定的目的,就是找到两个相机之间的“桥梁”——这个桥梁叫做外参矩阵(旋转矩阵R和平移向量t)。
标定要解决的核心问题:
- 内参标定:每个相机自己的焦距、主点、畸变系数。这是基础,不标内参,外参就是空中楼阁。
- 外参标定:深度相机坐标系到RGB相机坐标系的旋转和平移关系。这是对齐的关键。
- 联合标定:同时优化两个相机的内参和外参,使重投影误差最小。
我个人的习惯是:拿到任何一套深度-彩色相机系统,第一件事就是做联合标定。哪怕厂家说“出厂已标定”,我也会重新标一遍——因为运输过程中的震动、温度变化,都可能让标定参数失效。
我曾经踩过的坑:有一次我直接用厂家提供的标定参数做融合,结果深度图和彩色图总是有2-3个像素的偏移。后来重新标定才发现,原来相机外壳在运输中被轻微挤压,导致两个传感器之间的相对位置变了。从那以后,我每次项目开始前都会重新标定,哪怕只是换了一台同型号的相机。
2.4 本章知识体系
下面这张图总结了三种深度相机和RGB相机的核心差异,以及标定在整个流程中的位置:
从这张图可以看得很清楚:无论你用的是哪种深度相机,最终都要经过联合标定,才能和RGB相机对齐。标定不是可选项,而是必选项。
一句话总结:深度相机负责“测距”,RGB相机负责“看色”,标定负责“配对”。三者缺一不可。
公众号:蓝海资料掘金营,微信deep3321