0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何通过计算机视觉去识别车道线

深度学习实战 2018-01-15 10:03 次阅读

因为种种原因导致上个月没有更新推文,所以特此发此推文表示歉意。

今天介绍的是如何通过计算机视觉去识别车道线,其实现在也有各种方法去识别车道线了。这次是基于Matlab的实现,过几天会更新Python版本的实现,虽然用的语言不一样,但是原理都是一样的。

预处理

摄像机获得的视频图像,由于受到周围环境的影响,存在着很多无用信息和各种各样的噪声干扰。为了准确的检测到道路线必须对图像进行预处理。首先,通过灰度化处理将原始彩色图像转换为灰色图像,然后采用大小为5*5的模板进行高斯滤波平滑处理,减小噪声干扰。高斯滤波的具体操作是:用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。

若使用3×3模板,则计算公式如下

g(x,y)={f(x-1,y-1)+f(x-1,y+1)+f(x+1,y-1)+f(x+1,y+1)+[f(x-1,y)+f(x,y- 1)+f(x+1,y)+f(x,y+1)]*2+f(x,y)*4}/16;

其中,f(x,y)为图像中(x,y)点的灰度值,g(x,y)为该点经过高斯滤波后的值

由于天空并不存在车道的感兴趣区域,所以对图片进行了划分,将感兴趣区域划为一个三角形区域。如图1。

图一

预处理代码如下:

%读入RGB图片

I=imread('IMG00061.jpg');

%把RGB图转换为灰度图

I=rgb2gray(I);

%高斯滤波平滑处理

sigma = 1;

gausFilter =fspecial('gaussian', [5,5], sigma);

gaus= imfilter(I, gausFilter,'replicate');

%得到图片的宽和高

[h, w]=size(I);

%k是直线的斜率

%找出图片的感兴趣区域

k = 1.3;

for y=1:h

for x=1:w

if y < x*k + h-k*w || y < -k*x +h

I(y, x) = 0;

end

end

end

边缘检测

由于车道线的灰度比路面更加明亮,以此可以用边缘检测的方法把车道的边缘检测出来。在边缘检测中,我用了‘Sobel’算子。在技术上,它是一离散性差分算子,用来运算图像亮度函数的灰度之近似值。在图像的任何一点使用此算子,将会产生对应的灰度矢量或是其法矢量

Sobel卷积因子为:

该算子包含两组3x3的矩阵,分别为横向及纵向,将之与图像作平面卷积,即可分别得出横向及纵向的亮度差分近似值。如果以A代表原始图像,Gx及Gy分别代表经横向及纵向边缘检测的图像灰度值,其公式如下:

如何通过计算机视觉去识别车道线

图像的每一个像素的横向及纵向灰度值通过以下公式结合,来计算该点灰度的大小:

通常,为了提高效率使用不开平方的近似值:

所得到的结果如图2:

图2

霍夫变换直线检测

有了边缘检测的二值图后可以对图像进行霍夫变换,霍夫变换是图像变换中的经典手段之一,主要用来从图像中分离出具有某种相同特征的几何形状(如,直线,圆等)。霍夫变换的原理是将特定图形上的点变换到一组参数空间上,根据参数空间点的累计结果找到一个极大值对应的解,那么这个解就对应着要寻找的几何形状的参数(比如说直线,那么就会得到直线的斜率k与常数b,圆就会得到圆心与半径等等)。经过霍夫变换后可得到如图3关于ρ和θ的图。

图3

图中最亮的几个点则为峰值,峰值中极有可能存在直线。可以选出一组候选的峰值,然后决定线的起始点和终点。函数houghlines用默认的语法执行这个任务:

lines = houghlines(f, theta,rho, peaks)

或者使用完整的语法形式:

lines = houghlines(...,'FillGap', val1, 'MinLength', val2)

其中,theta和rho是来自函数hough的输出,peaks是函数houghpeaks的输出。

效果

为了美观和效果,我对检测出来的线段进行了延长处理,效果如下图4。

图4

完整代码如下:

clear

close all

%读入RGB图片

I=imread('IMG00061.jpg');

%把RGB图转换为灰度图

I=rgb2gray(I);

%高斯滤波平滑处理

sigma = 1;

gausFilter = fspecial('gaussian', [5,5], sigma);

gaus= imfilter(I, gausFilter, 'replicate');

%得到图片的宽和高

[h, w]=size(I);

%k是直线的斜率

%切图,找出图片的感兴趣区域

k = 1.3;

for y=1:h

for x=1:w

if y < x*k + h-k*w || y < -k*x + h

I(y, x) = 0;

end

end

end

imshow(I)

%用Sobel算子做边缘检测

BW = edge(I,'sobel');

%霍夫变换

[H,T,R] = hough(BW);

imshow(H,[],'XData',T,'YData',R, 'InitialMagnification','fit');

xlabel(' heta'), ylabel(' ho');

axis on, axis normal, hold on;

%找出霍夫变换的峰值

P = houghpeaks(H,2);

%用霍夫变换检测和连接线

lines = houghlines(BW,T,R,P);

figure;

imshow(I); hold on

%画线

for k = 1:length(lines)

p1 = lines(k).point1;

p2 = lines(k).point2;

syms slope b

[b, slope] = solve(slope*p1(1)-p1(2)+b, slope*p2(1)-p2(2)+b);

plot([(h-b)/slope, (0.4*h-b)/slope], [h, 0.4*h], 'g-', 'LineWidth',3);

end

代码中用到的图片:

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • matlab
    +关注

    关注

    182

    文章

    2963

    浏览量

    230131
  • 代码
    +关注

    关注

    30

    文章

    4741

    浏览量

    68326
  • 计算机视觉
    +关注

    关注

    8

    文章

    1696

    浏览量

    45925

原文标题:项目实战 | 车道线检测与定位

文章出处:【微信号:gh_a204797f977b,微信公众号:深度学习实战】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    什么是计算机视觉计算机视觉的三种方法

    计算机视觉是指通过计算机赋予人类视觉这一技术目标,从而赋能装配线检查到驾驶辅助和机器人等应用。
    的头像 发表于 11-16 16:38 4453次阅读
    什么是<b class='flag-5'>计算机</b><b class='flag-5'>视觉</b>?<b class='flag-5'>计算机</b><b class='flag-5'>视觉</b>的三种方法

    基于OpenCV的计算机视觉技术实现

    基于OpenCV的计算机视觉技术实现OpencV是用来实现计算机视觉相关技术的开放源码工作库,是计算机
    发表于 11-23 21:06 0次下载
    基于OpenCV的<b class='flag-5'>计算机</b><b class='flag-5'>视觉</b>技术实现

    单目视觉车道线识别算法及其ARM实现

    单目视觉车道线识别算法及其ARM实现
    发表于 09-24 11:38 6次下载
    单目<b class='flag-5'>视觉</b><b class='flag-5'>车道</b><b class='flag-5'>线</b><b class='flag-5'>识别</b>算法及其ARM实现

    AI新闻:计算机视觉和模式识别会议

    了解和注册计算机视觉和模式识别会议(CVPR 2018)!
    的头像 发表于 11-05 06:14 3050次阅读

    计算机视觉与机器视觉区别

     “计算机视觉”,是指用计算机实现人的视觉功能,对客观世界的三维场景的感知、识别和理解。计算机
    的头像 发表于 12-08 09:27 1.2w次阅读

    计算机视觉常用算法_计算机视觉有哪些分类

    本文主要介绍了计算机视觉常用算法及计算机视觉的分类。
    的头像 发表于 07-30 17:34 1.4w次阅读

    剖析计算机视觉识别简史

    最近,物体识别已经成为计算机视觉和 AI 最令人激动的领域之一。即时地识别出场景中所有的物体的能力似乎已经不再是秘密。随着卷积神经网络架构的发展,以及大型训练数据集和高级
    的头像 发表于 04-30 10:14 2723次阅读
    剖析<b class='flag-5'>计算机</b><b class='flag-5'>视觉</b><b class='flag-5'>识别</b>简史

    基于计算机视觉的客机舱门识别与定位方法

    基于计算机视觉的客机舱门识别与定位方法
    发表于 06-22 16:37 42次下载

    模式识别计算机视觉手册

    模式识别计算机视觉手册免费下载。
    发表于 06-24 10:02 3次下载

    计算机视觉识别是如何工作的?

    计算机视觉识别是一种人工智能技术,旨在使计算机系统从数字图像、视频等视觉信息中识别和提取有意义信
    的头像 发表于 02-09 13:41 3591次阅读

    计算机视觉中手语识别研究

    计算机视觉中手语识别研究 手语识别的目的就是通过计算机提供一种有效的、准确的机制将聋哑人常用的手
    的头像 发表于 04-14 16:11 1132次阅读

    计算机视觉是什么 计算机视觉历史及发展趋势

    正像其它学科一样,一个大量人员研究了多年的学科,却很难给出一个严格的定义,模式识别如此,目前火热的人工智能如此,计算机视觉亦如此。与计算机视觉
    发表于 07-20 15:41 2次下载

    机器视觉计算机视觉的区别

    机器视觉计算机视觉的区别 机器视觉计算机视觉是两个相关但不同的概念。虽然许多人使用这两个术语
    的头像 发表于 08-09 16:51 1933次阅读

    人工智能计算机视觉方向是什么

    ”并作出决策。 计算机视觉是人工智能领域的一大分支,是以计算机和数字图像处理技术为手段,通过视觉信息的处理和分析来实现人工智能的各类应用。
    的头像 发表于 08-15 16:06 1605次阅读

    计算机视觉属于人工智能吗

    属于,计算机视觉是人工智能领域的一个重要分支。 引言 计算机视觉是一门研究如何使计算机具有视觉
    的头像 发表于 07-09 09:11 1133次阅读