在 RoboMaster 竞赛中,当一台机器人移动时,另一台机器人在无人操作的情况下,如同有着一双眼睛,能够主动瞄准移动的机器人。
在这个场景中,机器人搭载的摄像头把图画实时传输到电脑,通过电脑程序剖析。即便图画内方针物体快速移动,它的方位信息也会被获取并实时追寻,很难被甩掉。
咱们告知电脑方针物体都有哪些特征,它就会彻底依照咱们预设的程序来运转,这种视觉处理办法可归为传统办法。
传统式的机器视觉合适入门学习。今日咱们先来讲讲视觉辨认中处理程序的一环:究竟电脑是怎么辨认和处理图画的呢?想闭着眼睛操控机器人的小伙伴,留意听讲啦~
《论语·卫灵公》:“工欲善其事,必先利其器。”做机器视觉也相同,咱们需求高效的编程环境,以及让你事半功倍的兵器——OpenCV 视觉库。OpenCV 是广泛应用的视觉辨认库,它供给了开源的代码供直接调用。
全称 Open Source Computer Vision Library,直译成中文便是“开源的计算机视觉库”。它“普渡众生”,能够运转在 Linux(一种用来干活的操作系统)、Windows(一种又能干活又能玩的操作系统)和 MacOS(一种只能运转在贵重电脑上的操作系统)等操作系统上。
说起喜欢 OpenCV 的原因,许多参赛队员都谈到了两点。榜首,OpenCV 是免费开源的,由一个非盈利性安排支撑;第二,OpenCV 十分轻量级,这意味着,大部分程序在一般的电脑上也能运转。
OpenCV 有上百个函数,依据不同功用划分到不同的功用模块里。这些功用模块一点也不多,大约就那么十几二十吧(・∀・*)……
OpenCV 的core 内核模块为咱们供给了最中心的类和接口。其间,Mat 类型将图画以矩阵的办法存储,更合适计算机做数值运算。
以最简略的是非位图相片为例。咱们把图片扩大之后,能够看到图画实际上是由许多明暗不同的小方块(像素)组成的。
在8位的灰度色彩空间里,咱们把这些小方块用0~255的数字替代,数值越小代表的方块越暗。
一般,视觉辨认分为两步。榜首步是“预处理”,通过一些根底算法,去除无用信息和噪声,扩大色彩间的差异;第二步,便是运用其特征信息进行“物体检测”。
咱们先用core 内核模块中的imread 读图画函数把这张图片以矩阵方法载入到内存中,并起个好听的姓名叫做 src。
接下来,用遍历像素点的办法,找到一切蓝色像素,把它变成白色。伪代码如下:
这三种办法中,第 1 种办法功率最高,但在运用之前,你需求先保证该图画在内存内是接连存储的。主张操作之前先调用函数isContinuous()来判别。
但相比之下,第 2 种办法更安全。它会帮你主动越过内存内的不接连空间,一同也坚持了很高的功率。
第 3 种办法是被设定来随机拜访像素点的,你要是用它来遍历图画,那功率可谓感人。等你找到萝卜君的时分,他可能把下周的视频都做完了。
那咱们就挑一种自己喜欢的办法,完结这一步操作:遍历全图,把蓝色的像素点变成白色。它有点像咱们常说的“抠图”。
通过去除布景之后的图片,依然有许多像椒盐相同的噪声点,咱们管它叫做椒盐噪声。
OpenCV 的imgproc 模块,内含滤波、形状学处理、几许改换等很多有用的图画处理函数,把它们像相互组合起来,足以应对各种场景需求。
例如,图画非线性滤波算法中的中值滤波 medianBlur,关于滤除图画中的“椒盐噪声”,作用优异。
咱们把机器人跟萝卜君相同,进行图片“预处理”,去掉布景杂色,只保存发光的灯条。
接下来,运用findConours 函数,找出装甲片灯条的概括;再运用minAreaRect 函数,将“看起来像矩形”的灯条直接拟组成RotationRect 旋转矩形。将灯条变成规矩的几许图画,更有利于之后的特征剖析。
这儿的 minRect 便是一个 RotationRect 旋转矩形的实例,它包含了矩形的方位和形状信息。接下来,依据灯条姿势,结合运用装甲片、灯条尺度等先验常识,就能够换算出方针装甲模块的相对坐标啦!
在 RoboMaster 竞赛中,当获取到方针的相对坐标后,剖析图画,就能进一步操控云台瞄准打击方针啦,妥妥的~
本期的机器视觉入门就到这儿,讲了这么多,有没有听进去呀?祝咱们学习路上大吉大利,将来一同吃“反鸡”!
在 2017 赛季 RoboMaster 竞赛中,呈现了一个动态改变的九宫格大能量机关,机器人需求先辨认机关上方随机呈现的一行数码管数字,再依照其次序辨认下方随机散布、随机字体的九宫格数字。由于其字体是随机的,很难手动输入一切特征,这儿就需求用到机器学习:给机器人一些事前准备好的比如,让它自己学习、探索。
这种丑丑的手写体数字就无法用传统办法来辨认了,重视咱们,下一期愈加高档的机器学习式视觉辨认教育,周日按时带你飞。