从零开始的无人驾驶 01:Lanes Finding with Computer Vision

栏目: 编程工具 · 发布时间: 6年前

内容简介:利用计算机视觉进行道路检测,一般包括6部分:摄像头校正(camera calibration)、图像失真校正(distortion correction)、色彩/梯度二值化(color/gradient threshold)、视角转换 Perspective transform 、行道线检测(Detect lane lines)、 道路弯度测量(Determine the lane curvature)首先要对失真的程度进行测量,然后根据measurement的结果进行undistort这个东西叫做che

利用计算机视觉进行道路检测,一般包括6部分:摄像头校正(camera calibration)、图像失真校正(distortion correction)、色彩/梯度二值化(color/gradient threshold)、视角转换 Perspective transform 、行道线检测(Detect lane lines)、 道路弯度测量(Determine the lane curvature)

Calibration 校正

首先要对失真的程度进行测量,然后根据measurement的结果进行undistort

从零开始的无人驾驶 01:Lanes Finding with Computer Vision

这个东西叫做chessboard pattern, 用的时候从不同的角度拍这个chessboard,利用的是每个方块的corner去校正 (图像要记得转成灰度图)

从零开始的无人驾驶 01:Lanes Finding with Computer Vision

得到的结果其实只跟拍照的相机有关。对于每个的镜头,要单独做一遍这种校正。

Distorition 图像失真

理论上,只要不是针孔摄像机,基本都会存在图像失真的问题(透镜成像更快点,针孔相机这点上比不了)

从零开始的无人驾驶 01:Lanes Finding with Computer Vision

图像失真会影响到道路检测(将直线判断成曲线),车辆检测(用CNN检测的时候,识别出来的车比实际更大或者更小)

从零开始的无人驾驶 01:Lanes Finding with Computer Vision
从零开始的无人驾驶 01:Lanes Finding with Computer Vision

由透镜引起的失真主要是两个:

  • 径向畸变(Radial Distortion)

    原因是光线穿过透镜的边缘时发生的偏转大于穿过中心发生的偏转

    从零开始的无人驾驶 01:Lanes Finding with Computer Vision
  • 切线畸变(Tangential Distortion)

    原因是光线穿过透镜之后并没有垂直打在成像平面上

    从零开始的无人驾驶 01:Lanes Finding with Computer Vision

ROI (Region of Interest)

道路检测要先从摄像头视角获取道路信息,然后选取 ROI(目标区域) , 包括选颜色和选区域。

选颜色比较接近直觉, 路上的线也就两种颜色,要么白线,要么黄线。 白线其实比较好找

从零开始的无人驾驶 01:Lanes Finding with Computer Vision

但是黄线的话就不能直接用原图了。要先把原图分成RGB三层

从零开始的无人驾驶 01:Lanes Finding with Computer Vision

而黄色的线在蓝色那层是看不到的

从零开始的无人驾驶 01:Lanes Finding with Computer Vision

(因为是互补色)

从零开始的无人驾驶 01:Lanes Finding with Computer Vision

选区域是可以直接利用CV解决的问题。

从车头视角向前看,大部分像素都是没有用的。尤其是天空的部分。对于自动驾驶来说差不多等价于干扰信号,基本上可以直接过滤掉

从零开始的无人驾驶 01:Lanes Finding with Computer Vision
从零开始的无人驾驶 01:Lanes Finding with Computer Vision

Color Space 色彩空间

在RGB色彩空间(以RGB建立三维空间)中,白色是由红绿蓝三种颜色的最大值组成的。

从零开始的无人驾驶 01:Lanes Finding with Computer Vision

因此想获得白线,可以通过设置RGB值的阈值

从零开始的无人驾驶 01:Lanes Finding with Computer Vision

但是这种情况下,会丢失黄线的信息。一般的处理方式是使用别的色彩空间,比如HSV, HLS, LUV...

从零开始的无人驾驶 01:Lanes Finding with Computer Vision

其中HSV(色相、饱和度、明度)和HLS(色相、亮度、饱和度)使用最多

HLS (hue, saturation, lightness)

也叫HSL,甚至叫HSL的还更多点。

从零开始的无人驾驶 01:Lanes Finding with Computer Vision

其实图像本身在光亮条件下变化最大,HS信道一般倒是不怎么变。所以我们把图像按照HSL拆分,在S信道下黄线非常明显

从零开始的无人驾驶 01:Lanes Finding with Computer Vision

Canny Edge Detection

下一步是使用边缘检测算法寻找边线。如果我们把视图当成一张灰度图来看待,那么每一条边其实都在明暗块交替的位置

从零开始的无人驾驶 01:Lanes Finding with Computer Vision

通过计算亮度的变化,可以把原图转化成一张梯度图

从零开始的无人驾驶 01:Lanes Finding with Computer Vision

然后再将结果锐化,得到亮度数值变化最大的像素点

从零开始的无人驾驶 01:Lanes Finding with Computer Vision

实际上,在做Canny算法之前,要对图像做 高斯平滑(Gaussian smoothing / Gaussian Blur) ,消除噪声和伪梯度点

(题外话) Sobel Operator 索伯算子

首先,为什么卷积神经网络会有卷积(convolution)这种操作…

看完Sobel算子总算懂了,卷积这种运算讲究的是一个信号叠加。相比于Canny边缘检测,Sobel边缘检测其实更容易理解(然而还是Canny效果好)。

Hough Transform 霍夫变化

Hough Transform是图像变化中的经典算法,主要用来寻找图像中符合某种特征的集合,说白了就是检测直线、圆、椭圆。

从零开始的无人驾驶 01:Lanes Finding with Computer Vision

Hough变化要将笛卡尔坐标下的点变化到霍夫极坐标系,原来的点共线问题会由此转化计算成曲面在极坐标下的共点,效果上就是该算法对边缘间断不敏感。大致上是这个意思,实际操作的时候是统计累加空间里的局部最大值(峰值),以该峰值作为结果(所以说抗噪能力还是很强的)。

从零开始的无人驾驶 01:Lanes Finding with Computer Vision

总结一下就是:

原图 -> 灰度图 -> 边缘检测 -> 直线检测 -> 过滤掉斜率过低的直线 -> 将最后结果叠加回原图

从零开始的无人驾驶 01:Lanes Finding with Computer Vision
从零开始的无人驾驶 01:Lanes Finding with Computer Vision
从零开始的无人驾驶 01:Lanes Finding with Computer Vision

Perspective Transform

由于Perspective的存在,2D图像存在近大远小的现象

从零开始的无人驾驶 01:Lanes Finding with Computer Vision

这样会导致原本平行的行道线,出现汇聚的趋势

从零开始的无人驾驶 01:Lanes Finding with Computer Vision

因此需要把视角转换成俯视

从零开始的无人驾驶 01:Lanes Finding with Computer Vision

将行道线还原到平行

从零开始的无人驾驶 01:Lanes Finding with Computer Vision

Lane Curvature

解决道路弯曲(Lane Curvature)问题,实际上比较复杂。先要依次校正原图

从零开始的无人驾驶 01:Lanes Finding with Computer Vision

选取ROI

从零开始的无人驾驶 01:Lanes Finding with Computer Vision
然后要进行 视角转换(Perspective Transform)
从零开始的无人驾驶 01:Lanes Finding with Computer Vision

最后根据俯视图(Top-down view) 用二次函数拟合行道线

从零开始的无人驾驶 01:Lanes Finding with Computer Vision

Sliding windows 滑动窗口

在检测弧线的过程中,首先在图像底部选取一小段,在垂直方向做直方图

从零开始的无人驾驶 01:Lanes Finding with Computer Vision

将顶点连接,变成峰值图

从零开始的无人驾驶 01:Lanes Finding with Computer Vision

出现峰值的地方是行道线的位置

从零开始的无人驾驶 01:Lanes Finding with Computer Vision

以此为起点,使用逐步向上移动,每次处理一小段图像

从零开始的无人驾驶 01:Lanes Finding with Computer Vision

这种检测模式叫做滑动窗口

从零开始的无人驾驶 01:Lanes Finding with Computer Vision

一旦拥有了第一帧的行道线位置,在随后的检测中可以利用边缘检测 + ROI 的方式获得之后的行道线

从零开始的无人驾驶 01:Lanes Finding with Computer Vision

得到道路的二次函数并没有用,从驾驶的角度来看,真正需要的是当前的转弯弧度。所以需要求出图片组的曲率半径(radius of curvature),在对应计算出现实中的曲率半径

从零开始的无人驾驶 01:Lanes Finding with Computer Vision

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

图解HTTP

图解HTTP

【日】上野宣 / 于均良 / 人民邮电出版社 / 2014-4-15 / 49.00元

本书对互联网基盘——HTTP协议进行了全面系统的介绍。作者由HTTP协议的发展历史娓娓道来,严谨细致地剖析了HTTP协议的结构,列举诸多常见通信场景及实战案例,最后延伸到Web安全、最新技术动向等方面。本书的特色为在讲解的同时,辅以大量生动形象的通信图例,更好地帮助读者深刻理解HTTP通信过程中客户端与服务器之间的交互情况。读者可通过本书快速了解并掌握HTTP协议的基础,前端工程师分析抓包数据,后......一起来看看 《图解HTTP》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具