NMS算法(NonMaximumSuppression)

def nms(boxes,nms_threshold=0.6):
    l = len(boxes)
    if l==0:
        return []
    else:
        b_x = boxes[:,0]
        b_y = boxes[:,1]
        b_w = boxes[:,2]
        b_h = boxes[:,3]
        scores = boxes[:,4]
        areas = (b_w+1)*(b_h+1)
        order = scores.argsort()[::-1]
        keep = list()
        while order.size>0:
            i = order[0]
            keep.append(i)
            xx1 = np.maximum(b_x[i], b_x[order[1:]])
            yy1 = np.maximum(b_y[i], b_y[order[1:]])
            xx2 = np.minimum(b_x[i] + b_w[i], b_x[order[1:]] + b_w[order[1:]])
            yy2 = np.minimum(b_y[i] + b_h[i], b_y[order[1:]] + b_h[order[1:]])

            #相交面积,不重叠面积为0
            w = np.maximum(0.0,xx2-xx1+1)
            h = np.maximum(0.0,yy2-yy1+1)
            inter = w*h
            #相交面积,面积1+年纪2-相交
            union = areas[i]+areas[order[1:]]-inter
            #计算iou
            Iou = inter/union
            #保留IOu小于阈值的box
            inds = np.where(Iou<=nms_threshold)[0]
            order = order[inds+1] #

        final_boxes = [boxes[i] for i in keep]
        return final_boxes
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值