赞
踩
车道线检测是图像处理运用到无人驾驶的一项技术,目前也过渡到了部分汽车上,高速公路的自动车道保持就是一个应用。
最近研究了两个基于opencv的车道检的代码,先放链接:
A.Udacity车道线检测代码
高速车道线检测
夜视情况下车道线检测
*****A***中处理步骤如下:**
1.使用提供的一组棋盘格图片计算相机校正矩阵(camera calibration matrix)和失真系数(distortion coefficients).这里主要是考虑到一些鱼眼相机。可以通过棋盘图片来获取校正矩阵进而完成相角拍摄图片的校正。
2.使用梯度阈值(gradient threshold),颜色阈值(color threshold)等处理图片得到清晰捕捉车道线的二进制图(binary image).
3.使用透视变换(perspective transform)得到二进制图(binary image)的鸟瞰图(birds-eye view).
进行透视变化只要是为了找到左右车道线的起点(这里将透视变化后的图片中的像素点投影到x轴,像素多的点对应为左右车道线的起点)
4.检测属于车道线的像素并用它来测出车道边界.
5.计算车道曲率及车辆相对车道中央的位置.
6.处理图片展示车道区域,及车道的曲率和车辆位置.
A中各个步骤的处理细节,效果对比在.
Github中README.md中介绍很详细;A中主要缺点就是实时性还不够(每一帧需要1.05秒),对于弯道较多的路段还是很难适用。
***B***中对于夜视情况下检测效果非常好,且实时性较好。
步骤如下:1.对视频中的图片进行gamma校正,gamma校正相当于进行直方图均匀化。将夜视下的图片增量对比度提高。代码如下:`
def gamma_correction_auto(RGBimage, equalizeHist=False): # 0.35 originalFile = RGBimage.copy() red = RGBimage[:, :, 2] green = RGBimage[:, :, 1] blue = RGBimage[:, :, 0] forLuminance = cv2.cvtColor(originalFile, cv2.COLOR_BGR2YUV) Y = forLuminance[:, :, 0] totalPix = vidsize[0] * vidsize[1] summ = np.sum(Y[:, :]) Yaverage = np.divide(totalPix, summ) # Yclipped = np.clip(Yaverage,0,1) epsilon = 1.19209e-007 correct_param = np.divide(-0.3, np.log10([Yaverage + epsilon])) correct_param = 0.7 - correct_param red = red / 255.0 red = cv2.pow(red, correct_param) red = np.uint8(red * 255) if equalizeHist: red = cv2.equalizeHist(red) green = green / 255.0 green = cv2.pow(green, correct_param) green = np.uint8(green * 255) if equalizeHist: green = cv2.equalizeHist(green) blue = blue / 255.0 blue = cv2.pow(blue, correct_param) blue = np.uint8
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。