ruijiege

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
def iou(a, b):
    """
    :param a:4*M*1 left,top,right,bottom
    :param b:4*1*N left,top,right,bottom
    :return:
    """
    aleft, atop, aright, abottom = [a[i] for i in range(4)]
    bleft, btop, bright, bbottom = [b[i] for i in range(4)]

    cross_left = np.maximum(aleft, bleft)
    cross_top = np.maximum(atop, btop)
    cross_right = np.minimum(aright, bright)
    cross_bottom = np.minimum(abottom, bbottom)

    # 如果没有交集就需要裁切(M*N)
    cross_area = (cross_right - cross_left + 1).clip(0) * (cross_bottom - cross_top + 1).clip(0)

    union_area = (aright - aleft + 1) * (abottom - atop + 1) + (bright - bleft + 1) * (bbottom - btop + 1) - cross_area
    return cross_area / union_area


if __name__ == '__main__':
    a = np.arange(0, 12).reshape(4, -1, 1)
    b = np.arange(12, 24).reshape(4, 1, -1)
    iou(a,b)

 

posted on 2022-12-08 10:00  哦哟这个怎么搞  阅读(22)  评论(0编辑  收藏  举报