iou计算演示

直接上代码:

# encoding: utf-8
import numpy as np

a = np.array([
    [0, 1, 1, 0],
    [0, 0, 1, 0],
    [0, 0, 0, 0],
    [0, 1, 1, 0],
])

b = np.array([
    [0, 1, 0, 0],
    [1, 1, 1, 0],
    [0, 1, 1, 0],
    [0, 0, 1, 0],
])

# 交集:与操作
i = np.bitwise_and(a, b)
print(" --------- Intersection --------- ")
print(i)

# 并集:或操作
u = np.bitwise_or(a, b)
print(" --------- Union ---------  ")
print(u)

i_num = len(i[np.where(i == 1)])
u_num = len(u[np.where(u == 1)])

iou = i_num / u_num

print(" --------- IOU --------- ")
print(iou)

# 补集 -- 全部不一样的点标记 (交集i, 并集u, 补集c)
print(" --------- Complementary --------- ")
c = np.bitwise_xor(u, i)
print(c)

 

### 交并比 (IoU) 公式详解 交并比(Intersection over Union, IoU),用于衡量两个边界框之间的重叠程度。具体而言,该度量通过计算预测边界框与真实边界框之间重叠区域面积除以两者联合区域总面积得到。 #### 计算公式 \[ \text{IoU} = \frac{\text{Area of Overlap}}{\text{Area of Union}} \] 其中: - **Overlap Area** 表示两个矩形相交部分的面积。 - **Union Area** 是指这两个矩形覆盖总区域大小减去它们共同占据的空间[^1]。 为了更直观理解这一概念,假设存在一对目标检测中的候选框A和B,则有: 1. 如果 A 和 B 完全不重合,那么 overlap area 将为零; 2. 当其中一个完全包含另一个时,union area 即较大者所占空间尺寸; 3. 对于部分交叉情况,需先求得交集再做相应运算处理。 #### Python 实现代码 下面给出一段简单的Python函数来演示如何基于上述定义实现IoU计算: ```python def calculate_iou(box_a, box_b): # 获取每个box的位置参数(x_min,y_min,x_max,y_max) x_a = max(box_a[0], box_b[0]) y_a = max(box_a[1], box_b[1]) x_b = min(box_a[2], box_b[2]) y_b = min(box_a[3], box_b[3]) inter_area = max(0, x_b - x_a + 1) * max(0, y_b - y_a + 1) box_a_area = (box_a[2] - box_a[0] + 1) * (box_a[3] - box_a[1] + 1) box_b_area = (box_b[2] - box_b[0] + 1) * (box_b[3] - box_b[1] + 1) iou = inter_area / float(box_a_area + box_b_area - inter_area) return iou ``` 此段程序接收两组坐标作为输入,并返回对应的IoU值。注意这里采用的是左上角右下角表示法[(x_min,y_min),(x_max,y_max)]来进行边界框描述。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值