看到网上关于这个东西很直观的一个解释,今天看代码,直接理解还是比较抽象,所以也想把这个记下来供以后查看可以简单的将橙色框理解为检测(检测框);黑色框(轨道)追踪框。计算IOU即为
IOU =两框交集/两框区域和
def iou(det,trk):
#det,trk 代表检测框与轨迹(追踪框)
"""
Computes IUO between two bboxes in the form [x1,y1,x2,y2]
坐标顺序为 xmin ymin xmax ymax 确定一个矩形
"""
#det[0]代表检测框的左上顶角横坐标; trk[0]代表追踪框的左上顶角横坐标
xx1 = np.maximum(det[0], trk[0]) #使用maximum 函数;X 与 Y 逐位比较取其大者;
yy1 = np.maximum(det[1], trk[1])
xx2 = np.minimum(det[2], trk[2])
yy2 = np.minimum(det[3], trk[3])
#找到交集的左上顶角到右下顶角的坐标
w = np.maximum(0., xx2 - xx1)
h = np.maximum(0., yy2 - yy1)
#得到交集的宽高
wh = w * h
#iou为交并比;求并集会多算一个交集区域,减去一个即可
output = wh / ((det[2]-det[0])*(det[3]-det[1])
+ (trk[2]-trk[0])*(trk[3]-trk[1]) - wh)
return(output)