IOU计算方式

我能想到的有7种
IOU计算方式_第1张图片

如果只是简单的按照如下的来找left up和right down的点进行计算是不能囊括全部情况的
IOU计算方式_第2张图片
按照计算机图形学的方法:

def cal_iou(box1, box2):
    # 从x轴看无交点,直接不用计算
    if box1[2] < box2[0] or box1[0] > box2[2]:
        return -1
    if box1[3] < box2[1] or box1[1] > box2[3]:
        return -1
    def cal_area(box):
        return (box[2] - box[0]) * (box[3] - box[1])
    area1 = cal_area(box1)
    area2 = cal_area(box2)
    # inner
    x = [box1[0], box1[2], box2[0], box2[2]]
    y = [box1[1], box1[3], box2[1], box2[3]]
    # 排序
    x.sort()
    y.sort()
    innerArea = abs(x[1]-x[2]) * abs(y[1]-y[2])
    return innerArea / (area1 + area2 - innerArea)

该算法的思想是,不管是7种情况中的哪种,里面的矩形的宽高都能通过找到中间的两条线之间的距离进行计算

你可能感兴趣的:(计算机科学与技术,python,数据结构,算法,IOU)