正如您所注意到的,这可以自然地分为三个较小的子问题:(1) 识别车道,(2) 识别汽车,以及 (3) 检测汽车何时越过车道。这就是我要解决它们的方法:
车道识别
根据您的设置有多“好”,这可能从微不足道到非常困难:
- 摄像头是固定在路上的吗?如果是这样,请手动注释车道。
- 对于整个视野,车道是否相对笔直?如果是这样,请使用霍夫变换。
- 摄像头是否指向正下方?如果是这样,请使用调整到线条宽度的固定宽度滤波器。
- 通过使用可变宽度过滤器来校正透视失真的影响。
如果您最终要处理严重的透视失真,麻省理工学院 DARPA 团队的这两篇论文提出了一种解决方案,该解决方案使用相机校准来校正效果:
- 阿尔伯特·黄。使用视觉和激光雷达的自动驾驶汽车车道估计。博士论文,麻省理工学院,2010。
- A. Huang、D. Moore、M. Antone、E. Olson 和 S. Teller。城市道路网络中的多传感器车道查找。机器人学论文集:科学与系统,瑞士苏黎世,2008 年。
汽车识别
如果您可以在帧之间存储一些状态,那么检测汽车的最简单方法是使用背景减法(即“任何移动得足够快的东西都是汽车”)。去除背景后,剩余的像素可以使用连接组件算法(例如洪水填充)分组为类似汽车的团块。
如果没有状态,这将成为一个更复杂的对象识别问题。
车道偏离检测
假设其他一切正常,这相对简单。检查任何被识别为汽车的像素是否与任何被识别为线条的像素相交[或在一定容差范围内]。