4、摄像头原理:单目与双目视觉、视觉测距与目标检测、深度学习在视觉中的应用
各位同学,咱们今天聊聊摄像头。在自适应巡航系统里,摄像头就像车的眼睛。没有它,ACC就是个瞎子。我做了这么多年传感器融合,坦白讲,摄像头是信息最丰富、但也是最难伺候的传感器。
为什么这么说?因为摄像头输出的不是距离,不是速度,而是像素。你得从这些像素里,把车道线、车辆、行人给“猜”出来。嗯,这里面的门道,咱们一点点拆开讲。
4.1 单目视觉:用一张图看世界
单目摄像头,说白了就是一只眼睛。它拍出来的是一张2D图片。你想想看,一张平面图,怎么知道物体离你多远?
我刚开始做视觉时,也觉得这事挺玄乎。后来才明白,单目测距靠的是“先验知识”。比如,你知道一辆轿车的宽度大约是1.8米。在图像里,如果这辆车占了100个像素,那它离你大概50米。如果只占了50个像素,那距离就翻倍了。
这里有个核心公式,我建议你记下来:
距离 = (实际物体宽度 × 焦距) / 图像中物体宽度
但问题来了——你怎么知道那是个轿车?万一是个摩托车呢?宽度就不对了。这就是单目的局限。我在项目里遇到过,一辆大货车被误判成小轿车,导致ACC突然急刹车。嗯,那感觉,后排乘客的咖啡全洒了。
4.2 双目视觉:像人眼一样看深度
双目视觉就聪明多了。它用两个摄像头,模仿人的两只眼睛。两个摄像头看到的画面有细微差别,这个差别叫“视差”。视差越大,物体越近。
原理其实不复杂:
- 左眼和右眼同时拍一张图
- 找到两幅图中同一个物体的位置
- 计算位置差(视差)
- 用三角测量法算出距离
公式长这样:
距离 = (基线长度 × 焦距) / 视差
这里的“基线长度”就是两个摄像头之间的距离。我习惯把基线设在8-12厘米之间。太短了,近距离精度不够;太长了,远距离匹配困难。
双目最大的好处是什么?它不需要知道物体是什么。只要找到匹配点,就能算出距离。说白了,它测的是“几何深度”,而不是“语义深度”。
4.3 视觉测距:从像素到米
不管是单目还是双目,最终都要把像素坐标转换成物理坐标。这个过程叫“标定”。
标定分两步:
- 内参标定: 确定焦距、主点坐标、畸变参数。我一般用张正友标定法,拍20张棋盘格照片就够了。
- 外参标定: 确定摄像头在车上的位置和朝向。这个很关键,因为摄像头装歪了,测距就会偏。
我记得有一次,一辆车返厂维修,ACC一直报错。查了半天,发现是前挡风玻璃换过,摄像头安装角度偏了0.5度。就这0.5度,导致100米外的目标测距误差了将近3米。
所以,我建议你在量产车上,一定要做在线标定。就是车子启动时,自动检测摄像头姿态是否变化。如果发现偏差,要么报警,要么自动补偿。
4.4 目标检测:从图像到语义
测距搞定了,接下来要回答一个问题:前面那个东西到底是什么?是车?是人?还是路边的广告牌?
传统方法靠的是手工特征。比如用HOG(方向梯度直方图)提取行人特征,用Haar-like特征检测车辆。我早年做项目时,就是靠这些方法。说实话,效果一般。晴天还行,一下雨就完蛋。
后来深度学习来了,一切都变了。
4.5 深度学习在视觉中的应用
深度学习,说白了就是用神经网络自动学习特征。你不需要告诉它“行人的腿是什么样的”,它自己会从数据里学。
目前在ACC里用得最多的,是目标检测网络。主流的有两类:
| 类型 | 代表算法 | 特点 | 我推荐的应用场景 |
|---|---|---|---|
| 两阶段检测器 | Faster R-CNN | 精度高,速度慢 | 离线标定、数据标注 |
| 单阶段检测器 | YOLO、SSD | 速度快,精度稍低 | 实时ACC系统 |
我个人习惯用YOLOv5或YOLOv8做实时检测。为什么?因为它能在30毫秒内完成一帧图像的检测,满足ACC 30-50Hz的控制频率要求。
这里给一段简单的推理代码示例:
import torch
# 加载预训练模型
model = torch.hub.load('ultralytics/yolov5', 'yolov5s', pretrained=True)
# 读取摄像头画面
img = cv2.imread('road.jpg')
# 推理
results = model(img)
# 提取检测结果
detections = results.pandas().xyxy[0]
for _, det in detections.iterrows():
if det['class'] == 2: # 2代表car
x1, y1, x2, y2 = det[['xmin', 'ymin', 'xmax', 'ymax']]
confidence = det['confidence']
print(f'检测到车辆,置信度:{confidence:.2f}')
4.6 实际工程中的坑
最后,我分享几个实际项目中踩过的坑:
- 光照变化: 进出隧道时,摄像头需要快速调整曝光。我见过有些方案曝光调整太慢,导致出隧道后2-3秒内目标丢失。解决办法是启用HDR(高动态范围)模式。
- 运动模糊: 车速超过100km/h时,如果曝光时间太长,图像会模糊。我建议曝光时间控制在5毫秒以内。
- 标定漂移: 车辆长期使用后,摄像头可能因振动而轻微移位。我建议每5000公里做一次自动标定校验。
好了,关于摄像头原理,今天就聊这么多。下一章咱们讲毫米波雷达,那个又是另一番天地了。