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