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