2014年08月25日

来源:互联网 发布:div模块滚动加载 js 编辑:程序博客网 时间:2024/05/29 12:10

 图像预处理

 

3. 1 二值化处理
将图像导入matlab进行分析,发现原始图像像素值均在0 -
255内,而白色区域像素值一般在160以上,黑色区域一般在70
以下。为了提取出黑线,检测像素值的跳变是最直观的方案,但
是实际中一般黑白线边沿的像素值不是突然跳变的,而有一个过
渡过程。所以,将原始图像进行二值化处理不但有清晰边沿线的
功能,还能方便后续路径识别部分算法的设计与处理。
二值化处理就是对于输入图像的各个像素,先确定某个亮度
值,当像素的亮度超过该阈值时,则将对应输出图像的像素值设
为1,否则为0,原理公式如下[ 4 ] :
g ( x, y) =
1 f ( x, y) E t
0 f ( x, y) < t
其中, f ( x, y) , g ( x, y)分别为处理前、处理后的图像中处于
( x, y)位置上的某个像素的浓度值, t为阈值。图4为二值化后的
效果, 0为黑点, 1为白点。

 

 

 

 

3. 2 基于二值图像的中值滤波
二值化后的赛道状况已经非常明了,但是仍有干扰存在,这样对
赛道的识别及接下来的算法设计会造成一定的困难。因而,选择对
图像进行中值滤波。该方法是一种局部平均的平滑技术, 对脉冲干
扰和椒盐噪声的抑制效果好,能有效保护图像的边缘[5 ]。

 

 

2014年08月25日

2014年08月25日

 1x3窗口中值滤波是非常简单的一种去噪方法,是将某个像
素点和相邻两个像素点的像素值按大小顺序排列,取出中间值作
为该点的像素值。这种方法能够有效的抑制随机噪声,并且计算
量相比去噪常用的3x3模板要小得多。减小计算量能够有效的
提高单片机识别道路的速度,这一点对时间要求较高的实时处理
是非常重要的。

 

 

为了说明此方案的适用性,随机在图像数组中加入噪声点,
如图5。为了使接下来的验证过程更为方便,设计中将实际图像
用matlab进行二值化,导出一个二维数组,在验证算法时不同的
道路状况只需修改数组中的值即可。图6中a、b分别为1x3模板
和3x3模板中值滤波后的效果图。从图中可以看出虽然3x3模板
的去噪效果要稍好,但是1x3模板显然已经能去除绝大部分噪声
点。并且在实际赛道中噪声点的数量要比这里引入的噪声点少,
即使有极少部分噪声点没有滤除,通过接下来提取黑线算法同样可以消除影响。

因而从去噪效果和计算量两方面来考虑, 1x3模
板中值滤波更具有优势。

 

 

4 黑线中心提取

 

提取黑线中心部分是小车路径识别系统中最为重要的一个
环节,关系到智能小车运行质量的好坏。
这里黑线中心提取方法为:先判断每行的第一个点是否为白
点,如是白点则依次对白点进行计数(设计数为a) ,当遇到连续
黑点时则计数黑点个数(设计数为b) ,再次遇到白点时则退出该
行计数,此时黑线中心所在列为a + b /2;如果第一个为黑点,且不
是噪声点(即为连续的黑点) ,则直接对黑点计数(设计数为b) ,
当遇到连续白点后则退出计数,这种情况下得到的黑线中心位于
第b /2列。最后将从一幅图像上得到的所有中心位置按行存入
一个一维数组中。
但是不得不考虑两种比较特殊的情况,起始线和十字交叉
线。通过观察发现这两种情况下每行出现黑点的数量远远大于
黑线的黑点数(黑线一般能采集到2 - 3个黑点) ,所以当采集到
的黑点数超过正常值时,便判定这一行为特殊行,并赋予特殊标
志位(这里将特殊行中心点标志为50,因为经过图像处理后图像
变成383 20数组,标志为50能将特殊点和正常点很明显的区分
开,也方便了下面的改进差值算法) 。由于规则要求小车能识别
起始线,因而还需对特殊行进行分析。图7为采到起始线的情
况,可以看出起始线所在行具有多个跳变,考虑到车体偏离等情
况,可以用白点跳变为黑点的次数(方案中选2或3)来判定是否
为起始线,如果符合情况则标志出这一行。则其他的特殊行均为
十字交叉情况。2014年08月25日


图7 采到起始线效果
虽然在前面已经有去噪处理,但是偶尔还是会有干扰,这样
提取出来的某些行黑线中心位置就发生了跳变。同时,为了后续
的控制模块得到准确的道路信息,需要对特殊行及跳变点进行插
值处理,即赋予其前后两行的平均值作为黑线中心值。但是考虑
到会出现这样的复杂情况:连续两行出现跳变点或者特殊行的前
后出现跳变点,这时如果简单的按上面的方法进行插值,会插入
一个误差很大的中心点,使道路产生弯点。于是,在这里需要对
差值算法进行改进。图8为改进算法的流程图。改进算法考虑
了连续两个中心点需要插值的情况,先将当前点与前一个点比
较,计算其偏差值,如果偏差较大则为需要插值的点;接下来计算
前一个点与当前点之后一点的偏差,后面一点如果是误差点,则
当前点赋值前一点的值,如果后面一点为正常点则当前点取其前

后两点的平均值。

 

2014年08月25日

0 0
原创粉丝点击