Our3D / lib /evaluate.py
yansong1616's picture
Upload 384 files
b177539 verified
raw
history blame
2.03 kB
import os
import numpy as np
import imageio
def cal_IoU(a, b):
"""Calculates the Intersection over Union (IoU) between two ndarrays.
Args:
a: shape (N, H, W).
b: shape (N, H, W).
Returns:
Shape (N,) containing the IoU score between each pair of
elements in a and b.
"""
intersection = np.count_nonzero(np.logical_and(a == b, a != 0))
union = np.count_nonzero(a + b)
return intersection / union
def cal_IoU_from_path(a_path, b_path):
"""Calculates the Intersection over Union (IoU) between two images.
Args:
a_path: path to image a.
b_path: path to image b.
Returns:
IoU score between image a and b.
"""
a = imageio.imread(a_path) > 0
b = imageio.imread(b_path) > 0
return cal_IoU(a, b)
def cal_IoU_from_paths(a_paths, b_paths):
"""Calculates the Intersection over Union (IoU) between two sets of images.
Args:
a_paths: list of paths to images in set a.
b_paths: list of paths to images in set b.
Returns:
Shape (N,) containing the IoU score between each pair of
elements in a and b.
"""
assert len(a_paths) == len(b_paths)
a = np.stack([imageio.imread(path) > 0 for path in a_paths])
b = np.stack([imageio.imread(path) > 0 for path in b_paths])
return cal_IoU(a, b)
if __name__ == '__main__':
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--mask_path', type=str, required=True)
parser.add_argument('--gt_path', type=str, required=True)
args = parser.parse_args()
if os.path.isdir(args.mask_path):
assert(os.path.isdir(args.gt_path))
mask_paths = [os.path.join(args.mask_path, f) for f in sorted(os.listdir(args.mask_path))]
gt_paths = [os.path.join(args.gt_path, f) for f in sorted(os.listdir(args.gt_path))]
iou = cal_IoU_from_paths(mask_paths, gt_paths)
else:
iou = cal_IoU_from_path(args.mask_path, args.gt_path)
print('IoU: ', iou)