/ 导读 /
车道线检测算法分为传统图像处理方法和深度学习方法。本文详细介绍用传统图像处理方法来解决车道线检测问题,后文的算法源于Udacity无人驾驶课程的项目,仅做参考。
计算机视觉基础
在正式开始算法之前,我们先简单补充些计算机视觉的基础知识。已有基础的童鞋,可以略过直接看算法。
像素
像素Pixel,是picture和element的合成词,表示图像元素的意思,可以理解为构成图像的最小单位。像素的大小与图像的分辨率有关,分辨率越高,像素就越小,图像就越清晰。
灰度图像度化,即对彩色图像进行灰度化处理。由于很多算法对颜色的依赖性不高,通常会对彩色图像进行灰度化预处理,去除彩色信息,不仅能提高鲁棒性,还可以提高处理速度。
灰度图像的每个像素信息是由一个量化的灰度级来描述的,没有彩色信息;而彩色图像(例如RGB)的每个像素信息由RGB三原色构成的,RGB分别通过三个不同的灰度级来描述。
二值图像
二值化就是将彩色图像变成二值图像。由于二值图像的数据足够简单,只有两个值,所以算法都依赖二值图像。
二值图像,即黑白图像。二值图像的每个像素只能是黑或白,没有中间的灰度级过渡,像素值为0、1。最常用的就是采用阈值的方法进行二值化。最常用的二值化处理简单来说,就是选取一个阈值,大于它的像素就视为白,小于它就视为黑。
色彩空间
不同色彩空间对颜色采用不同的表示方式,我们最常用的是RGB色彩空间,除此之外还有HLS、HSV、YUV、Lab色彩空间等。我们可以针对个人需求,转换到适合的彩色空间中处理。
例如,RGB色彩空间中的R表示红色Red,G表示绿色Green,B表示蓝色Blue,这三种颜色以不同的量进行叠加,就可以显示出所有颜色。HSL色彩空间即色相Hue、饱和度Saturation、亮度Lightness;HSV色彩空间则是由色相Hue、饱和度Saturation、明度Value组成。YUV色彩空间是由一个亮度Y和两个色度UV决定的。而在Lab色彩空间中,L表示亮度Lightness,A表示从绿色到红色的渐变;B表示从蓝色到黄色的渐变。
颜色阈值过滤
阈值过滤需要设定一个数值,像素值高于此值的像素点变为白色,低于此值则变为黑色。具体来说,例如在RGB色彩空间中,R红色是表示在一个区间内的连续数值;我们通过设置[min, max]值区间,将大小位于该区间内的数值保留,不在该区间的数值统一设置为0。通过这种操作,实现对图像颜色特征的过滤。
边缘检测
这里要介绍的是使用图像滤波的方式实现边缘检测。滤波,其实就是通过放大图像中的某些频段,同时滤掉或减弱某些频段的方法。例如,低通滤波器的作用是消除图像中的高频部分,高通滤波器的作用是消除图像中的低频部分。
Sobel算法
Sobel算法是通过放大图像中高频部分,再对图像进行二值化,可以实现边缘检测。虽然它只对垂直或水平方向的图像频率起作用,能够分别得出x和y方向上的亮度函数的梯度近似值。x方向(水平方向)的Sobel滤波倾向于检测垂直方向的边缘,y方向(垂直方向)的Sobel滤波则倾向于检测水平方向的边缘。而在车道线检测中,车道线是倾向于垂直方向的线,所以采用x方向的Sobel算法较为有效。
Canny算法
Canny算法通常是基于梯度算法,用两个不同的阈值(高阈值和低阈值)来判断那个点属于边缘,双阈值可以有效降低边缘的漏检率。虽然Canny算法能够精度高,能清晰检测出所有边缘,但在车道线检测中,除了车道线还会检测出各种阴影。因此相比之下Sobel单方向的检测也许效果更好。
霍夫变换
霍夫变换是一种一般用于检测直线(也可检测圆形)的经典算法。可以结合上文的Canny算法检测直线车道线。经过Canny算法得到边缘分布图像后,构建一个霍夫参数空间,利用点与线的对偶性,将原始图像空间的直线变换为参数空间的一个点。这样就把原始图像中直线检测问题转变为寻找参数空间中的峰值问题。
简单解释下,元空间的点都对应霍夫参数空间的线,原空间的直线都对应参数空间中曲线的交点。即可以通过参数空间曲线的交点个数来寻找原空间中在一条直线上的点。
图片来自Udacity无人驾驶课程
感兴趣区域
感兴趣区域,即ROI。在图像处理过程中,我们可能会对图像的某一个特定区域感兴趣,只对该区域实施操作。对于车道线检测来说,由于相机是固定安装,可以选取一个区域以排除其他噪声干扰。感兴趣区域可以是任意图形,例如四边形或其他任意多边形。
1 2 3 4 下一页>