IoU的计算

一. IoU介绍

  • IoU,即 intersection over Union,就是两个矩形框的交集面积与他们并集面积的比值。(其实也不一定是矩形框,这里以矩形框进行说明)
  • IoU也是一种算法性能的指标,例如在语义分割时就会用IoU来衡量分割效果的好坏。
  • 举例说明,如下图所示:在这里插入图片描述

已知:

  1. 左边的矩形框假设为N,左上角坐标为(x1, y1), 右下角坐标为(x2, y2);
  2. 右边的矩形框假设为M,左上角坐标为(a1, a1), 右下角坐标为(a2, a2);
  3. 相交的矩形框假设为X,左上角坐标设为点A,右下角坐标设为点B;

现在要计算 IoU = area_X / (area_N + area_M - area_X) ?

二. 计算思路

2.1 相交的情况

两个矩形相交情况,如上图所示,只要矩形框A和B点的坐标,即可求出相交区域的面积,从而求得IoU。
计算思路如下:

  • A的横坐标 等于 两个矩形框左上角横坐标较大的那个,即Ax = max(x1, a1)
  • A的纵坐标 等于 两个矩形框左上角纵坐标较大的那个,即Ay = max(y1, b1)
  • B的横坐标 等于 两个矩形框右下角横坐标较小的那个,即Bx = min(x2, a2)
  • B的纵坐标 等于 两个矩形框右下角纵坐标较小的那个,即By = min(y2, b2)

2.2 不相交情况

以矩形框N为参考矩形,矩形框M如果与N不相交,那么M可能出现在N的上下左右,四种情况,如下图所示:在这里插入图片描述

有两种判断不相交的方法:

  1. 上面的四种情况,用红字标出了;
  2. 计算出的相交区域宽和高假设为w, h, 如果不相交的话,会出现w<=0,或者 h<=0。

三. 代码

def iou(x1,y1, x2, y2, a1, b1, a2, b2):
	ax = max(x1, a1) # 相交区域左上角横坐标
	ay = max(y1, b1) # 相交区域左上角纵坐标
	bx = min(x2, a2) # 相交区域右下角横坐标
	by = min(y2, b2) # 相交区域右下角纵坐标
	
	area_N = (x2 - x1) * (y2 - y1)
	area_M = (a2 - a1) * (b2 - b1)
	
	w = bx - ax
	h = by - ay
	if w<=0 or h<=0:
		return 0 # 不相交返回0	
	area_X = w * h
	return area_X / (area_N + area_M - area_X)
  • 上述代码可以对w和h可以取max(0, w)和max(0, h),这样就简化了代码,如下所示:
def iou(x1,y1, x2, y2, a1, b1, a2, b2):
	ax = max(x1, a1) # 相交区域左上角横坐标
	ay = max(y1, b1) # 相交区域左上角纵坐标
	bx = min(x2, a2) # 相交区域右下角横坐标
	by = min(y2, b2) # 相交区域右下角纵坐标
	
	area_N = (x2 - x1) * (y2 - y1)
	area_M = (a2 - a1) * (b2 - b1)
	
	w = max(0, bx - ax)
	h = max(0, by - ay)
	area_X = w * h
	
	return area_X / (area_N + area_M - area_X)
  • 16
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值