Lanes Finding with Computer Vision
利用计算机视觉进行道路检测,一般包括6部分:摄像头校正(camera calibration)、图像失真校正(distortion correction)、色彩/梯度二值化(color/gradient threshold)、视角转换 Perspective transform 、行道线检测(Detect lane lines)、 道路弯度测量(Determine the lane curvature)
Calibration 校正
首先要对失真的程度进行测量,然后根据measurement的结果进行undistort
Distorition 图像失真
理论上,只要不是针孔摄像机,基本都会存在图像失真的问题(透镜成像更快点,针孔相机这点上比不了)
由透镜引起的失真主要是两个:
-
径向畸变(Radial Distortion)
原因是光线穿过透镜的边缘时发生的偏转大于穿过中心发生的偏转 -
切线畸变(Tangential Distortion)
原因是光线穿过透镜之后并没有垂直打在成像平面上
ROI (Region of Interest)
道路检测要先从摄像头视角获取道路信息,然后选取ROI(目标区域), 包括选颜色和选区域。
选颜色比较接近直觉, 路上的线也就两种颜色,要么白线,要么黄线。 白线其实比较好找
但是黄线的话就不能直接用原图了。要先把原图分成RGB三层
而黄色的线在蓝色那层是看不到的
选区域是可以直接利用CV解决的问题。
从车头视角向前看,大部分像素都是没有用的。尤其是天空的部分。对于自动驾驶来说差不多等价于干扰信号,基本上可以直接过滤掉
Color Space 色彩空间
在RGB色彩空间(以RGB建立三维空间)中,白色是由红绿蓝三种颜色的最大值组成的。
但是这种情况下,会丢失黄线的信息。一般的处理方式是使用别的色彩空间,比如HSV, HLS, LUV...
HLS (hue, saturation, lightness)
也叫HSL,甚至叫HSL的还更多点。
Canny Edge Detection
下一步是使用边缘检测算法寻找边线。如果我们把视图当成一张灰度图来看待,那么每一条边其实都在明暗块交替的位置
实际上,在做Canny算法之前,要对图像做高斯平滑(Gaussian smoothing / Gaussian Blur) ,消除噪声和伪梯度点
(题外话) Sobel Operator 索伯算子
首先,为什么卷积神经网络会有卷积(convolution)这种操作…
看完Sobel算子总算懂了,卷积这种运算讲究的是一个信号叠加。相比于Canny边缘检测,Sobel边缘检测其实更容易理解(然而还是Canny效果好)。
Hough Transform 霍夫变化
Hough Transform是图像变化中的经典算法,主要用来寻找图像中符合某种特征的集合,说白了就是检测直线、圆、椭圆。
总结一下就是:
原图 -> 灰度图 -> 边缘检测 -> 直线检测 -> 过滤掉斜率过低的直线 -> 将最后结果叠加回原图
Perspective Transform
由于Perspective的存在,2D图像存在近大远小的现象
Lane Curvature
解决道路弯曲(Lane Curvature)问题,实际上比较复杂。先要依次校正原图
Sliding windows 滑动窗口
在检测弧线的过程中,首先在图像底部选取一小段,在垂直方向做直方图
得到道路的二次函数并没有用,从驾驶的角度来看,真正需要的是当前的转弯弧度。所以需要求出图片组的曲率半径(radius of curvature),在对应计算出现实中的曲率半径
最后
还有一些小的细节,包括Offset, Sanity Check, Look-Ahead Filter, etc. 懒得讲
Vehicle Detection 车辆检测
在 CNN (Convolutional Neural Networks 卷积神经网络) 普遍运用之前,车辆检测是通过使用条件随机场或者SVM(支持向量机)来实现的。操作上分为两步,先是从图像上提取特征,然后基于特征建立模型,判断车辆位置。
template matching 模板匹配
对于图像上的每一块颜色,计算与背景图的distance
甚至更硬核一点,直接把各种可能的车辆图片存起来,然后跟相机视角的图片进行比较
这类解决方案统称 template matching
Color Histogram
template matching的缺陷也很明显,对于没有预存过的模板,自然无从识别。因此出现了 Color Histogram方案
HOG
Histogram of Oriented Gradients (定向梯度直方图), 相比于之前的特征,HOG特征更加健壮,并且无视颜色的影响。
操作的时候,首先捕捉图像的轮廓与纹理信息
Features Combination
首先是数据预处理,这里主要是进行特征组合。
比如HOG特征是针对梯度信息的特征,HSV特征则是针对颜色信息的特征
Sliding Windows
使用滑动窗口进行车辆检测,在这种场景下有一些机巧
首先还是ROI, 车辆其实只会出现在图片的下半块区域
Multiple Detection
最后对于同一车辆的Multiple Detection
Build Model & Tracking
Behavior Cloning 行为克隆
使用神经网络进行无人驾驶的理论基础来源于Imitation Learning (模仿学习)。行为克隆算是Imitation Learning的一种。思路倒是很简单,将人类驾驶作为基础数据全部收集下来,然后让神经网络去拟合数据。目前Tesla主要采用的就是Behavior Cloning.
这类端到端的解决方案基本上是一个路子,优点:简单且有效,缺点:受限于收集的数据。因为训练集总是有限的,如果出现了神经网络之前没见过的数据,那么效果就会很差。
一个比较经典的条件是天气,下雨天的路面跟晴天的路面不一样,有雾的天气下道路能见度也会对摄像头收集的数据有很大影响。