IOU计算Python代码实现

Posted vodka、

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IOU计算Python代码实现相关的知识,希望对你有一定的参考价值。

文章目录



一、目标检测中的IOU代码实现

目标检测中会用IOU大小的值来衡量检测结果与准确结果之间的差距,IOU的计算公式:
IOU=A∩B/A∪B,式中A,B为检测结果和准确结果(groundtruth)检测框的面积大小。

二、代码

代码如下(示例):

def compute_iou(rec_1,rec_2):
    '''
    rec_1:左上角(rec_1[0],rec_1[1])    右下角:(rec_1[2],rec_1[3])
    rec_2:左上角(rec_2[0],rec_2[1])    右下角:(rec_2[2],rec_2[3])

    (rec_1)
    1--------1
    1   1----1------1
    1---1----1      1
        1           1
        1-----------1 (rec_2)
    '''
    s_rec1=(rec_1[2]-rec_1[0])*(rec_1[3]-rec_1[1])   #第一个bbox面积 = 长×宽
    s_rec2=(rec_2[2]-rec_2[0])*(rec_2[3]-rec_2[1])   #第二个bbox面积 = 长×宽
    sum_s=s_rec1+s_rec2                              #总面积
    left=max(rec_1[0],rec_2[0])                      #并集左上角顶点横坐标
    right=min(rec_1[2],rec_2[2])                     #并集右下角顶点横坐标
    bottom=max(rec_1[1],rec_2[1])                    #并集左上角顶点纵坐标
    top=min(rec_1[3],rec_2[3])                       #并集右下角顶点纵坐标
    if left >= right or top <= bottom:               #不存在并集的情况
        return 0
    else:
        inter=(right-left)*(top-bottom)              #求并集面积
        iou=(inter/(sum_s-inter))*1.0                #计算IOU
        print(iou)
if __name__ == '__main__':
    rec_1=(663, 28, 683, 48)                     #四个值分别为左上角顶点(x1,y1),右下角坐标(x2,y2)
    rec_2=(663, 28, 683, 48)
    iou=compute_iou(rec_1,rec_2)
    print(iou)

总结

有问题可在评论区留言,欢迎交流!

以上是关于IOU计算Python代码实现的主要内容,如果未能解决你的问题,请参考以下文章

如何计算交并比IoU | 含图片说明和伪代码实现

NMS与IOU代码

python 计算两个盒子之间的IoU

Python - 计算两个球体相交的IoU

目标检测——IoU 计算

使用Python计算四边形与拟合四边形的最大交并比IOU