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

转载请注明出处。

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

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

工欲善其事必先利其器,好的摄像头能够给比赛带来无比巨大的优势甚至是意想不到的超级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号问题,通过用油漆处理哑光黑色板面,我们可以最大限度减少环境光干扰,减少噪点,清晰目标。同时在板球系统周围铺上黑色磨砂纸张,保证了摄像头有效像素区域能够覆盖全板面,并且可以在摄像头视野内实现完全的黑色,为我们接下来的提取目标工作提供便利。板球系统的中心是考察你对于控制系统的理解,核心部分还是在于闭环算法。所以提取目标只是系统的必要铺垫,但不是最重要的部分。所以我们需要尽可能最稳定最快速提取处目标,不计一切手段。

二值化图像(无滤波)

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

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

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

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

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

王向阳     交流QQ群597962412

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

  1. 2017全国大学生电子设计大赛B题 | 板球控制系统(一)序

    距离2017年电子设计大赛已经过去将近一年时间,我也终于有空将当时比赛的具体细节整理出来,以供给大家进行详细的参考,方便后来者进行快速,细致的学习. 17年赛题出来之前,我是最快做出样题的人之一.当时 ...

  2. 2017全国大学生电子设计大赛B题 | 板球控制系统(四)机械设计相关

    转载请注明出处. 转眼2019了诶,可能有些同学又该问了,哇向阳哥,你这个鸽子放的好,转眼大半年了一年都没更新,我也知道啊,说好的源码呢,挖的机械的坑呢?咕咕咕咕我也不想啊,我这不是懒吗!过年有空了, ...

  3. 2017全国大学生电子设计大赛B题 | 板球控制系统(三)舵机控制相关

    转载请注明出处 2019全国电赛交流群(内有板球系统基础题代码):597962412 今天我们来讲一讲舵机的控制.电赛在给出赛题说明与采购清单的一刹那,我就想好了赛题最可能使用的两种输出元器件.一种是 ...

  4. 2017年全国大学生电子设计大赛A题(微电网模拟系统)

    小编参加过三届全国大学生电子设计竞赛,做的均为电源题目,故留下此电源题提详细的方案和设计思路步骤,供后来者学习取经,如有不足之处欢迎留言提问.点击此处访问小编的个人小站:www.zhiguoxin.c ...

  5. 2018年全国大学生电子设计大赛E题(变流器负载试验中的能量回馈装置)

    小编参加过三届全国大学生电子设计竞赛,做的均为电源题目,故留下此电源题提详细的方案和设计思路步骤,供后来者学习取经,如有不足之处欢迎留言提问.点击此处访问小编的个人小站:www.zhiguoxin.c ...

  6. 线路负载及故障检测装置(2019全国大学生电子设计大赛C题:国家级一等奖)

      这个东西是今年(2019年)全国大学生电子设计大赛C题,经过4天3夜得辛苦奋斗,完成得题目要求得指标,最后也取得了一个不错得成绩.   题目要求如下:   题目三个大的要求:测电容.电感.电阻值, ...

  7. 2019全国大学生电子设计大赛H题 模拟电磁炮系统全国一等奖

    2019全国大学生电子设计大赛H题 模拟电磁炮系统全国一等奖 作者 xxx 队友 阿华 狗子 (想要比赛指导的可以xian鱼搜索 电子设计竞赛国一竞赛指导(发布人为晨星)) (想要源码和我比赛时候准备 ...

  8. 2020TI杯全国大学生电子设计大赛F题解决方案视觉部分

    完整代码库: https://github.com/bossConneR/K210_FACEDET star以跟进最新更新 K210_FACEDET 2020年全国大学生电子设计竞赛F题视觉部分解决方 ...

  9. 2017全国大学生电子设计竞赛H题:远程幅频特性测试仪:主控STM32F407

    2017年全国大学生电子设计竞赛 远程幅频特性测试仪(H题) [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9sPfFjy1-1618627176227)(media/ ...

最新文章

  1. Spring3, Hibernate3.6与Proxool连接池配置
  2. logo下方显示技术支持信息_艺术与实用性的结合,iQunix Spider 屏幕显示器支架评测...
  3. POJ--3268--Silver Cow Party【SPFA+邻接表】
  4. picturebox 图片自适应
  5. matlab提取艾里斑,艾里斑:我不是雀斑
  6. python3调用c代码_在Python3.6中调用C代码
  7. cad加载dll_你的CAD为什么安装不上?进来看看你就知道了
  8. Python--tkinter迷你天气预报软件(11.8)
  9. spring Access denied for user ‘xx‘@‘localhost‘ (using password: YES)
  10. C# 代码注释生成代码提示和帮助文档
  11. VS2017逐步配置OpenCV教程
  12. java给视频添加水印_javaCV视频添加水印
  13. 机器学习实战 基于_资料 |《机器学习实战:基于 Scikit-Learn、Keras 和 TensorFlow(第二版)》...
  14. 【转】百度网盘高速下载-暴力油猴脚本
  15. 自动驾驶仿真相关调研
  16. 第九届蓝桥杯本科Java B组题解【省赛】
  17. Nginx Sticky的使用及踩过的坑(nginx-sticky-module)
  18. 小程序的价值到底在哪?如何掘金?看三位顶尖从业者如何说。
  19. 5G移动通信标准学习笔记(一)
  20. java 获取包下的所有类,附完整源码和测试代码

热门文章

  1. 视频教程-LR教程 Lightroom视频教程 cs6 CC2019摄影后期软件调色在线课程-Photoshop
  2. Unity创建超写实三维场景的一般步骤
  3. 性能分析工具 之 Perfetto基本使用
  4. AOD或者AOA的俯角与方位角
  5. 计算机内部的传输是,在计算机内部对汉字进行存储、处理和传输的汉字编码是 ()...
  6. Romberg 积分的python 程序
  7. RoHS WEEE 标准化相关的理解(上层建筑层面解读)
  8. 什么是二级网站域名?
  9. Unity 3D下开发2D飞行游戏中的背景滚动
  10. python寻找n以内的素数算法