IOU(交并比)计算的python3实现

IOU定义

在目标检测的评价体系中,有一个参数叫做 IoU ,简单来讲就是模型产生的目标窗口和原来标记窗口的交叠率。具体我们可以简单的理解为: 即检测结果(DetectionResult)与 Ground Truth 的交集比上它们的并集,即为检测的准确率 IoU :
在这里插入图片描述
根据定义,IOU的取值范围是[0,1].

python 代码实现(坐标系以图像左上角为原点)

# encoding: utf-8
def compute_IOU(rec1,rec2):
    """
    计算两个矩形框的交并比。
    :param rec1: (x0,y0,x1,y1)      (x0,y0)代表矩形左上的顶点,(x1,y1)代表矩形右下的顶点。下同。
    :param rec2: (x0,y0,x1,y1)
    :return: 交并比IOU.
    """
    left_column_max  = max(rec1[0],rec2[0])
    right_column_min = min(rec1[2],rec2[2])
    up_row_max       = max(rec1[1],rec2[1])
    down_row_min     = min(rec1[3],rec2[3])
    #两矩形无相交区域的情况
    if left_column_max>=right_column_min or down_row_min<=up_row_max:
        return 0
    # 两矩形有相交区域的情况
    else:
        S1 = (rec1[2]-rec1[0])*(rec1[3]-rec1[1])
        S2 = (rec2[2]-rec2[0])*(rec2[3]-rec2[1])
        S_cross = (down_row_min-up_row_max)*(right_column_min-left_column_max)
        return S_cross/(S1+S2-S_cross)
#测试样例1
r1=(2,3,10,12)
r2=(12,5,20,24)
IOU = compute_IOU(r1,r2)
print("测试样例1,IOU:%f"%IOU)
#测试样例2
r1=(2,2,4,4)
r2=(3,3,5,5)
IOU = compute_IOU(r1,r2)
print("测试样例2,IOU:%f"%IOU)

测试样例输出:

测试样例1,IOU:0.000000
测试样例2,IOU:0.142857
  • 10
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
计算两个框的并比通常用于目标检测或图像识别任务中,以下是用Python实现计算并比的基本步骤: 1. 首先,确定两个框的坐标表示方法。常用的坐标表示方法为左上角坐标和宽高表示方法,可以使用四个浮点数(x1, y1, w1, h1)和(x2, y2, w2, h2)来表示两个框,其中(x1, y1)和(x2, y2)为左上角坐标,(w1, h1)和(w2, h2)为宽和高。 2. 然后,计算两个框的相矩形的左上角坐标和右下角坐标,分别记为(x3, y3)和(x4, y4)。具体计算方法为: x3 = max(x1, x2) y3 = max(y1, y2) x4 = min(x1 + w1, x2 + w2) y4 = min(y1 + h1, y2 + h2) 3. 接下来,判断相矩形是否存在。如果相矩形的宽或高小于等于0,则说明两个框没有相并比为0。否则,继续下一步计算。 4. 计算矩形的面积,记为intersect_area。计算方法为intersect_area = (x4 - x3) * (y4 - y3)。 5. 计算两个框的面积,分别记为area1和area2。计算方法为area1 = w1 * h1,area2 = w2 * h2。 6. 计算并比,记为iou计算方法为iou = intersect_area / (area1 + area2 - intersect_area)。 在实际使用时,可以将上述步骤封装成一个函数,输入两个框的坐标信息,输出并比。使用Python编写相对简单,以下是一个示例函数的简单实现: ```python def calculate_iou(box1, box2): x1, y1, w1, h1 = box1 x2, y2, w2, h2 = box2 x3, y3 = max(x1, x2), max(y1, y2) x4, y4 = min(x1 + w1, x2 + w2), min(y1 + h1, y2 + h2) if x4 <= x3 or y4 <= y3: return 0.0 intersect_area = (x4 - x3) * (y4 - y3) area1 = w1 * h1 area2 = w2 * h2 iou = intersect_area / (area1 + area2 - intersect_area) return iou ``` 通过调用该函数,可以计算得到两个框的并比。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值