determine overlaps between boxes and query_boxes :param boxes: n * 4 bounding boxes :param query_boxes: k * 4 bounding boxes :return: overlaps: n * k overlaps
(self, boxes, query_boxes)
| 264 | return max_id, max_cos |
| 265 | |
| 266 | def bbox_overlaps_py(self, boxes, query_boxes): |
| 267 | """ |
| 268 | determine overlaps between boxes and query_boxes |
| 269 | :param boxes: n * 4 bounding boxes |
| 270 | :param query_boxes: k * 4 bounding boxes |
| 271 | :return: overlaps: n * k overlaps |
| 272 | """ |
| 273 | n_ = boxes.shape[0] |
| 274 | k_ = query_boxes.shape[0] |
| 275 | overlaps = np.zeros((n_, k_), dtype=np.float) |
| 276 | for k in range(k_): |
| 277 | query_box_area = (query_boxes[k, 2] - query_boxes[k, 0] + 1) * (query_boxes[k, 3] - query_boxes[k, 1] + 1) |
| 278 | for n in range(n_): |
| 279 | iw = min(boxes[n, 2], query_boxes[k, 2]) - max(boxes[n, 0], query_boxes[k, 0]) + 1 |
| 280 | if iw > 0: |
| 281 | ih = min(boxes[n, 3], query_boxes[k, 3]) - max(boxes[n, 1], query_boxes[k, 1]) + 1 |
| 282 | if ih > 0: |
| 283 | box_area = (boxes[n, 2] - boxes[n, 0] + 1) * (boxes[n, 3] - boxes[n, 1] + 1) |
| 284 | all_area = float(box_area + query_box_area - iw * ih) |
| 285 | overlaps[n, k] = iw * ih / all_area |
| 286 | return overlaps |
| 287 | |
| 288 | |
| 289 |