|
@@ -0,0 +1,27 @@
|
|
|
|
+import numpy as np
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+def filter_small_boxes(boxes, min_width, min_height):
|
|
|
|
+ """Remove all boxes with side smaller than min size.
|
|
|
|
+
|
|
|
|
+ Args:
|
|
|
|
+ boxes: a numpy array with shape [N, 4] holding N boxes.
|
|
|
|
+ min_width (float): minimum width
|
|
|
|
+ min_height (float): minimum height
|
|
|
|
+
|
|
|
|
+ Returns:
|
|
|
|
+ keep: indices of the boxes that have width larger than
|
|
|
|
+ min_width and height larger than min_height.
|
|
|
|
+
|
|
|
|
+ References:
|
|
|
|
+ `_filter_boxes` in py-faster-rcnn
|
|
|
|
+ `prune_small_boxes` in TensorFlow object detection API.
|
|
|
|
+ `structures.Boxes.nonempty` in detectron2
|
|
|
|
+ `ops.boxes.remove_small_boxes` in torchvision
|
|
|
|
+ """
|
|
|
|
+ widths = boxes[:, 2] - boxes[:, 0]
|
|
|
|
+ heights = boxes[:, 3] - boxes[:, 1]
|
|
|
|
+ keep = (widths >= min_width)
|
|
|
|
+ keep &= (heights >= min_height)
|
|
|
|
+ return np.nonzero(keep)[0]
|
|
|
|
+
|