本文转自个人公众号:https://mp.weixin.qq.com/s/mwg6PU22avf64kNb5bVQtA
本篇为《智能网联汽车先进驾驶辅助系统关键技术》读书笔记,简单粗暴的介绍相关概念后,以盲区预警作为usecase结尾。
1、环境感知技术在网联汽车的应用示意图
2、视觉传感器的类型及功能
按摄像头的工作方式,可以将其分为单目、双目、三目、环视;
摄像头又分为红外摄像头和普通摄像头;
根据需求的不同,选择不同的摄像头和镜头。
3、视觉传感器的功能
视觉传感器的功能主要有:
车道线识别;
障碍物识别;
交通标志和地面标志识别;
交通信号灯识别;
可行驶区域识别;
周围车辆感知;
交通状况感知;
道路状况感知;
车辆本身状态感知。
…………
4、环境感知流程
环境感知流程大体上如下:
图像采集-->预处理-->特征提取-->图像识别及分析-->输出
其中,
预处理部分根据需求的不同,可以包括:灰度、二值化、图像压缩、增强、复原、去噪滤波、resize()、直方图均衡化等等(这里推荐一本圣经级别的书--冈萨雷斯的 《数字图像处理》)。当然,如果需求为交通信号灯识别,那么肯定是不能进行二值化的。
特征提取部分,是为了更好的进行图像识别与分析,同样,根据待检测目标的不同,选用不同的特征,最简单的有颜色特征、形状特征、边缘特征等等。
5、视觉传感器在网联汽车上的应用
usecase:
我们以盲区监测算法为例
基于视觉传感器的盲区监测算法流程:
图像采集-->图像预处理-->目标(车辆)检测-->输出
其中 ,图像预处理包括:
a.灰度处理,因为人眼对绿色敏感度最高,对蓝色敏感度最低,取灰度值为:
I=0.3R+0.59G+0.11B-----------I为灰度化之后的灰度值,RGB分别代表红、绿、蓝颜色分量。
b.滤波处理,该步骤是为了去除环境产生的噪声,比如车辆抖动、光学噪声、图像采集过程带来的量化误差等等。最常用的滤波有均值滤波,中值滤波,高斯滤波……
以一维高斯滤波为例
double *getGuassionArray(int size, double sigma)
{
double sum = 0.0;
int kerR = size / 2;
double *arr = new double[size];
for (int i = 0; i < size; i++)
{
arr[i] = exp(-((i - kerR)*(i - kerR)) / (2 * sigma*sigma));
sum += arr[i];
}
for (int i = 0; i < size; i++)
{
arr[i] /= sum;
}
return arr;
}
c.目标(车辆)检测
此步骤中,有学者利用车在行进过程中产生的阴影做为车的特征来识别车辆;还有学者将车身的刚体特征作为鲜明的特征;另外还有车窗、保险杠等作为特征……
可以用传统的特征检测算法进行目标检测,比如:Cascade + HOG/DPM + Haar/SVM,不过精度和稳定性不是特别高;
也可以用深度学习,通过训练特征进行目标检测,如:R-CNN(Selective Search + CNN + SVM)、SPP-net(ROI Pooling)、Fast R-CNN(Selective Search + CNN + ROI)、Faster R-CNN(RPN + CNN + ROI)、SSD、YOLO系列……方法。