《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 设计应用 > 线性CCD图像处理与识别算法研究
线性CCD图像处理与识别算法研究
2015年微型机与应用第8期
廖伟权,刘海刚,项华珍,梁焯斌,范智晖
(五邑大学 信息工程学院,广东 江门 529020)(五邑大学 信息工程学院,广东 江门 529020)
摘要: 介绍了基于线性CCD传感器的智能小车整体框架、图像采集和处理以及路径识别控制算法。智能小车控制系统中选择线性CCD传感器进行路径识别,对采集的像素点进行中值滤波、二值化等处理,提取赛道两边的黑色边缘,取其中心位置作为小车的引导方向,控制舵机的转向,使得小车能够稳定、可靠地高速行驶。
Abstract:
Key words :

  摘  要: 介绍了基于线性CCD传感器的智能小车整体框架、图像采集和处理以及路径识别控制算法。智能小车控制系统中选择线性CCD传感器进行路径识别,对采集的像素点进行中值滤波、二值化等处理,提取赛道两边的黑色边缘,取其中心位置作为小车的引导方向,控制舵机的转向,使得小车能够稳定、可靠地高速行驶。
  关键词: 线性CCD;数据采集;中值滤波;动态阈值人字形弯道识别
0 引言
  在全国大学生“飞思卡尔”杯智能汽车竞赛光电组的技术要点中,线性CCD图像处理和路径识别这两个环节尤其重要,其决定着小车能否安全可靠快速运行[1]。根据比赛规则和以往的比赛经验,小车能否以最短的时间完成比赛,确保不冲出赛道,都与小车的速度和路径识别有着密切的关系。因此,路径的识别和处理是整个比赛的关键,它能够有效地控制智能小车在不同的路段该如何选择合理、高效的速度完整地去完成比赛,从而可以提高整场比赛中的平均速度。
  基于线性CCD传感器的智能小车控制系统结构如图1所示。该系统中执行机构是舵机和电机,感应机构是线性CCD传感器。路径识别是实现智能小车沿赛道自主运行的信息基础,获得范围广而精确的路径信息是提高智能小车运行速度的关键[2]。
1 图像采集
  一般的图像CCD传感器有模拟的和数字的,线性CCD传感器(TSL1401CL)输出的信号是模拟的。图像CCD传感器要处理的数据量比较大,使用硬件二值化比较好[3]。但对于线性CCD传感器来说,数据量的处理没有图像CCD传感器大,硬件二值化的优势并不明显,所以直接采集模拟信号。采用固定曝光时间,整个函数运行一遍的周期是10 ms,响应时间充足,图像稳定。

Image 001.png

  在实际应用中采用拉普兰德的开源程序代码,再根据单片机的特性进行修改,缩短采集时间,提高响应速度,使采集的图像稳定下来是最重要的。
2 图像处理
  线性CCD有中值滤波法、二值化处理法、边缘增强法等图像处理方法。由于边缘增强法的目的在于突出赛道的边缘信息,增强路径的识别,经边缘增强后的图像能更清晰地显示出路径的边界[4]。但是经过实践,对于飞思卡尔智能车竞赛黑白明显的赛道而言,边缘增强法的效果并不十分明显,所以舍弃了该方法。
  2.1 中值滤波法
  采集回来的数据可能上下波动,不够稳定,这时就需要调用中值滤波函数。中值滤波是一种非线性数字滤波器技术,用于去除图像中的噪声。其设计思想就是检查采集像素点的值,并判断它是否代表了信号。从第一个像素点开始,将其数值和相邻的两个像素点的数值进行排序,3个像素点中数值为中值的像素点作为代表信号并输出。然后,丢弃最早的值,取得新的采样,重复上面的计算过程到127个点为止[5]。
  中值滤波程序如下:
  short get_mid(short a,short b,short c)
  //get_mid取中间值b
  {
  short x=0;
  if(a>b){x=b;b=a;a=x;}
  if(b>c){x=c;c=b;b=x;}
  if(a>b){x=b;b=a;a=x;}
  return b;//经过以上比较赋值,将中间值赋给b,
  返回给中间像素点gPixel[i]
  }
  for(i=1;i<128;i++)//对128个点进行平滑处理输出
  {
  gPixel[i]=get_mid(gPixel[i-1],gPixel[i],gPixel[i+1]);
  //gPixel[i]代表采集回来的像数点数值
  }
  2.2 二值化处理
  图像的二值化处理就是将图像上点的灰度值置为0或255(在程序设计中置为0和1)的灰度值[6]。二值化的目的就是将所有灰度大于或等于阈值的像素判定为白色,否则像素点为黑色,这样明确地分出黑白两种颜色,小车就能准确地转弯。阈值的选取有很多种方法,常用的有动态阈值和试验确定法[7]。对图像进行二值化分割,选取恰当的阈值成了准确划分的关键。事实验证,静态阈值已经不能满足整幅赛道,所以采用动态阈值算法[8]。由于四轮智能小车存在转弯不灵活的特点,在赛道上跑时很容易丢线,所用的动态阈值要在丢线时调用上一个阈值(T_old)(T_old是上一次计算正确的阈值保留下来赋予的值T_last)。
  软件二值化的动态阈值算法如下:
  (1)找出一组数据128个像素点的最大值(max)和最小值min。
  (2)判断最大值(max)和最小值(min)的偏差是否大于全黑时的偏差(all_black_Difference_value),若大于全黑时的偏差,就继续下面步骤,否则不计算下一步骤,用上一次的阈值。全黑时的偏差指的是全黑(丢线)情况下的最大值与最小值的偏差(是给定的一个值),由经验得知丢线情况下的阈值是不正确的,要用上一次的阈值T_old。
  (3)为全局阈值T选择一个初始估计值:30VYA3A0JV09[KF6`KILR0Z.jpg
  (4)二值化处理图像,并产生两组数组:sum_h为灰度值大于T的所有像素组成,sum_l由所有小于等于T的像素组成。
  (5)对sum_h和sum_l的像素分别计算平均弧度值(均值)max_ave和min_ave。
  (6)产生最终的阈值T_last,再给T_old赋值:T_old=T_last(T_old丢线时调用)。
  A1(PYA`4R8TAVDOM{0Y][AG.png

3 赛道识别
  3.1 一般赛道的识别
  普通赛道类型包括:直道、十字路口、小S弯以及不同曲率的弯道。因此,对不同的弯道识别及数据处理是成功与否的关键。采用了一次元函数动态Kp的算法来处理不同曲率的弯道。主要公式为:
  Error=Left_black-(128-Right_black)(2)
  Kp=0.05×|Error|(3)
  其中,Error为实际中心位置与测量中心值的偏差。通过经验得知,Error等于左边黑点减128与右边黑点的差值。当Error为负数时舵机向左转弯,为正数时舵机向右转弯,从而控制速度的变化。Error偏差在得出第一个黑点前还需要判断其是否为噪点。当全黑时设定了一个最低速度,偏差为0时也限制了它的最高速度,防止智能小车由于速度过高,造成摆尾或冲出赛道等问题。
  在直道,偏差(Error)会变得很小,绝对值小于10,控制舵机直行,不转弯。
  十字路口都是与270°的弯道连接在一起的。由于十字路口没有两端的黑色引导线,通过CCD采集的数据分析,计算进入前的3次偏差位置,求出它的斜率,再通过斜率计算出智能小车在十字路口上舵机转弯大小,从而保证小车顺利通过十字路口。
  紧跟着就进入270°的弯道。为了防止舵机误判,当上一个偏差与本次的偏差超过某一个值时,保持上一次的偏差,这样就能顺利平滑通过弯道了[9]。
  从CCD采集回来小S弯道的数据来看,由于小S弯道的位置偏差较小,而且采用一次元函数动态Kp的方法来控制舵机转弯,Kp的值可以通过这些小偏差的改变而改变,即Kp=0.05×偏差。因此,可以保证智能车以较高的速度完美通过小S弯道。
  3.2 特殊赛道的识别
  为了增加行驶难度,增加了人字弯道识别,如图2所示。本设计选择了让智能小车直接大拐角掉头。当检测到斑马线时,给舵机一个大转角,让小车直接驶过。然而当小车高速行驶时,处理不好速度与CCD检测前瞻(CCD扫描的地方与车身间的距离)的关系,小车很容易冲出赛道。本设计在智能小车上安装了两个CCD,一个前瞻在50 cm,一个前瞻在40 cm。
  图2中,两条平行线分别为两个CCD拍摄图像的位置。其中,车子前瞻较近的CCD扫描的图像是在直道运行,得到的数据是左右黑线都存在;前瞻较远的CCD扫描的赛道图像,得到的数据是左边的黑线相差不大,但右边黑线与较近CCD相比却突然丢失,据此判断此时应该右转。

Image 002.png

  人字形判断程序段如下:
  Error=Left_black-(128-Right_black)
  |Error|<10//判断较近的CCD是否检测到黑线,
  并计算出是否在直到上,在中线时偏差(Error)小于15,在实际情况中这个值小于10就认为是直道
  |Left_black_near-Left_black_far|<8//判断近的CCD左边
  黑线和较远CCD左边黑线是不是偏差小于8(在直道上两个CCD的左黑线像素点相差小于8)
  |Right_black_near-Right_black_far|>30//判断近的CCD
  右边黑线和较远CCD右边黑线是不是偏差大于一定范围(较远CCD丢线,较近的还在直道上,所以两个CCD的右黑线像素点相差大于30)
  当同时满足以上3个条件时,判别出人字弯道后,就向右转弯,使小车控制舵机进行较大角度的转弯,等到小车回到直道后,再给与舵机中值,从而使小车快速、稳定通过人字弯。左拐弯与之相反。
  结合两个CCD信息去识别可以准确判别出人字弯道。经过实践验证,采用此方法误判的概率非常小,只有在智能小车轨迹异常偏离赛道中心时才会出现误判。
4 结论
  通过对线性CCD图像处理与识别算法进行研究,将理论知识与实际情况相结合,对采集的图像进行中值滤波、二值化动态阈值处理,再根据小车的实际情况进行改善,设计了一次元函数动态Kp的算法,对直道、十字路口、小S弯以及不同曲率的弯道进行辨识,并对人字形赛道特殊判断识别,从而使小车能够沿规定赛道稳定、可靠、快速地运行。
  参考文献
  [1] 刘嘉豪,刘海刚,张建伟,等.智能车图像处理与识别算法研究[J].工业控制计算机,2014,27(8):19-22.
  [2] 卓晴,黄开胜,邵贝贝,等.学做智能车:挑战“飞思卡尔”杯[M].北京:北京航空航天大学出版社,2007.
  [3] 刘祖臣.基于CMOS数字摄像头的硬件二值化方案[J].电子科技,2014,27(7):99-102.
  [4] 周磊,任国全,肖浩,等.结构化道路车道线快速检测的一种改进算法[J].计算机仿真,2012,29(4):362-366.
  [5] 张毛女,柳薇.一种基于边缘检测的改进的中值滤波去噪方法[J].计算机与现代化,2011,29(3):63-65,73.
  [6] 李俊,王军辉,谭秋林,等.基于MC9S12XS128控制器的智能车图像处理技术研究[J].化工自动化及仪表,2012,39(2):190-193.
  [7] 季聪,王思明,汉鹏武.智能车路径识别与控制研究[J].电视技术,2013,37(9):192-195,209.
  [8] 常江.基于视觉导航的智能车测控系统关键技术研究[D].天津:河北工业大学,2010.
  [9] 邱迎.道路自动识别与控制的智能车系统的研究[D].重庆:重庆大学,2010.

此内容为AET网站原创,未经授权禁止转载。