""" Author: Roman Solovyev, IPPM RAS URL: https://github.com/ZFTurbo """ import numpy as np def compute_overlap(boxes, query_boxes): """ Args a: (N, 4) ndarray of float b: (K, 4) ndarray of float Returns overlaps: (N, K) ndarray of overlap between boxes and query_boxes """ N = boxes.shape[0] K = query_boxes.shape[0] overlaps = np.zeros((N, K), dtype=np.float64) for k in range(K): box_area = ( (query_boxes[k, 2] - query_boxes[k, 0]) * (query_boxes[k, 3] - query_boxes[k, 1]) ) for n in range(N): iw = ( min(boxes[n, 2], query_boxes[k, 2]) - max(boxes[n, 0], query_boxes[k, 0]) ) if iw > 0: ih = ( min(boxes[n, 3], query_boxes[k, 3]) - max(boxes[n, 1], query_boxes[k, 1]) ) if ih > 0: ua = np.float64( (boxes[n, 2] - boxes[n, 0]) * (boxes[n, 3] - boxes[n, 1]) + box_area - iw * ih ) overlaps[n, k] = iw * ih / ua return overlaps