计算机视觉实验数学形态学,基于计算机视觉的高速公路标识线的识别

摘 要:高速公路道路检测是IVS(智能车辆系统)中不可缺少的组成部分,由于路况简单、干扰信息量少,所以对道路识别就转为对道路标识线的识别。通过对车载摄像系统采集的图像进行图像分割、数学形态学滤波、轮廓提取,改进的区域填充识别出道路标识线。使用感兴趣区域,减少图像处理时间和提高道路识别的可靠性。实验表明,本文研究的系列算法具有良好的实时性、可靠性。

关键字:计算机视觉; 公路标识线; 图像分割; 数学形态学; 识别

1.引言

20世纪80年代,伴随着与机器人技术密切相关的计算机、电子、通信技术的飞速发展,智能车辆进入了深入、系统、大规模研究阶段并且取得了突破性的发展[1,2],如国外的有德国的VaMP车辆系统[3]、美国的NavLab系统[4,5]等,国内的有清华大学的THMR-V[6]、吉林大学最新研制的JLUIV-IV等。在智能车辆导航技术方面,计算机视觉系统与初期的地下埋电缆的方式以及道路中间铺设磁块导航的方式等相比有着价格低廉,用途多样,结构简单,能方便与其他传感器进行数据融合等特点,所以有着广泛的应用前景。智能车辆导航的第一步是道路的检测与识别。高速公路运输的高效率、大运量、低成本等优势使研究智能车辆面向高速公路的道路的检测与识别算法很有必要。道路识别就是分析智能车辆的预瞄图像,检测出车辆相对于车道的偏差,并将偏差信息送给车辆系统,从而实现汽车“防偏安全行驶”。本文描述的一种对预瞄图像进行图像分割、数学形态学滤波、轮廓提取,改进的区域填充等识别出道路标识线的算法,实验表明具有良好的实时性、可靠性。

本文所用的图像处理方法并不需要考虑图像降质的原因,只将图像中感兴趣的特征能有选择地突出,衰减其不需要的特征。为了减少运算时间我们首先将图像由24位的RGB格式转为256色的灰度图像,整个实验的处理流程如图1所示,下面分别阐述各部分的原理。

2.1 图像分割f (x,y)

图像分割是对图像进一步分析、识别的前提,分割的准确性将直接影响后续处理技术的有效性。图像分割的方法有多种,比如阈值分割,区域分裂与合并以及区域生长等。本文选用的是阈值分割,阈值分割时最常用的一种图像分割技术,其特点是操作简单,基本原理是通过设定不同的特征阈值,把图像像素点分为若干类。设初始图像为f (x,y),按照一定的准则在f (x,y)中找到特征值T,将图像分割为两个部分――前景或者背景,分割后的图像为:若取b0=0(黑),b1=1(白)即为我们通常所说的图像二值化。然而T的选择将直接影响分割的准确性以及由此产生的图像描述、分析的正确性。确定T的方法有多种,比如直方图变化法,Otsu法,迭代阈值算法等。本文主要研究并实现了迭代阈值法[7],算法步骤为:

2.2 数学形态学

腐蚀是一种最基本的数学形态运算,其作用是消除物体边界点,使边界向内部收缩过程,可以把小于结构元素的物体去除。这样选取不同大小的结构元素,就可以去除不同大小的物体。每当在目标图像中找到一个与结构元素相同的子图像时,就把该子图像中结构元素的原点位置对应的那个像素位置标注出来,目标图像上被标注出来的所有像素组成的集合,即为腐蚀运算的结果。其实质就是在目标图像中标出那些与结构元素相同的自图像的原点位置的像素。设a为目标图像,b为结构元素,则目标图像a被结构元素b腐蚀的数学表达式为:

其中,x表示集合平移的位移量, 是腐蚀运算的运算符。

膨胀是数学形态学的另一种基本运算。膨胀的作用与腐蚀刚好相反,其作用是是对二值化物体边界点进行扩充,将与物体接触的所有背景点合并到该物体中,使边界向外部扩张的过程。如果两个物体之间的距离比较近,则膨胀运算可能会把两个物体连通到一起,膨胀对填补图像分割后物体中的空洞很有用。其实质就是先对结构元素b做关于其原点的反射得到反射集合bv,然后在目标图像a上将bv平移x,则那些bv平移后与目标图像a至少有一个非零公共元素相交时,对应的原点位置所组成的集合就是膨胀运算的结果。

设a为目标图像,b为结构元素,则目标图像a被结构元素b膨胀的数学表达式为:

其中,x表示集合平移的位移量, 是膨胀运算的运算符。

开运算也是数学形态学中的一种基本运算,使用同一个结构元素对目标图像先进行腐蚀运算,再进行膨胀运算的过程。原图经过开运算后,能够去除孤立的小点、毛刺和小的连通区域,去除小物体,平滑大物体的边界,同时并不明显改变面积。设a为目标图像,b为结构元素,则结构元素b对目标图像a的开运算数学表达式为:

2.3 轮廓提取与边界跟踪

轮廓提取的目的是获取目标区域的外部轮廓特征,为形状分析和目标识别做准备。二值图像的轮廓提取算法很简单,就是掏空目标区域的内部点。假设图像的目标像素是白色,背景像素是黑色,则如果图像中的某个像素为黑色,且它的8个邻点都是黑色时,表明该点是内部点,否则是边界点。将判断出的内部像素置为背景色,对所有内部像素执行操作便可完成图像轮廓的提取。所谓的边界跟踪就是依次记录下边界上的各个像素,是按照某种顺序依次找出物体上的其余像素,直到又回到起始点,完成整条边界的跟踪。本文按照从左到右,从上到下的顺序扫描图像,找到目标物体最左边的边界点P0,显然,这个点的左侧及上侧都不可能存在边界点,因此不妨从左下方向逆时针开始探查,如左下方的点是黑点,直接跟踪至此边界点,否则探查方向逆时针45度,直至找到第一个黑点为止,跟踪至此边界点。找到边界点后,在当前探查方向的基础上顺时针回转90度,继续用上述方法搜索下一个边界点,直到探查又回到初始过程的边界点P0,则可完成整条边界的跟踪[8]。

2.4 种子区域填充

种子区域填充就是在已有的边界内取一点,从改点开始填充整个边界包围的区域,取得该点就是“种子”。对于4连通的边界,其围成的内部区域是8连通的,而8连通的边界围成的内部区域却是4连通的。其算法概要如下:

种子的选取时种子区域填充的关键所在,一般的情况下是将种子点选在图像的中间或通过人工选择种子点,这些都不能满足智能车辆的要求。由于本文研究的是高速公路的道路识别,因其道路平坦,障碍物少等原因,我们可以通过先验知识将车载摄像头的角度调制到一定角度以减少我们不感兴趣的区域。本文通过研究与实验发现将种子点设置为高度的1/2,宽度的1/5能达到本文的要求。具体效果在实验分析可见。

3.实验结果与分析

在进行图像分割后可以获得道路的二值图。图2针对此二值图依次进行数学形态学滤波,轮廓提取与边界跟踪,种子区域填充,开运算去除噪声。下面是每步运行完的效果图以及最终的道路标志线识别图。

4.结论

本文对车载摄像系统采集的图像进行图像分割、数学形态学滤波、轮廓提取,改进的区域填充等算法识别出道路标识线,通过调节车载摄像机的角度获取感兴趣区域,减少图像处理时间和提高道路识别的可靠性。实验表明,该算法在弯道和直道的道路标志线的识别具有良好的实时性、可靠性。

参考文献

[1] Figueiredo L, Jesus I,Machado, J A T_ Towards the development of intelligent transportation systems [C].Intelligent Transportation Systems, Proceedings IEEE, 2001:1206-1211.

[2] 杨东凯,吴令培,张其善. 智能交通系统(工TS)的发展及其模型化研究[J]. 北京航空航天大学学报,2000,26(1): 22-25.

[3] Dickmanns E D, etc. The Seeing Passenger Car‘VaMoRs-P’[C]. Proceedings 1994 IEEE Symposia on Intelligent Vehicle. IEEE Press Piscataway, N J, 1994:68-73.

[4] Jochem T M, Balu}a S. A Massively Parallel Road Follower[C] .Computer Architectures for Machine Perception, 1993:2-12.

[5] Thorpe C, Hebert M H, etc. Vision and Navigation for the Carnegie- Mellon Navlab [J]. IEEE Transaction on Pattern and Machine Intelligence. 1988, PAMI-10(3):362-373.

[6] 朱志刚,徐光. 视觉导航的多尺度全方位时空图像综合理解[J]. 清华大学学报(自然科学版),1997.37(3): 12-15.

[7] 何东健.数字图像处理[M]. 西安电子科技大学出版社,2008

[8] 张铮,王艳平,薛桂香. 数字图像处理与机器视觉[M].人民邮电出版社,2010

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。在编写C程序时,需要注意变量的声明和定义、指针的使用、内存的分配与释放等问题。C语言中常用的数据结构包括: 1. 数组:一种存储同类型数据的结构,可以进行索引访问和修改。 2. 链表:一种存储不同类型数据的结构,每个节点包含数据和指向下一个节点的指针。 3. 栈:一种后进先出(LIFO)的数据结构,可以通过压入(push)和弹出(pop)操作进行数据的存储和取出。 4. 队列:一种先进先出(FIFO)的数据结构,可以通过入队(enqueue)和出队(dequeue)操作进行数据的存储和取出。 5. 树:一种存储具有父子关系的数据结构,可以通过中序遍历、前序遍历和后序遍历等方式进行数据的访问和修改。 6. 图:一种存储具有节点和边关系的数据结构,可以通过广度优先搜索、深度优先搜索等方式进行数据的访问和修改。 这些数据结构在C语言中都有相应的实现方式,可以应用于各种不同的场景。C语言中的各种数据结构都有其优缺点,下面列举一些常见的数据结构的优缺点: 数组: 优点:访问和修改元素的速度非常快,适用于需要频繁读取和修改数据的场合。 缺点:数组的长度是固定的,不适合存储大小不固定的动态数据,另外数组在内存中是连续分配的,当数组较大时可能会导致内存碎片化。 链表: 优点:可以方便地插入和删除元素,适用于需要频繁插入和删除数据的场合。 缺点:访问和修改元素的速度相对较慢,因为需要遍历链表找到指定的节点。 栈: 优点:后进先出(LIFO)的特性使得栈在处理递归和括号匹配等问题时非常方便。 缺点:栈的空间有限,当数据量较大时可能会导致栈溢出。 队列: 优点:先进先出(FIFO)的特性使得

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值