检测车道线——1.检测车道 Color Selection

Posted 瘦小园

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了检测车道线——1.检测车道 Color Selection相关的知识,希望对你有一定的参考价值。

       本文的图片和代码大多来自优达无人驾驶工程师课程,目的是为了记录自己学习过程总结经验错误,侵删。

  目前工程师促使自动驾驶一般采用两种不同方式:机器人技术和深度学习。很多年来,机器人技术用于融合一套传感器输出的数据直接测量汽车周边环境然后驾驶。近期,开始使用深度学习,模仿人类驾驶行为。机器人技术和深度学习方法都在运用发展。

这是 Udacity 无人驾驶课程的项目1,在python中实现。

一、检测车道 Color Selection

  教车开车,教车感知世界。用摄像头和传感器获取车道线信息。第一个模块是编写代码识别和跟踪一系列图像中车道线的位置。基于图像分析技术。

  简单地说就是把路面上的行车线找出来。由于行车线的颜色与周围环境有一定区分,我们可以对RGB分别设定阈值,把有用的信息分离出来。

 

  车道线在图像中显示是白色的。数字图像由红绿蓝三个图像组成,有时也叫作3个颜色通道。每个颜色通道的像素值从0到255不等。0是最暗的部分,255是最亮的部分。
        练习题:如果0是黑暗的255是亮的,在红绿蓝三个图像组合的图像里面,纯白怎么表示呢? 
  答案:[255,255,255]

步骤:

 1.加载numpy和matplotlib库

 2.获取坐标轴并拷贝图片

 3.定义颜色阈值

 4.选择像元并输出

 1          #1.导入库
 2    import matplotlib.pyplot as plt       #Matplotlib 是一个 Python 的 2D绘图库
 3    import matplotlib.image as mpimg
 4    import numpy as np                     #NumPy是Python的一种开源的数值计算扩展
 5    
 6         #2.读取图片并输出状态:得到x和y轴的数值,对图片进行拷贝(copy)
 7    image=mpimg.imread(\'E:/spyder/a/a/test.jpg\')
 8    print(\'This image is :\',type(image),
 9         \'with dimensions:\',image.shape)
10    ysize=image.shape[0]                   #获取x轴和y轴并对图片进行拷贝
11    xsize=image.shape[1]
12    color_select=np.copy(image)         #用copy拷贝而不是用‘=’
13  
14         #3.接下来,我在变量red_threshold,green_threshold和blue_threshold中定义颜色的阈值,并用这些值填充rgb_threshold。 这个矢量包含我在选择时允许的红色,绿色和蓝色(R,G,B)的最小值。
15    red_threshold=0
16    green_threshold=0
17    blue_threshold=0                 #若红绿蓝的阈值都设置为0,则说明图片的全部像素都被选中
18    rgb_threshold=[red_threshold,green_threshold,blue_threshold]
19  
20        #4.接下来,我将选择阈值以下的任何像素并将其设置为零。之后,符合我的颜色标准(高于阈值)的所有像素将被保留,而那些不符合阈值的像素将被黑掉。
21     #用布尔值或者\'|\'来识别低于阈值的像元
22    thresholds= (image[:,:,0]<rgb_threshold[0]) \\     
23              | (image[:,:,1]<rgb_threshold[1]) \\
24              | (image[:,:,2]<rgb_threshold[2])
25    color_select[thresholds]=[0,0,0]       #color_select 是选择像素高于阈值的结果,低于阈值的显示黑色。
26  
27    plt.imshow(color_select)          #显示图像
28    plt.show()

 

 结果如下图

 

若将21~23的代码设计如下:

21 red_threshold=200
22 green_threshold=200
23 blue_threshold=200

结果如下图


最终,我发现在red_threshold = green_threshold = blue_threshold = 200的情况下,我得到了一个相当不错的结果,在这里我可以清楚地看到车道线,但其他大部分内容都被遮住了。

然而,在这一点上,自动提取准确的线条仍然很棘手,因为我们周围还有许多其他的像素。


若将21~23的代码设计如下:

21 red_threshold=150
22 green_threshold=250
23 blue_threshold=150
结果如下图

以上是关于检测车道线——1.检测车道 Color Selection的主要内容,如果未能解决你的问题,请参考以下文章

车道线检测基于matlab Hough变换视频车道线检测 含Matlab源码 274期

车道线检测基于matlab Hough变换图片车道线检测 含Matlab源码 276期

车道线检测算法-Ultra-Fast-Lane-Detection

毕业设计 - 车道线检测(自动驾驶 机器视觉)

模式识别基于 Hough变换视频车道线检测matlab源码

无人驾驶的图像识别之车道线检测