|
@@ -6,8 +6,7 @@ def __expand_parts(p):
|
|
|
return p[:, 0], p[:, 1:3], p[:, 3].astype(bool)
|
|
|
|
|
|
|
|
|
-
|
|
|
-def uniform_part_locs(im, ratio=DEFAULT_RATIO, round_op=np.floor):
|
|
|
+def uniform_parts(im, ratio=DEFAULT_RATIO, round_op=np.floor):
|
|
|
h, w, c = im.shape
|
|
|
|
|
|
part_w = round_op(w * ratio).astype(np.int32)
|
|
@@ -15,17 +14,16 @@ def uniform_part_locs(im, ratio=DEFAULT_RATIO, round_op=np.floor):
|
|
|
|
|
|
n, m = w // part_w, h // part_h
|
|
|
|
|
|
- idxs = np.arange(n*m)
|
|
|
- locs = np.zeros((2, n*m), dtype=np.int32)
|
|
|
-
|
|
|
+ parts = np.ones((n*m, 4), dtype=int)
|
|
|
+ parts[:, 0] = np.arange(n*m)
|
|
|
|
|
|
for x in range(n):
|
|
|
for y in range(m):
|
|
|
i = y * n + x
|
|
|
x0, y0 = x * part_w, y * part_h
|
|
|
- locs[:, i] = [x0 + part_w // 2, y0 + part_h // 2]
|
|
|
+ parts[i, 1:3] = [x0 + part_w // 2, y0 + part_h // 2]
|
|
|
|
|
|
- return idxs, locs
|
|
|
+ return parts
|
|
|
|
|
|
def visible_part_locs(p):
|
|
|
idxs, locs, vis = __expand_parts(p)
|
|
@@ -66,3 +64,27 @@ def reveal_parts(im, xy, ratio=DEFAULT_RATIO):
|
|
|
res[y0:y0+crop_h, x0:x0+crop_w] = im[y0:y0+crop_h, x0:x0+crop_w]
|
|
|
|
|
|
return res
|
|
|
+
|
|
|
+def random_select(idxs, xy, part_crops, *args, **kw):
|
|
|
+ rnd_idxs = random_idxs(np.arange(len(idxs)), *args, **kw)
|
|
|
+ idxs = idxs[rnd_idxs]
|
|
|
+ xy = xy[:, rnd_idxs]
|
|
|
+
|
|
|
+ selected_mask = np.bincount(idxs, minlength=len(part_crops)).astype(bool)
|
|
|
+ p_crops = part_crops.copy()
|
|
|
+ p_crops[np.logical_not(selected_mask)] = 0
|
|
|
+
|
|
|
+ return idxs, xy, p_crops
|
|
|
+
|
|
|
+def random_idxs(idxs, rnd=None, n_parts=None):
|
|
|
+
|
|
|
+ if rnd is None or isinstance(rnd, int):
|
|
|
+ rnd = np.random.RandomState(rnd)
|
|
|
+ else:
|
|
|
+ assert isinstance(rnd, np.random.RandomState), \
|
|
|
+ "'rnd' should be either a random seed or a RandomState instance!"
|
|
|
+
|
|
|
+ n_parts = n_parts or rnd.randint(1, len(idxs))
|
|
|
+ res = rnd.choice(idxs, n_parts, replace=False)
|
|
|
+ res.sort()
|
|
|
+ return res
|