ADAS可行驶区域道路积水反光区域的识别算法

Water logging area reflecting recognition algorithm for ADAS

1. 工程概要

1.1  概述:

随着社会的发展和技术的进步,传统上远、近光灯机械、定向转变的前照灯,已经无法满足人们日益增长的形式安全需要,于是更为智能高效车灯应运而生。未来的车灯能根据周边环境和环境的光源变化调整自身的配光方式,提供更大的照明范围和照明距离,同时也能改善传统前照灯的照明死角,因此可以显著提高行车安全性和驾驶舒适性。

尤其在下雨天,路面交通情况要比晴天情况复杂很多。如果车前方有积水,且本车灯光的照射会使对向来车产生炫目的积水区域,会给驾驶员带来一定的风险。因此,智能化车灯需要检测积水的反光区域,并采取措施。

2. 研究目标

在汽车行驶过程中,道路上不仅仅远光会对驾驶员的眼睛形成炫目,雨天积水受到其他光源的照射形成强烈的反射光也会对驾驶员的形成强烈的炫目。不仅如此由于路面上通常会有多种光源,分别有主动光源和被动光源,并且积水的区域主要出于地面,因此我们需要处理图像识别出哪些是道路哪些是非道路区域,在道路的区域中再识别主动光源和被动光源。

因此本文旨在实时检测前方路面信息,通过特征检测,确定积水区域的中心位置信息,并检测积水区域的面积区域。视觉感知模块通过积水区域的位置信息,由大灯实现对积水区域的实时的自适应反光弱化控制,防止积水区域强烈的反光对来车驾驶员造成眩目。

3. 研究范围定义

- 各种路面上积水反射光的检测。

- 路面上的主动光源和被动光源的检测。

- 反射光的强度和反射光区域的检测。

- 对下雨天、天阴以及各种复杂路况下,路面上积水反射光的多场景识别。

4. 产品要求

4.1综述

运用图像模式识别技术进行湿滑路判别已经成为不利天气下道路交通安全保障技术研究的热点。通过图像的处理和深度学习,我们能够获得路面轮廓,亮度和像素来判断复杂路面上的路况,并进行识别和判断。

开发基于Gauss滤波、canny边缘检测,识别路面区域,识别主动和被动光源。通过反射光的强度确定反射源的位置和坐标以及积水区域的长宽高。开发目标能够在多场景下能够识别路面的积水的反射光情况,并能保证程序的实时性和鲁棒性。

4.2 技术开发方案

1)图像裁剪:通过设定图像ROI区域,拷贝图像获得裁剪图像。

2)图像二值化:就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果的过程。在数字图像处理中,二值图像占有非常重要的地位,图像的二值化使图像中数据量大为减少,从而能凸显出目标的轮廓。

3)形态学滤波:数字图像处理中的形态学处理是指将数字形态学作为工具从图像中提取对于表达和描绘区域形状有用处的图像分量,比如边界、骨架以及凸壳,还包括用于预处理或后处理的形态学过滤、细化和修剪等。图像形态学处理中我们感兴趣的主要是二值图像。

4)Canny边缘检测:Canny边缘检测算子是John F. Canny于1986年开发出来的一个多级边缘检测算法。Canny的目标是找到一个最优的边缘检测算法,最优边缘检测的含义,如下所示:

(A)最优检测:算法能够尽可能多地标识出图像中的实际边缘,漏检真实边缘的概率和误检非边缘的概率都尽可能小;

(B)最优定位准则:检测到的边缘点的位置距离实际边缘点的位置最近,或者是由于噪声影响引起检测出的边缘偏离物体的真实边缘的程度最小;

(C)检测点与边缘点一一对应:算子检测的边缘点与实际边缘点应该是一一对应。

道路交通场景光源来源复杂,积水的反射区域主要来自于路面,因此,我们需要定反射光源路面的反射区域。通过路面的识别,我们可以通过路面色彩和表面的纹理来识别路面的,并进行边缘区域的提取。

5)道路颜色特征的提取

公路路面的材质主要是柏油路面,因此可以根据观察路面的颜色,提取各种路面状态下的颜色特征值进行路面种类的识别。在机器视觉中,常用的颜色模型可以分为RGB模型,HIS模型以及HSV模型。由于每个模型都有大量的数据,我们可以用主成分分析来将数据降维,从而来减少计算量。

6)道路纹理特征提取

由于路面状态受地面层的温度和湿度以及大气等多方面的影响,单单通过色彩可能无法准确获得路面区域。因此,我们可以通过获取路面图像的纹理来进行路面的识别。目前对路面纹理提取的方法主要有:灰度共生矩阵,Gabor小波变换灯方法。

灰度共生矩阵:

灰度共生矩阵,指的是一种通过研究灰度的空间相关特性来描述纹理的常用方法。 1973年Haralick等人提出了用灰度共生矩阵来描述纹理特征。由于纹理是由灰度分布在空间位置上反复出现而形成的,因而在图像空间中相隔某距离的两像素之间会存在一定的灰度关系,即图像中灰度的空间相关特性。

直觉上来说,如果图像的是由具有相似灰度值的像素块构成,则灰度共生矩阵的对角元素会有比较大的值;如果图像像素灰度值在局部有变化,那么偏离对角线的元素会有比较大的值。通常可以用一些标量来表征灰度共生矩阵的特征,例如,对比度,能量,相关性,熵等参数。

Gabor小波变换灯方法:

Gabor滤波方法的主要思想是:不同纹理一般具有不同的中心频率及带宽,根据这些频率和带宽可以设计一组Gabor滤波器对纹理图像进行滤波,每个Gabor滤波器只允许与其频率相对应的纹理顺利通过,而使其他纹理的能量受到抑制,从各滤波器的输出结果中分析和提取纹理特征,用于之后的分类或分割任务。Gabor滤波器提取纹理特征主要包括两个过程:①设计滤波器(例如函数、数目、方向和间隔);②从滤波器的输出结果中提取有效纹理特征集。

7)被动光源和主动光源检测

在路面上会有主动光源和被动光源,因此,我们需要判别主动光源和被动光源的差异来进行分类。

夜间路面的反光主要来源于车灯。车灯往往是高色温高亮度的光源,反射光源和主动光源的光照特性不同,因此我们需要找到光源不同的特点并进行筛选主动光源和被动光源的。

8)自适应的灰度调整

由于路面上会有不同的亮度情况,因此我们需要实现自适应的图片二值化算法。在不同的亮度工况下,我们可以通过获得不同亮度区域。

5. 性能指标

1)识别路面积水区域,并能够给出积水区域的中心点物理坐标(x,y,z)

2)积水区域的等效矩形长、宽(或等效不规则图形的各个边长参数)

3)最小识别距离(积水区域下边缘距离本车的最小纵向距离):45m(即本车以80km/h行驶,至少能提前2秒识别到积水区域)

4)能够给出识别最大积水区域识别面积的大小(即摄像头能识别的最大的积水区域面积)。

ADAS可行驶区域道路积水反光区域的识别算法的更多相关文章

  1. 2017年研究生数学建模竞赛-E题 MATLAB 作战区域道路示意图

    MATLAB 画区域作战图 clear load('output_path1.mat') k = 1:130; gplot(edge(k,k),loc(k,:),'c-') title('作战区域道路 ...

  2. Java内存区域和判断对象“死”“活”算法

    转载自: http://www.cnblogs.com/aigongsi/archive/2012/04/06/2434771.html java与C,c++有很大的不同就是java语言开发者不需要关 ...

  3. 洛谷P3639 [APIO2013] 道路费用 [生成树的特殊算法]

    题目传送门 道路费用 格式难调,题面就不放了. 分析: 这是一道要细(yan)心(jing)的生成树的好(gui)题. 首先我们看到$k$的范围非常小,那么我们就可以直接$2^k$枚举每一条加边是否选 ...

  4. 基于候选区域的深度学习目标检测算法R-CNN,Fast R-CNN,Faster R-CNN

    参考文献 [1]Rich feature hierarchies for accurate object detection and semantic segmentation [2]Fast R-C ...

  5. 使用Python基于VGG/CTPN/CRNN的自然场景文字方向检测/区域检测/不定长OCR识别

    GitHub:https://github.com/pengcao/chinese_ocr https://github.com/xiaofengShi/CHINESE-OCR |-angle 基于V ...

  6. ADAS芯片解决方案汇总

    ADAS(高级辅助驾驶系统),是指利用安装于车上各式各样的传感器,在第一时间收集车内的环境数据,进行静.动态物体的辨识.侦测与追踪等技术上的处理,从而能够让驾驶者在最快的时间察觉可能发生的危险. 在过 ...

  7. mser 最大稳定极值区域(文字区域定位)算法 附完整C代码

    mser 的全称:Maximally Stable Extremal Regions 第一次听说这个算法时,是来自当时部门的一个同事, 提及到他的项目用它来做文字区域的定位,对这个算法做了一些优化. ...

  8. 【Unity游戏开发】UGUI不规则区域点击的实现

    一.简介 马三从上一家公司离职了,最近一直在出去面试,忙得很,所以这一篇博客拖到现在才写出来.马三在上家公司工作的时候,曾处理了一个UGUI不规则区域点击的问题,制作过程中也有一些收获和需要注意坑,因 ...

  9. 《深入java虚拟机》读书笔记之Java内存区域

    前言 该读书笔记用于记录在学习<深入理解Java虚拟机--JVM高级特性与最佳实践>一书中的一些重要知识点,对其中的部分内容进行归纳,主要是方便之后进行复习. 运行时数据区域 Java虚拟 ...

随机推荐

  1. 深度解析Django REST Framework 批量操作

    我们都知道Django rest framework这个库,默认只支持批量查看,不支持批量更新(局部或整体)和批量删除. 下面我们来讨论这个问题,看看如何实现批量更新和删除操作. DRF基本情况 我们 ...

  2. 2. robot framework 关键字,变量,循环

    1 关键字的使用 RF的能力是由关键字提供的,所以,我们必须对RF的常用关键字有个了解,这样才能把RF用好. 最常用的关键字就在RF的标准库中 http://robotframework.org 其中 ...

  3. flex 的 三个参数 flex:1 0 auto

    flex :flex-group  flex-shirk  flex-basis ①.flex-group 剩余空间索取 默认值为0,不索取 eg:父元素400,子元素A为100px,B为200px. ...

  4. hdu2100 26进制加法

    题意:       给你两个26进制数,让你算出他们两个的和. 思路:      水题不解释了,注意这样的数据 AAA AAA 输出A #include<stdio.h> #include ...

  5. LA3213加密

    题意:       白书上有些题的题意说的太蛋疼了,这个题的意思是说有两种加密方式,一种是交换位置,另一种是一一映射,交换位置是指如ABCD 可以加密成DCBA 也可以加密成ACBD就是把某些字母的位 ...

  6. 关于 C/C++ 函数调用约定

    关于 C/C++ 函数调用约定,大多数时候并不会影响程序逻辑,但遇到跨语言编程时,了解一下还是有好处的. VC 中默认调用是 __cdecl 方式,Windows API 使用 __stdcall 调 ...

  7. 谁动了我的 Linux?原来 history 可以这么强大!

    当我们频繁使用 Linux 命令行时,有效地使用历史记录,可以大大提高工作效率. 在平时 Linux 操作过程中,很多命令是重复的,你一定不希望大量输入重复的命令.如果你是系统管理员,你可能需要对用户 ...

  8. 【Azure Developer】使用Microsoft Graph API 批量创建用户,先后遇见的三个错误及解决办法

    问题描述 在先前的一篇博文中,介绍了如何使用Microsoft Graph API来创建Azure AD用户(博文参考:[Azure Developer]使用Microsoft Graph API 如 ...

  9. Linux利用nc命令脚本批量检测服务器指定端口是否开放

    一.nc命令检测端口的用法 # nc -v -w 10 %IP% -z %PORT% -v 显示指令执行过程. -w <超时秒数> 设置等待连线的时间. -u 表示使用UDP协议 -z 使 ...

  10. mysql 配置文件概述

    mysql 配置文件概述 mysql 配置文件 mysql 的配置文件为 /etc/my.cnf 配置文件查找次序:若在多个配置文件中均有设定,则最后找到的最终生效 /etc/my.cnf --> ...