目录
前言
课题背景和意义
实现技术思路
摄像机校准
编辑
透视变换
车道像素查找
识别车道面积
实现效果图样例
大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过和节省时间与精力投入到更重要的就业和考试中去,学长分享优质的选题经验和毕设项目与技术思路。
对毕设有任何疑问都可以问学长哦!
本次分享的课题是
基于机器视觉道路视频车道线检测
计算机视觉在自动化系统观测环境、预测该系统控制器输入值等方面起着至关重要的作用。本文介绍了使用计算机视觉技术进行车道检测的过程,并引导我们完成识别车道区域、计算道路RoC 和估计车道中心距离的步骤。
几乎所有摄像机使用的镜头在聚焦光线以捕捉图像时都存在一定的误差,因为这些光线由于折射在镜头边缘发生了弯曲。这种现象会导致图像边缘的扭曲。
def pointExtractor(fname):
#number of boxes in the chessboard
objp = np.zeros((6 * 9, 3), np.float32)
objp[:, :2] = np.mgrid[0:9, 0:6].T.reshape(-1, 2)
objpoints = []
imgpoints = []
images = glob.glob(fname)
for idx, img in enumerate(images):
image = cv2.imread(img)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
ret, corners = cv2.findChessboardCorners(gray, (9, 6), None)
if ret == True:
objpoints.append(objp)
imgpoints.append(corners)
return objpoints, imgpoints
def cameraCalibrator(objpoints, imgpoints, image):
imgRes = (image.shape[0], image.shape[1])
ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, imgRes, None, None)
undistorted = cv2.undistort(image, mtx, dist, None, mtx)
return undistorted
检测车道的第一步是调整我们的视觉系统,以鸟瞰的角度来观察前方的道路,这将有助于计算道路的曲率,因此将有助于我们预测未来几百米的转向角大小。自上而下视图的另一个好处是,它解决了车道线相交的问题。实际上只要沿道路行驶,车道线就是平行线。
鸟瞰图可以通过应用透视变换来实现,即将输入图像中车道区域四个点映射到所需点上,从而生成自顶向下的视图。这些点是根据个案确定,决定因素主要是摄像头在车辆中的位置及其视野。
def warp(image):
w = image.shape[1]
h = image.shape[0]
src = np.float32([[200, 460], [1150, 460], [436, 220], [913, 220]])
dst = np.float32([[300, 720], [1000, 720], [400, 0], [1200, 0]])
M = cv2.getPerspectiveTransform(src, dst)
invM = cv2.getPerspectiveTransform(dst, src)
warped = cv2.warpPerspective(image, M, (image.shape[1], image.shape[0]), flags=cv2.INTER_LINEAR)
return warped,
阈值
现在车道线是平行的,下一步将它们从输入图像上分割出来。输入图像包含RGB3个通道,车道线为白色或黄色。基于这个假设,输入图像可以转换为单个通道灰度图像,从而消除我们不需要的通道。另一个要转换为的颜色空间是HLS颜色空间,其中S通道可能会根据照明情况提供较好的结果。在以下示例中,将使用图像阈值,因为在给定的输入图像中它可以正常工作。
预处理输入图像后,将在图像空间中确定并绘制车道。方法是在二进制图像(阈值图像)的下半部分绘制非零像素直方图,以观察模式
滑动窗口有助于估计每个车道区域的中心,使用这些 x 和 y 像素定位函数search_around_poly()可以适合二阶多项曲线。该函数适合 f(y)而不是 f(x),因为通道在图像中是垂直的。
我是海浪学长,创作不易,欢迎点赞、关注、收藏、留言。
毕设帮助,疑难解答,欢迎打扰!