2017全国大学生电子设计大赛B题 | 板球控制系统(二)图像算法相关

2017全国大学生电子设计大赛B | 板球控制系统(二)图像算法相关

转载请注明出处。

我翻看了很多现有教程以及相关的开源贴,发现大家对于技术的解释都很隐晦,真正的问题没解释清楚,真正的技术也没体现出来,却要一直在写自己程序多么的强大,效果多好,这是有悖于开源的初衷的。当你第一次拿起半球系统的赛题时,肯定会对视觉算法产生疑问,我该用什么摄像头?配什么计算平台(单片机或者高性能计算模块)?我使用什么算法?我该如何处理图像噪声、曝光不均匀、目标点提取、定位等等问题………废话少说,我会在接下来的帖子中为大家尽可能详细的剖析相关技术问题,解决你的疑问。

2017全国大学生电子设计大赛B题 | 板球控制系统(二)图像算法相关_第1张图片

一、摄像头和主控板的选择

工欲善其事必先利其器,好的摄像头能够给比赛带来无比巨大的优势甚至是意想不到的超级Buff,甚至直接决定了你比赛是国一还是无功而返。竞赛当时涌现了五花八门的摄像头,我们可以大体上分为三类:

1.野火、山外、蓝宙等智能车店家的硬件二值化摄像头

2.正点原子家的ov2640以及其他ov7725 ov7060等用RGB565格式输出图像的摄像头

3.支持USB接口的、像素大于128X128,帧率任意大于30fps的摄像头。

其中,1类型的摄像头具有输出速度快,数据简单,单片机处理负担小的优点,适合STM32F1系列单片机使用,但是也具有致命的缺点,无法调整曝光,容易出现噪点,滤波算法困难,同时只有黑白信息的图像会导致你只能做小球定位,提高题发挥会遇到困难。以上缺点会直接导致竞赛难度大大增加。

2类型摄像头具有图像通道完整,容易调整相关参数,可以定制化输入输出需求的特点,但是其缺点就是带来的计算量的上升与对于芯片计算性能的严峻考验。推荐使用STM32F4平台驱动以上摄像头。经测试,F407带动正点原子家的ov2640可以轻松达到30帧,加上算法以后可以达到25~27帧,基本满足需求。

3类型的摄像头属于高性能计算系统专用,例如树莓派,TX2,TK1,TX1系列,属于严重技术作弊方案,我们将会把它放到最后的总结在讲。

 

二、图像的二值化以及相关问题

首先在这里我不会带你手码二值化算法,或者是告诉你滤波代码应该怎么写,或者是告诉你摄像头该如何去驱动。因为这已经是老生常谈的东西了,网上资料一搜一大把,我不是在教你重复的去造轮子,而是在告诉你解决问题的道路和方法。希望读者理解。

既然走了视觉这条道路,必须先进行二值化,二值化做过智能车的朋友知道,主要是阈值的选取和滤波。竞赛之时大多数队伍会在二值化的时候遇到三个问题

1.二值化阈值怎么选择?不同光强带来的阈值不一样怎么办?

2.由上面1号问题带来的图像有噪声怎么办?

3.由于曝光不均匀以及阈值问题,小球二值化以后在图像边缘像素面积变小甚至消失怎么办?(同时小球在图像中心像素面积会变大)

我们来看第一个和第三个问题。二值化阈值分为动态阈值固定阈值,动态阈值需要相关算法铺垫,智能车中经常用到,但是有些时候并不是很稳定,尤其是对于新手来讲能调试出好的效果更是难上加难。我们也可以用图像处理中常用到的大津法。通过大津法我们可以完全解决第一个以及第三个问题,并且可以达到近乎完美的二值化处理。但是由于单片机计算性能极其有限,我们基本很难在保证流畅控制的同时进行大津法运算。同时,第二个问题带来的噪点影响也很致命,通常的解决手段是进行中值滤波,去除椒盐噪声,也就是我们图像中的噪点。但是由于单片机的性能问题,我们很难在短短三天内设计出一个快速且效果极佳的滤波器。于是乎,需要用点笨办法。我采用的是定阈值+补光+哑光板面处理。定阈值和加强LED光补光可以解决1号和3号问题,通过用油漆处理哑光黑色板面,我们可以最大限度减少环境光干扰,减少噪点,清晰目标。同时在板球系统周围铺上黑色磨砂纸张,保证了摄像头有效像素区域能够覆盖全板面,并且可以在摄像头视野内实现完全的黑色,为我们接下来的提取目标工作提供便利。板球系统的中心是考察你对于控制系统的理解,核心部分还是在于闭环算法。所以提取目标只是系统的必要铺垫,但不是最重要的部分。所以我们需要尽可能最稳定最快速提取处目标,不计一切手段。

 2017全国大学生电子设计大赛B题 | 板球控制系统(二)图像算法相关_第2张图片

二值化图像(无滤波)

2017全国大学生电子设计大赛B题 | 板球控制系统(二)图像算法相关_第3张图片

二值化加简单滤波以后的图像,注意显示屏幕里清晰的白色球。

 

三、小球位置的判定:(stm32f407+ov2640

通过正点原子的摄像头例程,我们可以得到一个16位的128X128大小的数组。

这个数组是由原版图像经过DMA搬运并且经过缩放得到的。经过二值化,我们又会得到一个128X128的8位数组,数据包含了图像的黑白信息。如果你的图像没有噪点,小球可以正确识别,那么就可以简单确定小球位置信息了。我们可以通过搜索整个数组里面所有白色像素点的最大X、Y坐标与最小X、Y坐标,分别对应小球在图像中上下左右四个顶点,通过四个顶点取中值进行确定质心位置。对,就是如此简单省事。当然,你也可以尝试霍夫曼圆法、模板匹配法、以及Fast-RCNN,SSD等去寻找这个圆形,前提是计算能力够,毕竟F103处理完霍夫曼圆算法已经卡成PPT了,F4也没好到哪里去。

 

到此,图像的坑已经简单的填充完毕了,最后提醒一下摄像头最好用专用软排线,不然用杜邦线的话很容易出现丢帧、失去帧同步、场同步等玄学问题。这一期我们解决了板球系统的输入问题,下一期我们将对舵机控制进行简单铺垫,解决板球系统的输出问题。如有言论不当之处或者是阐述错误看,还望多多海涵。

 

王向阳     交流QQ群597962412

你可能感兴趣的:(全国电赛,全国电赛,2017全国电赛B题,板球控制系统)