1、什么是Iou?
IoU 的全称为交并比(Intersection over Union),通过这个名称我们大概可以猜到 IoU 的计算方法。IoU 计算的是 “预测的边框” 和 “真实的边框” 的交集和并集的比值。公式如图所示。
2、代码
为了方便理解代码,先画了个图,原点建立坐标系,右为x正,下为y正
def iou(box1, box2):
'''
box: [ 0, 1, 2, 3]
box: [x1, y1, x2, y2],依次为左上右下坐标
'''
w = max(0, min(box1[2], box2[2]) - max(box1[0], box2[0]))
h = max(0, min(box1[3], box2[3]) - max(box1[1], box2[1]))
Inter = w * h
S_box1 = (box1[2]-box1[0]) * (box1[3]-box1[1])
S_box2 = (box2[2]-box2[0]) * (box2[3]-box2[1])
Union = S_box1 + S_box2 - Inter
iou = Inter / Union
return iou
box1 = [0, 0, 2, 2]
box2 = [1, 1, 3, 3]
Iou = iou(box1, box2)
print(Iou)
def iou(box1, box2):
'''
box1: [x1, y1, x2, y2] 依次为左上右下坐标
box2:[x3, y3, x4, y4]
'''
x1, y1, x2, y2 = map(int, box1)
x3, y3, x4, y4 = map(int, box2)
w = max(0, min(x2, x4) - max(x1, x3))
h = max(0, min(y2, y4) - max(y1, y3))
S_box1 = ((x2 - x1) * (y2 - y1))
S_box2 = ((x4 - x3) * (y4 - y3))
Inter = w * h
Union = S_box1 + S_box2 - Inter
iou = Inter / Union
return iou
box1 = [0, 0, 3, 3]
box2 = [1, 1, 6, 6]
IoU = iou(box1, box2)
print("IoU:", IoU)