由于网上有很多车道线检测的案例,而且在Udacity的系列课程中也对此进行详细的介绍,因此在此简单总结一下几种方法。
1. 边缘检测+霍夫变换
- 方法流程:彩色图像转灰度,模糊处理,边缘检测,霍夫变换
- 这种方法一般能够检测出简单场景下的车辆目前行驶的两条车道线,以及偶尔的相邻车道(依赖前视相机的角度)。该方法可以利用霍夫变换的结果(线的斜率),进一步过滤出左右车道线。不过同时,该方法也依赖于边缘检测的结果,所以调参(边缘检测、霍夫变换)以及其他的trick(roi选取等等)是很重要的。
2. 颜色阈值
- 方法流程:将图像转颜色空间(一般HSV),对新的color space中的各个通道设置阈值(大于阈值取值为1,小于取值为0),得到结果。
- 该方法依赖于各通道的阈值的选取,只需要调整几个阈值参数,但个人认为该方法鲁棒性会较差,例如当前车辆前方的车辆可能会被全部置1。
3. 透视变换
- 方法流程:获取透视变换矩阵,透视变换,车道线检测(1或者2)
- 该方法的优点是将前视摄像头抓拍的图像转为鸟瞰图,能够检测到多条线。其关键在于透视变换矩阵的准确性(不考虑转换后的车道线检测),对于转换后的鸟瞰图,可以通过上述两种方式检测车道线。
在实际场景中,传统方法的鲁棒性确实不行,除去光照和邻近车辆的影响外,车道中间的指示箭头和人行道也是此类算法很难处理的挑战。因此,需要结合很多trick。
不过这些方法的实现都很简单,目前的opencv的python接口和c++接口均有相关的接口。
推荐参考:https://blog.csdn.net/liaojiacai/article/details/63685342