两个矩形的交并比(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)
相关文章推荐
- 计算两个矩形IOU的算法
- Torch 两个矩形框重叠面积的计算 (IoU between tow bounding box)
- 确定一组矩形是否有两个重叠的算法
- 判断两个矩形相交以及求出相交的区域
- 判断两个线段\矩形相交
- 如何判断两个矩形相交
- ACM-输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”
- C# 获取两个矩形相减部分的GraphicsPath
- iphone中获取两个矩形的相交区域
- 判断两个矩形相交以及求出相交的区域(生成的相交矩形)
- 【html5每日练习】绘制两个重叠矩形(带滤镜效果)
- ios做的两个矩形相交叉
- 如何判断两个矩形相交
- 如何判断两个矩形是否相交
- 1.创建一个Rectangle类,添加width和height两个成员变量。 2.在Rectangle中添加两种方法分别计算矩形的周长和面积 3.编程利用Rectangle输出一个矩形的周
- iphone中获取两个矩形的相交区域
- 判断两个矩形是否相交
- Opencv求两个矩形是否相交,以及他们的重叠度
- 1.创建一个Rectangle类,添加width和height两个成员变量。 2.在Rectangle中添加两种方法分别计算矩形的周长和面积 3.编程利用Rectangle输出一个矩形的周
- 计算两个旋转矩形的交集——Python