检测车道线——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
结果如下图

转载于:https://www.cnblogs.com/minyshi/p/8573470.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值