[视觉算法] 机器人装甲块的视觉识别是如何实现的?「上」

[复制链接]
少尉永不言弃
2019-4-22 11:42:58 显示全部楼层
跳转到指定楼层

[视觉算法] 机器人装甲块的视觉识别是如何实现的?「上」

[复制链接]
版主快拆小分队
2019-4-22 14:28:54 显示全部楼层
实际上刘同学这篇之前已经分享过  https://bbs.robomaster.com/thread-7770-1-1.html

[视觉算法] 机器人装甲块的视觉识别是如何实现的?「上」

[复制链接]
少尉永不言弃
 楼主| 2019-4-22 11:43:49 显示全部楼层
3. 灯柱的识别和装甲拟合
在得到一帧图像之后我们要对图像中的灯柱进行识别和提取。
首先是区分颜色。这里采用的是HSV空间的颜色识别,通过设置不同的H,S和V的值可以识别不同的颜色,具体的参数和数值请自行百度查询,值得一提的是这里的V是代表亮度,这个值的取值大小对应相应颜色的亮度,可以简单的理解为发光色和不发光色,比如蓝色的灯就是发光色,蓝色的布就是不发光色。这个也是识别发光灯柱的一个依据,但是取值仍然是一个问题,最好还是能够自适应,如果不行,就只能人工设定,找一个鲁棒性最好的值。这里的H值表示的是色度,这个取值区间可以稍微的比百度的给定区间大一些,这是由于降低曝光对物体本生颜色有影响,需要扩大阈值区间才能更完整的识别到对应的颜色。通过HSV后会得到一个二值图像,白色部分是你要识别的颜色(这里以蓝色举例),黑色部分为其他颜色被当成背景滤除。

[视觉算法] 机器人装甲块的视觉识别是如何实现的?「上」

[复制链接]
少尉永不言弃
 楼主| 2019-4-22 11:43:59 显示全部楼层
接下来就是拟合轮廓。将识别到的蓝色部分也就是二值图像的白色部分用opencv 的内置找轮廓函数将蓝色部分的轮廓提取出来,这里将较小的轮廓去除(一般较小的轮廓为噪点,不用处理),然后再用最小矩形或者最小椭圆(使用时要注意这两者的区别)将蓝色轮廓部分包围起来,这样你就能够得到包围矩形的旋转角和长度以及宽度(这里要求对最小包围矩形和最小包围椭圆深入理解),通过长宽之间的比值和差值可以判断该蓝色物体受不是灯柱,因为灯柱是长条形,有明显的长宽比和长宽差值以及一些其他的形状信息,然后就是将认为是灯柱的部分进行两两对比,通过他们之间的相对角度和长宽比以及其他性质来判断这两个灯柱是不是同一个装甲的两体灯柱,找到这样的两条灯柱就用他们的信息拟合出装甲,完成识别的任务。这其中还运用到很多形态学的操作,程序里都有体现,这里不再细说。

[视觉算法] 机器人装甲块的视觉识别是如何实现的?「上」

[复制链接]
少尉永不言弃
 楼主| 2019-4-22 11:43:38 显示全部楼层
2. 摄像头曝光问题
降低摄像头的曝光值可以使得背景简单,但是这个曝光值在不同的环境之下是不同的,这里最理想的就是将曝光值设置为动态自适应的,但是要注意的是这个自适应值的稳定性,摄像头的暴光值每改变一次都需要重置摄像头,这样是很耗时的,所以该自适应的暴光值要在开场时候就根据现场的灯光情况来自适应的确定一个曝光值,之后的整场比赛中则不能够在次调整以免对整个系统造成影响。
我们目前还是采用的手动设置曝光的方法,这个方法的好处就是根据自己在场地实测的效果来设置曝光值,相对来说要更加的可靠,根据写程序者自己的经验来取曝光值。缺点就是很不方便,而却要是场地环境突然变化可能造成影响。所以这里还是建议能够找到一个自适应的方法去设置曝光值。特别注意的是曝光值会对物体颜色有一定的影响。

[视觉算法] 机器人装甲块的视觉识别是如何实现的?「上」

[复制链接]
少尉永不言弃
 楼主| 2019-4-22 11:43:17 显示全部楼层
首先要说的是,作为一个大学生,在学习之余能够参加比赛是一件非常有意义的事情,当你过完整个大学再回过来看的时候,你可能不会记得你从课堂上学到了多少知识,但是你一定会记得你再在验室学到了什么,在比赛过程中学到了什么。这是一个值得你去付出,而且只要坚持下去就必然丰收的过程。筹赛期间,你会经历各种各样的挑战,你会有压力,你会感到无力,感到自身能力的不足,重新认识自己,不再为一点点的小成就而沾沾自喜,但是只要征服它们你会有前所未有的满足感,这些都是你在课堂上,在书本里体会和学习不到的,说白了,实验室更多的培养的是你的一种能力,一种面临困难举步维艰,仍然不断前行的坚持。

[视觉算法] 机器人装甲块的视觉识别是如何实现的?「上」

[复制链接]
少尉永不言弃
 楼主| 2019-4-22 11:43:29 显示全部楼层
一. 装甲块的识别
1. 基本思路
对于装甲块的识别,我们目前采用的还是传统的目标检测方法,即通过提取目标的特征老师别目标,而装甲最显著的特征就是灯条以及灯条的颜色。
大致的思路就是,首先降低摄像头的曝光来使得背景更加简单,对于比赛场地复杂的情况来说,这一点是很重要的,在识别一个物体时候你首先要做的就是简化背景避免很多不必要的干扰信息,然后才是对前景和背景的分离,这里的前景指的就是要识别的目标,除了要识别的目标之外都称之为背景。
在降低曝光值之后会得到一幅背景相对简单的图像,然后对目标进行提取,这里主要是识别装甲板的灯柱,既通过两个灯柱来重构装甲。


[视觉算法] 机器人装甲块的视觉识别是如何实现的?「上」

[复制链接]
少尉永不言弃
 楼主| 2019-4-22 11:44:06 显示全部楼层
要注意的是,识别到单个固定装甲是很容易的,要在复杂的情况下锁定一个装甲就需要更多的逻辑以及策略,要考虑很多实战时候会出现得问题,比如两个装甲同时出现要击打哪一块,大装甲和小装甲同时出现要击打哪一块,当敌人扭腰得时候要怎么击打等。这些都是要考虑的问题。

[视觉算法] 机器人装甲块的视觉识别是如何实现的?「上」

[复制链接]
少尉永不言弃
 楼主| 2019-4-22 11:44:21 显示全部楼层
二. 坐标变换测距和控制击打
1. solvepnp测距
识别到目标之后就是对目标相对位置的确定。这里可以根据目标物体在一帧图像中像素点的坐标来当做物体的坐标点,在后面控制时只需要将这个坐标量与图像中心点的差值乘以一个系数就可。这里测距使用的是solvepnp算法,该算法以摄像头为坐标原点建立一个摄像头坐标系,只要给出图像中目标的像素点就可以得到目标物体在摄像头坐标系下的坐标(X,Y,Z);其中,X是横坐标,Y为纵坐标,Z为深度(距离)。


[视觉算法] 机器人装甲块的视觉识别是如何实现的?「上」

[复制链接]
少尉永不言弃
 楼主| 2019-4-22 11:44:30 显示全部楼层
要使用Solvepnp首先要对摄像头进行标定(这里自行百度有很多方法),采用棋盘标定法标定摄像头,得到摄像头的内参矩阵和外参矩阵,将这两个矩阵分别放到一个数组中,具体方式如图2.1所示。其中K为内参矩阵,D为外参矩阵或者叫做旋转平移矩阵。

[视觉算法] 机器人装甲块的视觉识别是如何实现的?「上」

[复制链接]
少尉永不言弃
 楼主| 2019-4-22 11:44:37 显示全部楼层
接着就是对装甲点的提取,注意实际的装甲点要和图像中的装甲点一一对应,这里采用装甲的左上为坐标原点,分别取左上,左中,左下,右上,右中,右下这6个点为特征点如图2.2所示,单位为米。接下来就是solvepnp API的调用,使用方法如图2.3所示。

本版积分规则

触屏版 | 电脑版

Copyright © 2019 RoboMasters 版权所有

快速回复 返回顶部 返回列表