目标检测时的区域合并

在目标检测过程中,可能会遇到这样的情况:一个目标被标记为多个区域。

如果一个目标被标记为多个区域,后续的跟踪很容易出现跟错、跟丢,这个情形在自动检测场和是很避讳的。

以下提供一个避免的方法:


  • 是否合并?

通过一些条件判断,可以将本为同一目标的区域辨识,前文应该讲过判断方法。

  1. 中心距离在阈值范围内;
  2. 两个区域存在交集(包含在内为交集的特殊情况)。

虽然不全面,但是在目标检测场和有一定作用。

  • 如何合并:

关于合并,笔者采用的流程如下:

  1. 寻找被合并区域的左上顶点;
  2. 计算合并区域的宽高。

左上顶点直接取顶点x、y最小值即可。关于合并后区域的宽高,可以采取这样的操作:
计算四个顶点中,x、y最小最大值,宽高即为对应x、y的差值。
具体实现如下:


void CPOS::AreaMerge(cv::Rect &inRect1, cv::Rect &inRect2, cv::Rect &outRect)
{
	int x_0 = inRect1.x;
	int x_1 = inRect1.x + inRect1.width;
	int x_2 = inRect2.x;
	int x_3 = inRect2.x + inRect2.width;

	int y_0 = inRect1.y;
	int y_1 = inRect1.y + inRect1.height;
	int y_2 = inRect2.y;
	int y_3 = inRect2.y + inRect2.height;

	int x_min=0, x_max=0, y_min=0, y_max=0;
	MinMax(x_0, x_1, x_2, x_3, x_min, x_max);
	MinMax(y_0, y_1, y_2, y_3, y_min, y_max);
	int width = x_max - x_min;
	int height = y_max - y_min;

	outRect.x = x_min;
	outRect.y = y_min;
	outRect.width = width;
	outRect.height = height;	
}

MinMax是笔者自己写的计算四个数的最小最大值,这个可以自行选择。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值