一、前言
在智能车比赛中,车模为了完成任务,主要是解决两个问题。一个是能够识别赛道,并通过三个福来轮的转动,使得车模能够始终沿着赛道前行。第二个就是识别到赛道上的颜色圆盘。一个圆盘是障碍,绿色,一个圆盘是赛道终点,紫色。
除此之外,有的时候,赛道上还会出现别的颜色的障碍圆盘,或者是白色的圆盘。这种白色圆盘是允许车模直接通过,相当于将连续的引导线中间出现了断续的部分。白色圆盘还有凸起,会使得车模运动出现抖动。考察车模运动的稳定性。为了能够检测引导线和彩色圆盘,需要我们对于 OpenMV 中的色块检测功能进行学习。下面通过 OpenMV 的示例程序,介绍色块检测函数的应用。
二、示例程序
在 连通OpenMV模块之后,可以打开 示例程序中 图像处理 颜色跟踪中的相关示例程序。先打开单个色块检测程序。可以学习相关函数功能。在智能视觉模块前 摆放着几种不同颜色的物体。检测和定位这些物体,可以根据它们 颜色、 大小、形状来进行区分。通过设置检测的不同参数,可以检测出我们需要的物体。
程序运行之后,可以看到此时,OpenMV 在拍摄到的场景中,找到了红色色块。并在串口终端中显示了处理图像的速度。下面我们来介绍一下这个简单的物体检测的程序结构。在程序开始部分,定义了一个链表。其中包含有三个元组,分别表明了三个颜色检测参加范围。前面有一个 索引标号变量,在程序中,通过这个变量标明链表中的颜色参数。下面这些语句我们已经熟悉,用于初始化摄像头的参数,请大家注意,后面对于摄像头的增益和白平衡的功能都禁止了。这在物体检测应用中,是为了保证所检测颜色范围不随着环境光线的影响而发生变化。
下面是程序的循环主体。使用 clock 来记录循环程序的开始时间,下面,调用摄像头拍摄函数,获得一副图像。接下来,调用图像中 色块检测函数,来获得需要搜索的物体位置、大小和方向。其中第一个参数,给出了检测色块的颜色范围,使用 index 来定义前面列表中的颜色范围参数。接下来的参数,定义了色块像素的最小值,下面的参数定义了覆盖色块矩形的面积最小值。这两个参数规定了需要检测色块的大小。后面的 merge 参数,设定为 true。则会将相互重叠的色块进行合并。
接下来,则是对搜索到的色块结果进行绘制。其中所使用到的图像绘制函数,在这里就不一一介绍了。其中,调用了色块的 elongatiuon 函数,来判断色块的形状是接近于圆形,还是窄的线条。
用于区分物体的参数中,颜色是显著的一个特征。对于颜色的描述,这里使用了是描述颜色的 LAB 颜色空间,它的前面两个参数,定义了L参数,表明颜色的亮度范围,中间的参数定义了 A 参数,是红绿范围,第三个是 B 参数,是定义了 蓝黄范围。关于 颜色空间的 LAB 的定义和转换方式,这里就不进行介绍了。只剩下一个问题,那就是我们如何能够非常方便的确定,需要检测的物体对应的 LAB 参数范围呢?
三、参数修改
可以使用 工具菜单中的 机器视觉 中的 阈值编辑器 惨淡帮助我们确定检测物体的颜色范围。将第一对 和第二对参数的范围都扩展到最大,修改第三对参数,它对应蓝黄颜色,将它的范围修改到右边,对应黄色范围。可以看到图像中的红色物体被分割出来,调整这个参数,是分割出的黄色物体最大,其它杂色最小,这就是最优的颜色范围参数。这里给出了 LAB 阈值范围,将它拷贝到剪切板,粘贴到应用程序,便可以看到此时,程序显示检测到了黄色的物体。
下面,将第三对参数,修改到左边,对应蓝色区域,此时,检测区域中包括有边界的蓝色背景 以及白纸上的蓝色物体。修改参数之后,可以看到程序检测到了边界的背景区域。在缓冲区中,将绿色物体选择,可以看到下面对应 LAB颜色直方图的范围。应用这个范围,设置第二对参数,可以看到绿色物体被分割出来。应用这个参数,程序检测出绿色物体。
大家可以根据前面介绍的方法,来检测图片中其它的物体,这里,有两个区域都是红色,可以通过修改色块大小参数,来剔除小的红色,只留下大的红色色块。
四、多种颜色检测
可以打开示例程序 图像处理 颜色跟踪中的 多种颜色检测程序,在前面阈值参数中定义了三个颜色检测阈值范围。利用前面的方法,分别得到红色、 黄色、绿色的颜色范围,将他们替换前面颜色阈值参数。程序运行之后,会发现最终只是将红色 和 黄色检测出来了。这可能是因为绿色区域比较小,修改检测物体像素和区域像素这两个参数,将它们降低到 100,运行之后可以看到,较小的绿色区域也会被检测出来了。
如果将物体像素参数进一步减小,比如这里将它们减小到 20,可以看到,图像中,最右侧的红色LED 也会被检测出来了。
※ 总 结 ※
本文介绍了OpenMV中 图像处理的色块检测函数的应用,可以通过设定检测颜色、大小、形状等参数,来分割出图片中感兴趣的区域。可以获得区域的中心位置,大小以及方向,利用这些参数可以引导智能车完成运动控制,基于此,大家可以测试对于黑色的引导线的检测方法。这样,便可以完成智能车的比赛任务。
参考资料
[1]清华大学自动化系科技营-暨智能机器人挑战赛-学习方略: https://zhuoqing.blog.csdn.net/article/details/140378536