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
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