- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
图像处理算法总结
简介
根据第九届全国大学生“飞思卡尔”杯智能车竞赛要求,针对摄像头平衡组的车模要求,我们小组需要自主设计一辆两轮平衡直立的由摄像头自主识别路径并以较快速度行进的智能小车。其中图像数据的处理是摄像头组能否取得好成绩的关键。
我们这次使用的是野火鹰眼ov7725硬件二值化摄像头(如图1所示),基于飞思卡尔K60单片机控制,并通过IAR6.3编译,编译界面如图2所示。
图1.鹰眼摄像头
图2.iar编译界面
设计要求
对鹰眼摄像头采集回来的一副二值化的图像数据进行解压,图像处理,求出赛道中线和车体中心线的偏差,通过PID调节,将转向控制量返回,从而实现转向控制。其中图像处理包括:黑线提取,赛道类型判断,计算转向偏差。
算法设计
3.1 黑线提取
我们采用的是跟踪边缘检测算法。由于黑色的目标引导线是连续曲线,所以相邻两行的左右边缘点比较靠近。跟踪边缘检测正是利用了这一特性,对直接边缘检测进行了简化。其思路是:若已寻找到某行的左边缘,则下一次就在上一个左边缘附近进行搜寻。这种方法的特点是始终跟踪每行左边缘的附近,去寻找下一列的左边缘,所以称为“跟踪”边缘检测算法。该算法的优点:在首行边缘检测正确的前提下,该算法具有较强的抗干扰性,能更有效地消除垂直交叉黑色引导线的干扰,以及引导线外黑色图像的影响,始终跟踪目标引导线。另外,与直接边缘检测法比较,跟踪边缘检测算法的时间复杂度更低,因此效率更高。且通过多次试验,中心线提取基本没有出现大的问题。如图3,为一次拍摄的赛道图像,经图像处理后将计算的中线显示在上位机上,
图3
3.2赛道类型判断
影响赛车速度成绩的一个重要因素就是对弯道和直道的提前识别判断,从而实现安全过弯,快速过直道、S弯道,以提高比赛成绩。我们通过小液晶模块,或者摄像头上位机将拍回来的赛道图像反复仔细地对比查看,提取出相关的特征作为判断条件,从而完成赛道类型的判断。另外,由于智能车上安装的摄像头相对于赛道存在一定的倾斜角度,因此会造成采集到的赛道图像具有一定的梯形失真,即图像中的赛道远端窄、近端宽,因而也会对路径的正确识别产生影响。对于这种失真,可以通过对每行提取的赛道位置添加一个线性修正值来消除,一般通过实验的方法确定线性补偿的系数。
3.3 控制算法
PID控制是比例、积分、微分控制的简称。在自动控制领域中,PID控制是历史最久,生命力最强的基本控制方式。
就小车的转向控制而言,我们只需要利用PD控制。经过图像处理算法后,得到的信息是关于前瞻范围内的中线的具体位置,它一般是个一维数组。现在就是要从这个一维数组中提取出智能车前方的路径信息,以便于后面转向和速度的控制。为了使小车运行得快而稳,可以从中提炼出一个中线距离车身中心轴的偏差量dev1,给它乘一个比例系数Tp,用前后两幅图片偏差量dev1的差值作为dev2给它乘以一个微分系数Td,将他们的和作为总的偏差量dev输出,并通过多次实验的方法确定最佳的PD参数。具体代码见图4。
图4
四.算法设计遇到的问题
4.1中线不连续
代码实际调试中,总存在中心线提取不连续的问题。如图5所示,
后来,多次修正补线数组,通过不同赛道类型的判断,进行二次巡线的算法,最终将这类问题基本解决。但是,解决思路过于简单、操作繁琐,甚至需要对着摄像头拍回来的图像一个点一个点的数,来确定某一行丢边情况下补线的数值。效率确实有待加强。
图5
4.2程序跑飞
在多次修改代码中,我们出现了一次程序跑飞的情况,程序编译调试均没有错误,但在下载进单片机后,程序正常执行了一段时间后,突然异常,陷入不明的死循环中,具体原因至今仍然没有找到,但好在之前的代码及时备份了,没有造成更为严重后果的后果。
我们是利用野火的底层库函数开发,小车的平衡控制和速度控制的程序由搭档编写并调试,我负责图像部分的代码编写,出现上述情况实难找出原因之所在。
4.3赛道类型误判
因为赛道类型判断的条件,只是反映赛道的极少的一部分信息,出现误判的机率难免存在。但是通过多次的分析比较,反复修改判定条件,此类问题现已比较好的解决了!
五.程序设计框图
是否检测到起跑线?从左至右扫描近端5行(检测起跑线、取基准行)开始进入一副图像(160*60)
是否检测到起跑线?
从左至右扫描近端5行
(检测起跑线、取基准行)
开始
进入一副图像(160*60)
基准行开始边沿跟踪算法
基准行开始边沿跟踪算法
找两边沿黑线,两边和求平均算出赛道中心线
否
停车是
停车
检测到特殊
检测到特殊赛道(十字路弯等)?
否
文档评论(0)