iou

def calcIoU():
    groundTruthFolderName = ''dir/to/groundTruth'
    imgListName = 'dir/to/imglist'
    numImages = 138
    groundTruthSuffix = '_mask'
    resultsName = res_folder + 'result'
    
    IoUSet = []
    threshValue = 127


    imgListFileHandle = open(imgListName,'r')


    lines = imgListFileHandle.readlines()


    imgIdx = 0
    
    for line in lines:


        imgIdx += 1


        line = line[:-1]
        imgName = line.split()[0]
        groundTruthName = line.split()[1]


        imgNumber = imgName[0:-4]


        maskName = res_folder + imgNumber + version + imgSuffix
        groundTruthName = groundTruthFolderName + groundTruthName


        maskImg = cv2.imread(maskName, cv2.IMREAD_GRAYSCALE)


        groundTruthImg = cv2.imread(groundTruthName, cv2.IMREAD_GRAYSCALE)


        _, maskImg = cv2.threshold(maskImg, threshValue, 1, cv2.THRESH_BINARY)
        _, groundTruthImg = cv2.threshold(groundTruthImg, threshValue, 1, cv2.THRESH_BINARY)


        maskImg = np.array(maskImg, dtype=np.float32)
        groundTruthImg = np.array(groundTruthImg, dtype=np.float32)


        intersection = maskImg * groundTruthImg


        union = maskImg + groundTruthImg
        _, union = cv2.threshold(union, 0.5, 1, cv2.THRESH_BINARY)


        intersectionValue = intersection.sum()
        unionValue = union.sum()


        IoU = 100.0 * intersectionValue / unionValue


        print 'Image %d : IoU: %f' % (imgIdx,IoU)


        IoUSet.append(IoU)
 
    IoUSet = np.array(IoUSet,dtype=np.float32)


    IoUMean = IoUSet.mean()


    IoUStd = IoUSet - IoUMean
    IoUStd = np.square(IoUStd)


    IoUStd = IoUStd/numImages


    IoUStdValue = IoUStd.sum()


    IoUStdValue = np.sqrt(IoUStdValue)


    resultsFileHandle = open(resultsName,'w')


    resultsFileHandle.write("IoU mean: %f\n" % IoUMean)
    resultsFileHandle.write("IoU std: %f\n\n\n" % IoUStdValue)


    for imgIdx in range(len(IoUSet)):
        resultsFileHandle.write("%d\t%f\n" % (imgIdx + 1, IoUSet[imgIdx]))


    resultsFileHandle.close()


    print 'IoUMean: %f' % IoUMean
    print 'IoUStd: %f' % IoUStdValue 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值