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

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

内容简介:利用计算机视觉进行道路检测,一般包括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

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

查看所有标签

猜你喜欢:

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

复杂网络理论及其应用

复杂网络理论及其应用

汪小帆、李翔、陈关荣 / 清华大学出版社 / 2006 / 45.00元

国内首部复杂网络专著 【图书目录】 第1章 引论 1.1 引言 1.2 复杂网络研究简史 1.3 基本概念 1.4 本书内容简介 参考文献 第2章 网络拓扑基本模型及其性质 2.1 引言 2.2 规则网络 2.3 随机图 2.4 小世界网络模型 2.5 无标度网络模型 ......一起来看看 《复杂网络理论及其应用》 这本书的介绍吧!

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

在线压缩/解压 JS 代码

在线进制转换器
在线进制转换器

各进制数互转换器

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换