使用OpenCV实现车道线检测

简介

计算机视觉在自动化系统观测环境、预测该系统控制器输入值等方面起着至关重要的作用。本文介绍了使用计算机视觉技术进行车道检测的过程,并引导我们完成识别车道区域、计算道路RoC和估计车道中心距离的步骤。

完整代码地址: https://github.com/YouthJourney/Computer-Vision-OpenCV/tree/master/lane_line_detection

摄像机校准

几乎所有摄像机使用的镜头在聚焦光线以捕捉图像时都存在一定的误差,因为这些光线由于折射 在镜头边缘发生了弯曲。这种现象会导致图像边缘的扭曲。主要作用就是去除图像失真。

透视变换

检测车道的第一步是调整我们的视觉系统,以鸟瞰的角度来观察前方的道路,这就有助于计算道路的曲率,因此有助于我们预测未来几百米的转向角大小。俯视图的另一个好处是它解决了车道线相交的问题。但是实际上只要车辆沿着道路行驶,车道线就是平行线。

鸟瞰图可以通过应用透视变换来实现,即将输入图像中车道区域四个点映射到所需点上,从而生成自顶向下的俯视图。这些点根据个案确定,决定因素主要是摄像头在车辆中的位置及其视野。下图分别表示输入和转换后输出图像。

使用OpenCV实现车道线检测_第1张图片

阈值

现在的问题是车道线是平行的,下一步将它们从输入图像上分割出来。输入图像包括RGB3个通道,车道线为白色或黄色。基于这个假设,输入图像可以转换为单个通道灰度图像,从而消除我们不需要的通道。另一个要转换的是颜色空间要转换为HLS颜色空间,其中S通道可能会根据照明情况提供较好的结果。在下面示例中,将使用图像阈值处理图像,得到阈值处理后的图像如下:
使用OpenCV实现车道线检测_第2张图片
下阈值和上阈值将根据输入图像手动调整。OpenCV有基于整体嵌套边缘检测的先进技术,而无需对阈值进行任何手动调整,但本例子使用的依然是简单的阈值技术。

车道像素查找

预处理输入图像后,将在图像空间中确定并绘制车道。方法是在二进制图像(阈值图像)的下半部分绘制非零像素直方图,以便观测:
使用OpenCV实现车道线检测_第3张图片
由于像素值是二进制的,峰值代表大多数非零像素的位置,因此可以很好地指示车道线。直方图中的x坐标用作搜索相应通道的起点。这里应用了滑动窗口的概念,下图是使用滑动窗口的结果:
使用OpenCV实现车道线检测_第4张图片

识别车道面积

滑动窗口有助于估计每个车道区域的中心,使用这些x和y像素定位函数可以适合二阶多项曲线。该函数适合f(y)而不是f(x),因为通道在图像中是垂直的。
使用OpenCV实现车道线检测_第5张图片
下一步是计算曲率半径,该半径可以使用与曲线局部部分附近的点紧密拟合的圆进行计算,如下图所示,曲线在特定点的曲率半径可以定义为近视圆的半径。此半径可以使用下图中的公式计算。
使用OpenCV实现车道线检测_第6张图片
最后一步是在这些点之间放置一个多边形,并将其投影到原始图像,来突出显示车道区域。车道面积和曲率半径是根据像素值计算的,像素值与真实世界空间不同,因此必须转换为现实世界的值,这涉及到测量我们投射扭曲图像的车道部分的长度和宽度。为简单起见,我们可以假设大多数车道通常长 30 米,宽 3.7 米,并且使用代码将像素空间值转换为实际仪表测量值。
使用OpenCV实现车道线检测_第7张图片

你可能感兴趣的:(计算机视觉,计算机视觉,opencv)