IoU(交并比)理解与计算

1. 概述

IoU(Intersection over Union)被广泛应用于计算机视觉中的目标检测、图像分割等领域,用于评价预测的区域和真实标签的区域的重叠程度。简单来说,其核心思想就是两个包围框的交集和并集的比值,也就是所谓的交并比。

计算公式为:

\text{IOU} = \frac{\text{Area of Intersection}}{\text{Area of Union}} = \frac{A \cap B}{A \cup B}

需要稍微注意的地方在于,不同的坐标系中,获取连个包围框的交集的方法稍微有些不同,但整体上来说,

相交区域的左边界:两个矩形框左边界中的 较右边
相交区域的右边界:两个矩形框右边界中的 较左边
相交区域的上边界:两个矩形框上边界中的 较下方
相交区域的下边界:两个矩形框下边界中的 较上方

也就是说,尽量往靠近中心点附近找。

2. 在图像坐标系中

由于图像是离散的像素点组成,因此在计算面积求宽和高时,不能直接right - left和top - bottom,应该加上第一列/行。 如四个像素点组成的矩形,仅用坐标相减时面积应该是1 * 1, 因此,在这里,我们加上1,得到的面积为(1 + 1) * (1 + 1)。 

def IoU_image(box1:Union[tuple,list],box2:Union[tuple,list]) -> float:
    """
    计算图像坐标系中的IoU
    box: 左上右下, [xmin, ymin, xmax, ymax]
    """
    xmin1, ymin1, xmax1, ymax1 = box1
    xmin2, ymin2, xmax2, ymax2 = box2

    left = max(xmin1, xmin2)
    right = min(xmax1, xmax2)
    top = max(ymin1, ymin2)
    bottom = min(ymax1, ymax2)

    inter_height = max(bottom - top + 1, 0)
    inter_width = max(right - left + 1, 0)
    inter_area = inter_width * inter_height

    area1 = (xmax1 - xmin1 + 1) * (ymax1 - ymin1 + 1)
    area2 = (xmax2 - xmin2 + 1) * (ymax2 - ymin2 + 1)
    union = area1 + area2 - inter_area + 1e-5   #防止除零

    return inter_area / union

2.  在二维笛卡尔坐标系中

def IoU_Cartesian_Coordinates(box1:Union[tuple,list],box2:Union[tuple,list]) -> float:
    """
    笛卡尔坐标系中计算IoU
    """
    xmin1, ymax1, xmax1, ymin1 = box1
    xmin2, ymax2, xmax2, ymin2 = box2

    left = max(xmin1, xmin2)
    right = min(xmax1, xmax2)
    top = min(ymax1, ymax2)
    bottom = max(ymin1, ymin2)

    inter_height = max(top - bottom, 0)
    inter_width = max(right - left, 0)
    inter_area = inter_width * inter_height

    area1 = (xmax1 - xmin1) * (ymax1 - ymin1)
    area2 = (xmax2 - xmin2) * (ymax2 - ymin2)
    union = area1 + area2 - inter_area + 1e-5   #防止除零

    return inter_area / union

Reference

https://zhuanlan.zhihu.com/p/473224484

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值