第8期做了点云和图像融合,这期聚焦一个经典问题------单目相机怎么测距。只有一路相机(没有激光雷达、没有双目),怎么知道前方障碍物有多远?
1 为什么单目测距难
双目:两个相机视差 → 三角测量 → 距离
激光雷达:直接测距
单目:只有一张图 → 没有深度信息 → 只能靠"推断"
单目测距的核心:从一张2D图像里"推理"出3D距离,有四种主流方法。
2 四种测距方法
2.1 地平面假设方法
假设地面是平面,已知相机高度和姿态,图像每个像素投影到地平面(Z=0)算出距离。
| 要素 | 说明 |
|---|---|
| 前提 | 地面是平面、相机高度和姿态已知 |
| 优点 | 计算简单、实时性好(纯几何) |
| 缺点 | 坡道就错;目标底部被遮挡时误差大 |
适用: 平直道路、前方车辆测距(利用车底着地点)。
2.2 迭代投影方法
不假设地面平,迭代搜索最优深度:把物体3D假设投影回图像,与检测框比对,调整深度直到匹配。
| 要素 | 说明 |
|---|---|
| 前提 | 知道物体真实3D尺寸(车辆宽1.8m等) |
| 原理 | 投影-比对-迭代收敛 |
| 优点 | 不需地面假设,坡道鲁棒 |
| 缺点 | 依赖先验尺寸;迭代耗时 |
适用: 已知尺寸的物体(车辆、行人、路牌)。
2.3 点云融合图像方法
单目图像 + 稀疏点云(激光雷达/双目视差)融合:点云提供精确深度,图像提供语义。
| 要素 | 说明 |
|---|---|
| 前提 | 相机与雷达标定好、时间同步 |
| 核心 | 点云投影到图像,取深度 |
| 优点 | 距离准确,不受光照影响 |
| 缺点 | 依赖标定;远处点云稀疏 |
适用: 主流的"相机+激光雷达"融合方案(第8期做过)。
2.4 单目深度估计方法
用深度学习模型,从单张图像回归每个像素的深度------网络学会从透视、遮挡、纹理推断距离。
| 要素 | 说明 |
|---|---|
| 核心 | 网络学习深度先验 |
| 优点 | 稠密深度、无需其他传感器、成本低 |
| 缺点 | 泛化依赖数据 |
| 代表 | Depth Anything |
3 实测
代码里实现了两种可跑的方案(mode 1 和 mode 3):
bash
cd /opt/carla_ws/sim_workspace/image_detect
python image_detect_nms_distance.py --mode 1 # 地平面假设
python image_detect_nms_distance.py --mode 3 # 迭代测距
-
mode 1(地平面假设) :计算快,平直路面效果好

-
mode 3(迭代测距) :对已知尺寸物体更准,坡道更鲁棒

mode1:左侧车辆是13.2m
mode3:左侧车辆是8.25m
结论: 在平直的地面的场景,mode1的结果是更准确的,因为他的影响因数就只有接地点的值,但是从目标检测框看是接地点识别是比较准确的。mode3的影响因数就比较多(物体尺寸、迭代阈值设置、物体朝向等),所以误差是很大的。
9_实现单目障碍物测距
4 往期回顾
- Carla仿真系列:8_相机与激光雷达融合,点云投影到图像
- Carla仿真系列:7_BEV + 语义分割融合,一张鸟瞰图看懂整个场景
- Carla仿真系列:6_实时图像语义分割,SegFormer 和 YOLOPv2 实测对比
- Carla仿真系列:5_Carla 四路相机标定与BEV环视拼接
- Carla仿真系列:4_在 Carla 的 Tesla 上装 4 路摄像头,并创建网格为环视拼接做准备
- Carla仿真系列:3_Carla 仿真中跑通 YOLOv8 实时目标检测
- Carla仿真系列:2_Carla 仿真中批量添加 NPC,让场景动起来
- Carla仿真系列:1_Carla + ROS 仿真环境从零搭建,跑通完整数据流
如果本文对你有帮助,欢迎点赞、关注、收藏 。
遇到问题可以评论区留言交流,也欢迎转发给需要的朋友。
开源项目地址放在个人主页简介中,欢迎前往查看。