从简单车道线识别认识调参的重要性
在简单车道线识别项目中,我们仅仅使用了以下几种算法:
1. 颜色选择过滤
2. 高斯噪声过滤
3. Canny轮廓过滤
4. 车道区域选择
5. Hough变换检测直线
用它们在三种不同的场景中来取得比较精准的车道线跟踪。
第一种场景是正常的白线、光照、直线车道。这是最容易的场景,因为白色车道线与周围背景有很强的对比度,Canny轮廓过滤之后再加一个车道区域限制,基本上送入Hough变换函数的图像就只包含车道线了。通过Hough变换取得直线的坐标,就可以用红色正确标出车道线。
该场景中的调参重点是Hough变换检测直线的参数,要能够将车道线的短的、长的线段全部检出。主要调整2个参数,min_line_len = 3和max_line_gap = 100。
第二种场景是黄色线,正常光照和直线车道,但路面比较脏,有各种白色短横线干扰直线的检测。黄线与周围背景的对比度不强,在Canny过滤中容易被滤除出去。如果降低Canny对比度的low_threshold虽然留住了黄色线,但同时又会引入更多的噪声。这时候,首先要做的是将黄线通过颜色过滤找出来,并把它们填成白色,将问题恢复成白色车道线的检测问题。然后再做高斯噪声过滤等步骤。而路面上各种其他白色横线的干扰需要在Hough变换检测之后的直线中做筛选和过滤。主要是以下几步:
1. 由于摄像机镜头位置固定的原因,左右车道线在视角中的斜率是比较固定的。通过·np.polyfit()得到斜率,用以下代码滤除斜率夸张的干扰线
for line in lines: #Hough检测返回的所有线段
for x1,y1,x2,y2 in line:
fit = np.polyfit((x1,x2),(y1,y2),1) #查看每一段线的斜率
if fit[0]<-0.5: #将斜率满足左车道线斜率的放入left_lines
left_lines.append(line)
elif fit[0]>0.5: #将斜率满足右车道线斜率的放入right_lines
right_lines.append(line)
2. 左右车道线如果找到多条线段,例如包含点划线或者虚线,要将它们连成一条直线。这是一个挑战题,我是这样实现的:
if len(left_lines)>1: #判断多于一条线段