关于nms交并比计算

nms 交并比计算

c++ 代码解析

static inline float intersection_area(const Object& a, const Object& b)
{
    if (a.x > b.x + b.w || a.x + a.w < b.x || a.y > b.y + b.h || a.y + a.h < b.y)
    {
        // no intersection
        return 0.f;
    }

    float inter_width = std::min(a.x + a.w, b.x + b.w) - std::max(a.x, b.x);
    float inter_height = std::min(a.y + a.h, b.y + b.h) - std::max(a.y, b.y);

    return inter_width * inter_height;
}

这段代码定义了一个静态内联函数 intersection_area,用于计算两个物体(Object)之间的交集面积。函数的输入参数为两个 Object 类型的引用,分别命名为 ab

函数首先通过检查两个物体之间的位置关系来判断它们是否相交。如果两个物体不相交,即其中一个物体在另一个物体的左侧、右侧、上方或下方,则返回的交集面积为 0。

如果两个物体相交,则计算它们相交部分的宽度和高度,并将其相乘得到交集面积。具体的计算过程如下:

  1. 如果 a 物体的右边界在 b 物体的左边界的左侧,或者 a 物体的左边界在 b 物体的右边界的右侧,则两个物体没有水平方向上的重叠,此时交集宽度为 0。

  2. 如果 a 物体的下边界在 b 物体的上边界的上方,或者 a 物体的上边界在 b 物体的下边界的下方,则两个物体没有垂直方向上的重叠,此时交集高度为 0。

  3. 否则,计算水平方向上的交集宽度为两个物体右边界的最小值减去左边界的最大值,计算垂直方向上的交集高度为两个物体下边界的最小值减去上边界的最大值。

  4. 最后,返回交集宽度和交集高度的乘积,即为交集面积。

这个函数是对物体之间相交情况的一种简单判断和计算,常用于目标检测等应用中,以评估检测到的物体之间的重叠程度。

python实现

def intersection_area(a, b):
    """
    计算两个边界框之间的交集面积
    
    参数:
    a: 第一个边界框,表示为 (x, y, w, h),其中 (x, y) 是左上角坐标,w 和 h 是宽度和高度
    b: 第二个边界框,表示为 (x, y, w, h),其中 (x, y) 是左上角坐标,w 和 h 是宽度和高度
    
    返回值:
    两个边界框的交集面积
    """
    # 计算交集区域的坐标
    x1 = max(a[0], b[0])
    y1 = max(a[1], b[1])
    x2 = min(a[0] + a[2], b[0] + b[2])
    y2 = min(a[1] + a[3], b[1] + b[3])

    # 检查是否存在交集
    if x1 >= x2 or y1 >= y2:
        return 0.0

    # 计算交集区域的宽度和高度
    inter_width = x2 - x1
    inter_height = y2 - y1

    # 计算交集面积
    intersection_area = inter_width * inter_height

    return intersection_area

# 示例用法
box1 = (100, 100, 100, 100)  # (x, y, w, h)
box2 = (150, 150, 100, 100)  # (x, y, w, h)
area = intersection_area(box1, box2)
print("交集面积:", area)
 

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值