两个矩形的交并比(IOU)

两个矩形的交并比(IOU)


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

我们先来看下IOU的公式:

IOU=area(ROITROIG)area(ROITROIG) I O U = a r e a ( R O I T ⋂ R O I G ) a r e a ( R O I T ⋃ R O I G )

现在我们知道矩形T的左下角坐标 (X0,Y0) ( X 0 , Y 0 ) ,右上角坐标 (X1,Y1) ( X 1 , Y 1 ) ;
矩形G的左下角坐标 (A0,B0) ( A 0 , B 0 ) ,右上角坐标 (A1,B1) ( A 1 , B 1 ) .

IOU=area(ROITROIG)area(ROIT)+arae(ROIG)area(ROITROIG) I O U = a r e a ( R O I T ⋂ R O I G ) a r e a ( R O I T ) + a r a e ( R O I G ) − a r e a ( R O I T ⋂ R O I G )

这里我们可以看到 area(ROIT)arae(ROIG) a r e a ( R O I T ) 跟 a r a e ( R O I G ) 在确定坐标而不确定两个矩形是否相交的情况下,为已知的常量.

IOU=area(ROITROIG)SXY+SABarea(ROITROIG) I O U = a r e a ( R O I T ⋂ R O I G ) S X Y + S A B − a r e a ( R O I T ⋂ R O I G )

所以,我们只需要求解 area(ROITROIG) a r e a ( R O I T ⋂ R O I G ) 即可.

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

这里写图片描述
从上述的三种情况中我们可以看出:
当有重叠或者是内含的情况时,我们可以通过

W=min(X1,A1)max(X0,A0) W = m i n ( X 1 , A 1 ) − m a x ( X 0 , A 0 )
计算得到重叠部分的长度.当满足第一种情况时,我们发现 W<=0 W <= 0
竖直方向上的处理方式类似.得到 H H <script type="math/tex" id="MathJax-Element-14">H</script>

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

#RT:RightTop
#LB:LeftBottom
def IOU(rectangle A, rectangleB):
    W = min(A.RT.x, B.RT.x) - max(A.LB.x, B.LB.x)
    H = min(A.RT.y, B.RT.y) - max(A.LB.y, B.LB.y)
    if W <= 0 or H <= 0:
        return 0;
    SA = (A.RT.x - A.LB.x) * (A.RT.y - A.LB.y)
    SB = (B.RT.x - B.LB.x) * (B.RT.y - B.LB.y)
    cross = W * H
    return cross/(SA + SB - cross)
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值