retinaface / widerface_evaluate /box_overlaps.py
zhengrongzhang's picture
Upload box_overlaps.py (#9)
6d5cf07 verified
raw
history blame
1.14 kB
import numpy as np
def bbox_overlaps(boxes, query_boxes):
"""
Parameters
----------
boxes: (N, 4) ndarray of float
query_boxes: (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.float)
box_area = (
(query_boxes[:, 2] - query_boxes[:, 0] + 1) *
(query_boxes[:, 3] - query_boxes[:, 1] + 1)
)
for n in range(N):
iw = (
np.maximum(0, np.minimum(boxes[n, 2], query_boxes[:, 2]) -
np.maximum(boxes[n, 0], query_boxes[:, 0]) + 1)
)
ih = (
np.maximum(0, np.minimum(boxes[n, 3], query_boxes[:, 3]) -
np.maximum(boxes[n, 1], query_boxes[:, 1]) + 1)
)
ua = (
(boxes[n, 2] - boxes[n, 0] + 1) *
(boxes[n, 3] - boxes[n, 1] + 1) +
box_area - iw * ih
)
overlaps[n, :] = np.where((iw > 0) & (ih > 0), iw * ih / ua, 0)
return overlaps