IOU现场编写,当时想法是用大的面积减去两个小的面积,但是编写起来很麻烦,考完了想起来可以用两个框的长相加再减去图像并集的宽,得到的就是交集的长度,避免了两个框位置的关系引起的不必要麻烦,即
同理纵坐标也可得到
得到交集长宽后即可算出交集的面积,而并集的面积就是两个面积相加再减去并集的面积
def iou(bbox1,bbox2):
x_max = max(bbox1[2],bbox2[2])
x_min = min(bbox1[0],bbox2[0])
x =x_max - x_min
x_1 = bbox1[2] - bbox1[0]
x_2 = bbox2[2] - bbox2[0]
x_i = max(0,x_2 +x_1 -x)
y_max = max(bbox1[3],bbox2[3])
y_min = min(bbox1[1],bbox2[1])
y =y_max - y_min
y_1 = bbox1[3] - bbox1[1]
y_2 = bbox2[3] - bbox2[1]
y_i =max(0, y_2 + y_1 -y)
i = x_i * y_i
arce1 = x_1 * y_1
arce2 = x_2 * y_2
u = arce1 + arce2 - i
return i / u