1、图像处理算法总结一、 简介根据第九届全国大学生“飞思卡尔”杯智能车竞赛要求,针对摄像头平衡组的车模要求,我们小组需要自主设计一辆两轮平衡直立的由摄像头自主识别路径并以较快速度行进的智能小车。其中图像数据的处理是摄像头组能否取得好成绩的关键。我们这次使用的是野火鹰眼 ov7725 硬件二值化摄像头(如图 1 所示),基于飞思卡尔 K60 单片机控制,并通过 IAR6.3 编译,编译界面如图 2 所示。图 1.鹰眼摄像头图 2.iar 编译界面二、 设计要求对鹰眼摄像头采集回来的一副二值化的图像数据进行解压,图像处理,求出赛道中线和车体中心线的偏差,通过 PID 调节,将转向控制量返回,从而实现转
2、向控制。其中图像处理包括:黑线提取,赛道类型判断,计算转向偏差。三、 算法设计3.1 黑线提取我们采用的是跟踪边缘检测算法。由于黑色的目标引导线是连续曲线,所以相邻两行的左右边缘点比较靠近。跟踪边缘检测正是利用了这一特性,对直接边缘检测进行了简化。其思路是:若已寻找到某行的左边缘,则下一次就在上一个左边缘附近进行搜寻。这种方法的特点是始终跟踪每行左边缘的附近,去寻找下一列的左边缘,所以称为“跟踪”边缘检测算法。该算法的优点:在首行边缘检测正确的前提下,该算法具有较强的抗干扰性,能更有效地消除垂直交叉黑色引导线的干扰,以及引导线外黑色图像的影响,始终跟踪目标引导线。另外,与直接边缘检测法比较,跟
3、踪边缘检测算法的时间复杂度更低,因此效率更高。且通过多次试验,中心线提取基本没有出现大的问题。如图 3,为一次拍摄的赛道图像,经图像处理后将计算的中线显示在上位机上,图 33.2 赛道类型判断影响赛车速度成绩的一个重要因素就是对弯道和直道的提前识别判断,从而实现安全过弯,快速过直道、S 弯道,以提高比赛成绩。我们通过小液晶模块,或者摄像头上位机将拍回来的赛道图像反复仔细地对比查看,提取出相关的特征作为判断条件,从而完成赛道类型的判断。另外,由于智能车上安装的摄像头相对于赛道存在一定的倾斜角度,因此会造成采集到的赛道图像具有一定的梯形失真,即图像中的赛道远端窄、近端宽,因而也会对路径的正确识别产
4、生影响。对于这种失真,可以通过对每行提取的赛道位置添加一个线性修正值来消除,一般通过实验的方法确定线性补偿的系数。3.3 控制算法PID 控制是比例、积分、微分控制的简称。在自动控制领域中,PID 控制是历史最久,生命力最强的基本控制方式。就小车的转向控制而言,我们只需要利用 PD 控制。经过图像处理算法后,得到的信息是关于前瞻范围内的中线的具体位置,它一般是个一维数组。现在就是要从这个一维数组中提取出智能车前方的路径信息,以便于后面转向和速度的控制。为了使小车运行得快而稳,可以从中提炼出一个中线距离车身中心轴的偏差量 dev1,给它乘一个比例系数 Tp,用前后两幅图片偏差量 dev1 的差值
5、作为 dev2 给它乘以一个微分系数 Td,将他们的和作为总的偏差量 dev 输出,并通过多次实验的方法确定最佳的 PD 参数。具体代码见图 4。图 4四.算法设计遇到的问题4.1 中线不连续代码实际调试中,总存在中心线提取不连续的问题。如图 5 所示,后来,多次修正补线数组,通过不同赛道类型的判断,进行二次巡线的算法,最终将这类问题基本解决。但是,解决思路过于简单、操作繁琐,甚至需要对着摄像头拍回来的图像一个点一个点的数,来确定某一行丢边情况下补线的数值。效率确实有待加强。图 54.2 程序跑飞在多次修改代码中,我们出现了一次程序跑飞的情况,程序编译调试均没有错误,但在下载进单片机后,程序正
6、常执行了一段时间后,突然异常,陷入不明的死循环中,具体原因至今仍然没有找到,但好在之前的代码及时备份了,没有造成更为严重后果的后果。我们是利用野火的底层库函数开发,小车的平衡控制和速度控制的程序由搭档编写并调试,我负责图像部分的代码编写,出现上述情况实难找出原因之所在。4.3 赛道类型误判因为赛道类型判断的条件,只是反映赛道的极少的一部分信息,出现误判的机率难免存在。但是通过多次的分析比较,反复修改判定条件,此类问题现已比较好的解决了!五.程序设计框图图像处理程序框图否是否是2014 年 4 月 30 日是否检测到起跑线?开始进入一副图像(160*60)从左至右扫描近端 5 行(检测起跑线、取基准行)停车基准行开始边沿跟踪算法找两边沿黑线,两边和求平均算出赛道中心线检测到特殊赛道(十字路弯等)?对特殊赛道特殊处理再计算中线求出图像处理得到的赛道中线与车体中心位置的偏差进行 PID 调节,计算结果返回控制电机差速转向