您的位置:首页 > 其它

两个矩形的交并比(IOU)

2016-10-21 21:53 232 查看

两个矩形的交并比(IOU)

由于最近的项目里面要用到,虽然是个小东西,但还是来记录一下.

我们先来看下IOU的公式:

IOU=area(RIOT⋂RIOG)area(RIOT⋃RIOG)

现在我们知道矩形T的左下角坐标(X0,Y0),右上角坐标(X1,Y1);

矩形G的左下角坐标(A0,B0),右上角坐标(A1,B1).

IOU=area(RIOT⋂RIOG)area(RIOT)+arae(RIOG)−area(RIOT⋂RIOG)

这里我们可以看到area(RIOT)跟arae(RIOG)在确定坐标而不确定两个矩形是否相交的情况下,为已知的常量.

IOU=area(RIOT⋂RIOG)SXY+SAB−area(RIOT⋂RIOG)

所以,我们只需要求解area(RIOT⋂RIOG)即可.

这里我们先来看一下水平方向上的情况:



(上图红线代表X0X1,蓝线代表A0A1)

水平方向上不重叠:

X0[b]_[/b]X1 A0____A1

水平方向上有重叠:

  X0[b]___[/b]X1

   Max0__Min1(重叠部分)

     A0____A1

水平方向上内含: 

  X0[b]___________[/b]X1

  A0____A1

Max0[b]_[/b]Min1(重叠部分)

从上述的三种情况中我们可以看出:

当有重叠或者是内含的情况时,我们可以通过

W=min(X1,A1)−max(X0,A0)

计算得到重叠部分的长度.当满足第一种情况时,我们发现W<=0

竖直方向上的处理方式类似.得到H

所以处理成代码的时候可得:

def IOU(rectangle A, rectangleB):
W = min(A.RT.a, B.RT.a) - max(A.LB.a, B.RT.a)
H = min(A.RT.b, B.RT.b) - max(A.LB.b, B.RT.b)
if W <= 0 or H <= 0:
return 0;
SA = (A.RT.a - A.LB.a) * (A.RT.b - A.LB.b)
SB = (B.RT.a - B.LB.B) * (B.RT.b - B.LB.b)
cross = W * H
return cross/(SA + SB - cross)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: