其他分享
首页 > 其他分享> > RM装甲板识别

RM装甲板识别

作者:互联网

目录

装甲板检测功能

开发环境

Visual Studio 2017 + OpenCV3.4.5。

装甲板检测流程图

在这里插入图片描述

原理及操作

对于目标装甲板的识别,采取的是根据灯柱的位置来确定装甲板的位置的方法,所以准确的找到灯柱的位置是十分重要的,还要根据装甲板的特征来设定筛选条件,以此来准确定位到装甲板。因为识别时面对的情况是多种多样的,我们需要排除各种环境干扰并提高程序的鲁棒性,同时目标的快速移动也会给目标识别带来很大的挑战,这就要对算法的效率要求更加的严格。
装甲板检测算法如下:

  1. 先将摄像头采集到的图像转为灰度图,对灰度图进行二值化找出亮度较高的区域1,再通过对原图通道相减并二值化得到包含目标颜色的区域2,将区域1和区域2进行相与操作并通过形态学操作得到灯柱候选区域。
    具体实现方法:
  1. 对灯柱候选区域进行处理,找到符合条件的灯柱。
    具体实现方法:
* 最小包围矩形偏离垂直方向的角度的绝对值;
* 最小包围矩形最长边的数值;
* 最小包围矩形的面积;
* 最小包围矩形长边与短边的比值;

有关参数数值要根据实际情况而定

bool condition_angle1 = (fabs(tmp_rect.angle) < 45.0) && tmp_rect.size.height > tmp_rect.size.width; 
bool condition_angle2 = (fabs(tmp_rect.angle) > 60.0) && tmp_rect.size.width > tmp_rect.size.height; 
bool condition_length = max_len > 7;
bool condition_area = area_contour > 25 && area_contour < 600;
bool condition_ratio = (max_len / min_len > 1.5) && (max_len / min_len < 25.0);

在这里插入图片描述
3. 对筛选出来的灯柱两两匹配,筛选出装甲板区域,并对筛选出来的目标进行分析,得到最佳打击目标。
具体实现如下:

* 灯柱中点的距离;
* 灯柱之间的较长边的比值;
* 灯柱之间角度差值的绝对值;
* 灯柱中点坐标y的差值;

有关参数数值要根据实际情况而定

bool condition1 = distance > MAX(leni, lenj) && distance <= 3*MAX(leni, lenj)/*150*/;	 //灯条中点距离
bool condition3 = rate < 1.5;//长度比值
bool condition4 = angle_sub >= 0 && angle_sub < 15;		//角度差
bool condition5 = fabs(rect_i.center.y - rect_j.center.y) < 0.5*fabs(rect_i.center.x - rect_j.center.x);

结果分析

在这里插入图片描述

在这里插入图片描述

该装甲板检测方法能够准确找到目标装甲板的位置,可以适应较多环境,对于不同角度的的目标装甲板识别有较好的识别率,即使面对反光等情况也有较好的稳定性,但是当距离较远时或者环境干扰较多时,可能会出现无法识别或者识别错误的情况。

标签:tmp,color,区域,灯柱,RM,识别,rect,装甲
来源: https://blog.csdn.net/weixin_43871310/article/details/105584650