『人脸识别』MTCNN之Pytorch版本IOU代码实现

IOU代码

import numpy as np

def iou(box,boxes,isMin=False):#框的格式定义为:[X1,Y1,X2,Y2,C]。一个框和一堆框做比较。为了区分交集是与并集作比较还是和最小面积做比较,先将最小面积赋予默认值0.
    #计算每个框的面积
    box_area=(box[2]-box[0])*(box[3]-box[1])#先计算box的面积。一个框的面积计算:(X2-X1)*(Y2-Y1)。索引拿到坐标值:(box[2]-box[0])*(box[3]-box[1])
    boxes_area=(boxes[:,2]-boxes[:,0])*(boxes[:,3]-boxes[:,1])#一堆框的格式:[[],[],[],[],[],...]

    #计算交集面积
    xx1=np.maximum(box[0],boxes[:,0])#左上角X。交集左上角点坐标:两个相交原框中左上角X和Y各自取较大值,作为交集左上角坐标。用于比较的框的左上角x值:box[0];被比较的框的左上角x值:boxes[0]。去两者较大值。
    yy1=np.maximum(box[1],boxes[:,1])#同理.左上角Y。
    xx2 = np.minimum(box[2], boxes[:, 2])  # 同理.右下角X。
    yy2 = np.minimum(box[3], boxes[:, 3])  # 同理.右下角Y。

    #判断是否有交集
    w=np.maximum(0,xx2-xx1)#当xx2-xx1的值为负值时,表示没有交集,将没有交集的结果变成0即可。使用maximum函数取较大值。
    h=np.maximum(0,yy2-yy1)#同理。

    #正式计算交集面积
    inter=w*h

    if isMin:#如果isMin为True,表示除以最小面积。
        over=np.true_divide(inter,np.minimum(box_area,boxes_area))#true_divide:除法。isMin为True时,除以最小面积。如何得到最小面积呢?比较box_area和boxes_area,取最小值就可得到最小面积。
    else:#否则,除以并集面积。
        over = np.true_divide(inter, (box_area+boxes_area-inter))#两个矩形面积相加减去交集面积
        
    return over
发布了29 篇原创文章 · 获赞 45 · 访问量 5044

猜你喜欢

转载自blog.csdn.net/sinat_39783664/article/details/104142787