ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

深度相机选型指南:双目、结构光、ToF原理对比与实战排查

深度相机选型指南:双目、结构光、ToF原理对比与实战排查 这几年不管做机器人、工业视觉还是智能硬件深度相机几乎成了标配。双目、结构光、ToF这三条技术路线经常出现在选型会上但真要说明白它们到底差在哪、什么时候该用谁很多人其实是模糊的。这篇文章就把三种方案的原理掰开揉碎讲清楚帮你从成像机制上理解差异后面做选型、踩坑、排查问题都能少走弯路。适合刚接触深度相机的工程师、学生以及正在纠结方案选型的项目负责人。先说一个总判断三种方案没有绝对的谁强谁弱只有场景匹配度的问题。双目是被动的“算”出深度结构光是主动“编”出深度ToF是直接“量”出光的飞行时间。这个底层差异决定了它们在精度、距离、功耗、抗光性上的所有不同。下面逐个拆。1. 三种深度相机的测距逻辑先搞懂它们在“怎么算距离”1.1 双目视觉利用视差做三角测量让两个传感器“斗眼”双目相机的硬件结构很简单就是两个水平放置的摄像头模拟人眼。两个镜头同时拍摄同一场景因为位置不同同一个物体在两个画面里的像素位置会有横向偏移这个偏移量叫视差。有了视差再结合两个镜头之间的距离基线和镜头焦距就能用三角测量公式算距离。公式很直白Z f × B / d。Z是物体到相机的距离f是焦距B是基线长度d是视差。注意这里的关键是“同一个点”必须在左右两张图里配对成功。所以我跟刚接触双目的朋友常讲双目看似简单真正的难点不在公式在于图像匹配。两张图里找到同一个物理点算出它在两个画面的像素偏移只要匹配错一位深度就是错的后面所有算法都救不回来。这种纯靠环境光成像、不额外投射任何图案的方式好处非常实在双目是三种方案里唯一不需要主动光源的功耗极低几乎不发热而且天然不怕室外阳光。太阳再大只要场景里有足够的纹理细节它就能工作。这也是很多室外机器人、无人机选双目做避障的原因。但“被动”也是它的最大软肋。想象一面纯白无纹理的墙左右两张图长得一模一样你根本无法判断墙上哪个点对应哪个点匹配直接失效。同样的问题还会出现在夜间、暗光、光滑表面等场景。更麻烦的是双目的精度随距离衰减很快——距离越远物体在左右图的视差变化越小深度误差就越大。所以如果你要做户外中远距离测距纯双目一定要谨慎评估。另外双目标定也是个大话题后面第五节我会详细讲怎么处理不合格角点这类问题。1.2 结构光把“图案”打在物体上从变形反推深度结构光相机的工作方式很有意思它不依赖环境里的纹理而是自己主动往场景里投射一张已知图案再用摄像头拍下被物体表面“扭曲”后的图案。因为原始图案是已知的比对一下原始图案和拍摄图案的差异就能算出每个点的深度。这个过程有点像你往一张不平整的纸上投影一个网格网格扭曲的程度就反映了纸面的高低起伏。结构光投射的图案有很多种风格。早期消费级用得最多的是散斑结构光投射的是伪随机分布的激光散斑点匹配相对灵活成本也比较低。工业级则常用条纹结构光、格雷码、正弦相移光栅这类方案通过多帧投影逐级解算相位精度可以做到更高但因为需要连续投多帧图案一般只适合静态物体重建。也就是你在工作站上扫描一个雕塑、做高精度工业测量时会用到让它去拍高速运动的物体就不合适。结构光最大的价值是解决双目在弱纹理场景下的“绝望”。白色墙壁、光滑桌面在双目眼里是“瞎子”但在结构光眼里反而非常清晰因为图案是它自己投上去的。这也就是为什么刷脸支付、手机3D人脸识别几乎都用结构光方案。近距精度高能还原面部细节隔着口罩也能捕捉轮廓。不过结构光的短板非常明显怕强光。室外太阳光里含有大量红外成分会把投射器发出的红外图案“淹没”掉导致深度图出现大面积的空洞和噪点。另外投射器本身耗电、发热工作距离通常也比较短消费级产品大多在0.2到2米的区间。我做项目时就踩过结构光相机在户外直接“罢工”的坑这个后面排查篇里会专门说。1.3 ToF直截了当测光的飞行时间ToFTime of Flight的原理最符合直觉向场景发射红外光光打到物体表面再反射回来测量光从发射到接收的飞行时间距离就等于光速乘以时间再除以2。相当于给光掐表非常直接。ToF内部实际上还分两条技术路线很多人容易混淆。第一种是iToF也就是间接飞行时间。它不直接测时间而是发射连续调制的周期光通过比较接收光和发射光之间的相位差来反推时间。这种方式的优点是电路相对简单、成本可控适合近距离测量缺点是容易受多径干扰和物体反射率影响精度相对偏低。第二种是dToF直接飞行时间每个像素直接对一个激光脉冲计时原理上更像一个微型激光雷达。dToF量程更远、精度更高但像素结构和工艺要求都更高成本也更贵。苹果在设备上搭载的激光雷达扫描仪本质上就是dToF。现在很多扫地机、AGV上所谓的“雷达”很多也是单点扫描的dToF测距模块原理和ToF深度相机一脉相承只是输出形式不同。ToF被很多人称为“最省心的深度相机”因为它对光照不敏感在全黑环境里也能正常输出深度对环境纹理零依赖而且帧率可以做得比较高适合拍动态物体。我印象很深的一次测试是用ToF相机对着快速挥动的手做手势识别深度图依然能稳定跟手这在双目方案上很难做到因为运动模糊直接破坏了匹配。它最大的短板是分辨率上不去。ToF每个像素都要集成光电转换和时间计算电路像素尺寸比普通CMOS大得多所以市面上常见ToF深度图分辨率普遍只有几十万像素比双目的百万级差不少。另外镜面、玻璃、黑色吸光物体对ToF也不太友好容易出现深度空洞或飞点。2. 原理不同参数差异到处都是精度、分辨率、帧率怎么取舍2.1 精度与有效距离没有绝对优势只有场景匹配三种方案的测距精度不是固定不变的关键看工作距离。近距场景比如1.5米以内结构光的细节还原能力最强特别适合精细重建和人脸识别。双目在这个距离也能用但前提是场景纹理足够。ToF在近距也能出图不过因为光斑回波有一定宽度边缘细节会偏肉。中距离场景也就是1.5到5米双目和ToF是主力。双目胜在成本低、分辨率高只要环境光合适做人体检测、室内机器人的定位避障都能胜任。ToF在这个区间的好处是对光照不敏感且帧率高动态场景下不容易拖影。结构光在这个距离就开始吃力了投射器功率有限散斑图案扩散后变稀疏深度质量明显下降。再往远处走比如5米以上ToF尤其是dToF路线的优势就显现出来了。激光雷达类设备和大多数远距离ToF模块都能覆盖这个区间。双目受基线物理限制视差在远距离变得非常小深度误差呈平方级上升。结构光基本就出局了。所以选型时一定要先问自己主要工作距离是几米这个参数直接决定了你该在哪个方案里挑。2.2 分辨率为什么ToF“只有几十万像素”和别人差一个量级分辨率这件事很多需求方最容易犯“像素迷信”。一看ToF深度图分辨率只有640×480就下意识觉得不如1280×720的双目。实际上深度相机的分辨率不等于点云可用性。ToF分辨率低是因为传感器像素结构复杂每个像素都要做时间测量芯片面积和成本都压不下来。但它只要输出深度每个像素都是真实测距结果。结构光和双目的深度分辨率都取决于摄像头CMOS可以做百万级。但双目和结构光的百万级深度里很大一部分像素可能是无效的。双目在弱纹理区域会出现成片空洞结构光在边缘和远距离位置也会因为图案变形过大而丢失匹配。所以你在对比参数时不要只看分辨率数字要去看有效深度率——也就是输出图里真正有效像素的占比。我在实测中见过一些标称720p的双目产品在普通室内场景下有效深度率能掉到六成反而是分辨率低一些的ToF能做到八九成可用。2.3 帧率、功耗、体积的感性对比帧率方面ToF有天然优势因为它是单帧直接测距不需要像双目那样花时间匹配两张图也不需要像结构光那样多帧投影来解相。常见iToF产品做到30到60帧很轻松有些方案能到90帧甚至更高非常适合手势识别、动作捕捉。双目如果要达到高帧率对算力要求很高一般需要GPU或专用ASIC跑立体匹配算法。结构光如果做的是散斑静态匹配帧率还能做到差不多30帧但如果换成多帧相移方案帧率就会骤降只适合拍静态物体。功耗和体积方面双目的功耗最低因为没有光源但为了拉开基线体积通常比较大尤其要保证两个镜头的光轴平行结构件得足够稳定。结构光的功耗最高投射器一开就是几瓦发热明显不过体积可以做得很紧凑比如手机刘海里的3D摄像头就是微型化的结构光。ToF的功耗和体积介于两者之间既需要发光器件但也可以通过芯片集成做得很小。3. 实操判断拿到一台相机怎么快速看出它是哪种方案3.1 看硬件有没有“投射器”这个关键器官最直接的方法是查官方规格表里有没有“IR Projector”或“投影器”字段。双目相机的硬件只有两个RGB或红外镜头不会有主动投射器。结构光和ToF都有投射器但两者的出光形态不一样。如果你手头有样机可以在黑暗环境里用另一台带红外功能的摄像头去拍它。通电工作时结构光的投射器发出的是一团有明显纹理的散斑图案或者你能用肉眼通过手机摄像头看到密密麻麻的细小光点ToF发出的则是一片均匀的红外光场看不到明显图案。前者是“给场景打码”后者是“给场景照明”差别很直观。我自己做样机测试时这个办法基本60秒就能判断方案。3.2 一到黑屋子谁能工作一目了然这个办法很简单把相机拿到完全无光的房间里打开深度预览。双目相机会当场“瞎掉”因为没有任何环境光左右图全是黑场匹配无从谈起。结构光和ToF因为有主动光源依然能正常输出深度。所以如果你的应用场景是夜间仓库、暗房、隧道这类环境主动光源方案是必须的直接就不用纠结双目不双目了。反过来如果你在大太阳底下测试情况就完全翻转。结构光容易被红外光淹没深度图会大面积失效ToF有窄带滤光片帮忙能用但也会打折扣双目反而因为可见光充足、纹理清晰表现得很稳定。所以我才一直强调没有通吃一切的方案只有匹配场景的方案。3.3 看SDK里面的深度分辨率和帧率软件层面也能反推。打开相机SDK查看深度流的可选分辨率。如果深度分辨率能做到1280×720甚至是1920×1080那基本是双目或结构光方案因为这两者深度图由普通摄像头解析得来。如果深度分辨率最高只有640×480或者更低比如320×240那大概率是ToF。我记得当时第一次接触一台ToF相机SDK里默认深度流标称只到640×480一开始我也觉得不够用后来发现它的点云稳定性确实比同像素的双目好很多这才理解了背后的硬件差异。顺便看帧率。如果默认30帧以上甚至能跑到60帧大概率是iToF或者硬件加速的双目。多帧结构光的帧率一般都很低有的只有几帧基本只能扫描静态物体。3.4 看失败模式从“坏的样子”反推方案每种相机的“失效表现”不太一样这个特征反过来也能帮我们识别方案。双目在弱纹理、重复纹理区域的典型失败特征是成片的空洞、黑色噪点比如面对白墙或条纹密集的格栅。结构光在强光下的表现是深度图发灰、空洞时有时无画面不稳定。ToF的失败特征是边缘出现零星的“飞点”也就是深度值突然跳变的孤立像素尤其在金属、镜面、玻璃或者物体边缘附近特别明显。你只要在不同环境下多试几次基本就能判断出眼前这台设备采用的是什么方案了。4. 实际选型从应用场景倒推方案别按参数表选相机4.1 典型场景速查先定场景再谈参数选型最忌讳的就是抱着参数表挨个比分辨率、比距离最后发现买回来根本不好用。我的习惯是先列场景约束再倒推方案。这里整理了一张速查表基本覆盖了最常见的应用场景。典型场景首选方案核心原因人脸识别、刷脸支付、近距生物识别结构光近距精度高细节丰富不受环境纹理限制手势识别、动态动作捕捉iToF帧率高动态响应好暗光也能用室内机器人定位避障ToF/双目ToF光照鲁棒性好双目成本低且分辨率高室外巡检、无人机、农业视觉双目或主动立体被动方案不怕强光功耗低高精度工业测量、静态三维重建结构光多帧相移多帧解相精度高适合静止物体夜间安防、黑暗环境监控ToF主动光源暗场不受影响远距离测距、导航dToF/激光雷达量程大单脉冲测时精度高4.2 常见产品案例很多相机其实是“混合方案”这里想重点提醒一个容易混淆的点市面上很多标称“双目”的产品其实是有红外投射器帮忙的主动双目。比如Intel RealSense D435这类设备它本质上还是双目三角测量但额外加了一个红外散斑投射器用来在弱纹理场景中提供人工纹理提升匹配成功率。这种混合方案把双目的远距离和结构光的弱纹理优势结合在了一起但也因为它加了投射器功耗比纯双目高。严格来说它是“双目结构光辅助”不是纯被动双目。选型时如果看到产品同时有“Stereo”和“Projector”两个关键词就应该按混合方案来评估。结构光方案的典型产品包括手机里的3D结构光模组、一些消费级的3D扫描仪。ToF的代表性产品则有奥比中光的“大白”Dabai系列、微软Kinect v2、以及苹果设备上的激光雷达扫描仪dToF路线。这里面有个很有意思的现象同样一颗ToF传感器在不同产品上的表现差距可以很大。比如我测过一款ToF相机在室温下深度值稳得很放在发热的机箱旁边用一会儿深度图就开始出现整体偏差。所以买ToF设备时最好考察一下它的温漂补偿做得怎么样。4.3 选型时要避开的几个“坑”第一个坑是只看像素不看有效距离。深度相机的标称分辨率再高如果超出有效距离范围深度值就是废的。采购前一定让供应商提供不同距离下的实测深度图别只看展示视频。第二个坑是忽略FOV匹配。很多结构光相机的投影FOV和相机FOV不一定完全一致边缘区域可能出现有画面无深度的情况。做方案时要把有效FOV算清楚。第三个坑是不重视RGB与深度对齐。不少项目最终要输出彩色点云也就是把RGB图像贴合到深度图上。如果相机本身没有硬件级对齐你就得自己标定外参这在后期调试里会耗费大量时间。所以选型时优先考虑SDK自带对齐能力的方案。第四个坑是轻视标定。双目相机的基线、焦距、光心、畸变都会随温度变化和机械振动发生微小偏移如果长期部署在振动环境里需要定期重新标定。很多人买回双目相机后不做标定直接用出厂参数结果在近距离测量时误差大得离谱还以为是相机质量问题。5. 常见问题与排查技巧实录5.1 双目标定老失败不合格角点一双一双剔除双目相机出厂前都会做标定但实际使用中镜头松动、温度变化、外壳变形都会导致内外参偏移这时候就需要重新标定。很多人第一次跑标定程序发现重投影误差居高不下点云错乱大概率是标定板图像没拍好。我自己踩过的一个大坑图省事找了一块反光的棋盘格打印纸贴在玻璃板上当标定板。结果拍出来的棋盘格高光严重角点检测经常误判跑出来的内参明显不对。后来换了哑光材质的标定板情况立刻好转。标定的时候有几个硬性建议一是标定板要完全平整不要拿软趴趴的纸二是每个拍摄角度不要过倾斜尽量控制在45度以内否则角点提取不稳定三是采集图像至少15到20对覆盖画面中心、四个角和不同距离四是自动标定工具虽然方便但也不能全信。很多SDK提供“双目自动标定”功能会自动采集图像、自动剔除不合格角点听起来很省事但最后的筛选结果还是得人工过一遍。特别是那些角点检测置信度不高的图像该删就删不要心疼。我当时就是保留了一张边角图像没删导致重投影误差卡在0.3以上删掉之后直接降到0.1以内点云质量完全不一样。所以“双目相机标定剔除不合格角点”这件事听起来像是小细节实际影响非常大。5.2 结构光相机到户外“罢工”别让它跟太阳硬刚有次我带着一台结构光相机到室外做测试本来在室内表现很好的设备一出门深度图就惨不忍睹大量空洞和噪点基本没法用。一开始我还以为是设备坏了后来才发现问题出在阳光上。太阳光里有很强的红外成分结构光投射器发出的红外图案会被环境红外光淹没接收端几乎分不清哪些是投影信号、哪些是环境噪声。解决办法有几个方向但都不完美提高投射器功率能改善但发热和功耗立刻上来加窄带滤光片能滤掉一部分环境红外但也可能牺牲画面亮度和FOV加遮光罩能缓解直射光但增加了结构复杂度。如果项目主打户外场景我的建议是趁早放弃结构光直接换双目或ToF别在物理原理上硬拗。5.3 ToF多径干扰导致边缘“飞点”先调曝光再看算法过滤ToF相机在拍凹角、金属物体的时候很容易出现“飞点”——一些像素的深度值突然跳变在点云里表现为一颗颗悬浮的杂点。这背后的物理原因是多径干扰光在金属面或凹槽之间反弹多次飞行时间被拉长测出来的距离自然就偏大。高反射表面还会导致光强饱和让深度值漂移。处理这类问题的第一道关卡是曝光时间。把这个场景下的曝光调低一点让高光区域少过曝飞点数量通常会明显减少。第二道关卡是置信度图。大部分ToF相机SDK都能同时输出一副置信度/振幅图你可以把置信度偏低的像素过滤掉。第三道关卡是设备温度ToF传感器对温度敏感开机不久和运行半小时后的深度值可能有偏移所以精密测量前要先让相机预热稳定。如果应用场景本身避不开镜面、玻璃不妨考虑在硬件层面加个偏光片或者在算法层面把反光区域屏蔽掉。5.4 深度图和彩色图对不齐看硬件级对齐还是软件级对齐我做彩色点云的时候经常被一个问题困扰深度图对的彩色图也对的但把两者叠加之后物体边缘出现明显的颜色虚边像“描边”一样。原因很简单RGB镜头和深度镜头的位置不同两者看到的场景存在视差不做对齐就是错位的。第一优先的解决方案是选一台支持硬件级RGB-D对齐的设备很多ToF相机在固件和芯片层面已经做了对齐SDK直接输出像素对齐后的深度和彩色流省心很多。如果设备只提供软件对齐接口就要保存好标定内外参在应用层调用SDK的重投影接口。还有一种情况是RGB和IR镜头的FOV不一致这时候再怎么对齐边缘区域也会缺失深度信息只能在选型阶段规避。做点云融合前务必先跑一遍连续多帧确认对齐在天花板灯、高光、暗部等不同亮度下都稳定再进正式流程。最后再分享一个小技巧不管你在用哪种深度相机第一步都是先看“无效像素分布图”——很多SDK把无效像素标成黑色或透明如果无效像素集中在边缘或物体交界处大概率是正常现象如果无效像素密密麻麻散布在纹理丰富的平坦区域那就要怀疑标定参数、曝光或者对齐配置是不是出了问题。拿着这张图去定位问题比盲调参数高效得多。我自己折腾深度相机这几年最深的感触就是没有哪个方案是“最强”的只有匹配场景对不对。如果刚开始接触建议先拿一台带主动双目或者可切换模式的样机把“被动双目匹配”和“主动光源投射”的差异都实际体验一遍理解了深度到底从哪来后面排查问题会快很多。今天先聊到这后面有新的实测心得我再来单独写。
返回列表