File size: 2,226 Bytes
ac7cda5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import numpy as np


def get_mask(W, H, ratio_w=0.9, ratio_h=0.9):
    w = int(W * ratio_w)
    h = int(H * ratio_h)

    x1 = (W - w) // 2
    x2 = x1 + w

    y1 = (H - h) // 2
    y2 = y1 + h

    mask = np.ones((H, W), dtype=np.float32)

    # top
    row = np.linspace(0, 0, w)[None, :]  # (1, w)
    col = np.linspace(0, 1, y1)[:, None]  # (y1, 1)
    grad_t = np.sqrt(row**2 + col**2).astype(np.float32)  # (y1, w)
    mask[0:y1, x1:x2] = grad_t

    # bottom
    row = np.linspace(0, 0, w)[None, :]  # (1, w)
    col = np.linspace(1, 0, H - y2)[:, None]  # (H-y2, 1)
    grad_b = np.sqrt(row**2 + col**2).astype(np.float32)  # (H-y2, w)
    mask[y2:H, x1:x2] = grad_b

    # left
    row = np.linspace(0, 1, x1)[None, :]  # (1, x1)
    col = np.linspace(0, 0, h)[:, None]  # (h, 1)
    grad_l = np.sqrt(row**2 + col**2).astype(np.float32)  # (h, x1)
    mask[y1:y2, 0:x1] = grad_l

    # right
    row = np.linspace(1, 0, W - x2)[None, :]  # (1, W-x2)
    col = np.linspace(0, 0, h)[:, None]  # (h, 1)
    grad_r = np.sqrt(row**2 + col**2).astype(np.float32)  # (h, W-x2)
    mask[y1:y2, x2:W] = grad_r

    # top left
    row = np.linspace(1, 0, x1)[None, :]  # (1, w)
    col = np.linspace(1, 0, y1)[:, None]  # (y1, 1)
    grad_tl = np.sqrt(row**2 + col**2).astype(np.float32)  # (y1, x1)
    grad_tl = 1 - np.clip(grad_tl, 0, 1)
    mask[0:y1, 0:x1] = grad_tl

    # top right
    row = np.linspace(0, 1, W - x2)[None, :]  # (1, W-x2)
    col = np.linspace(1, 0, y1)[:, None]  # (y1, 1)
    grad_tr = np.sqrt(row**2 + col**2).astype(np.float32)  # (y1, W-x2)
    grad_tr = 1 - np.clip(grad_tr, 0, 1)
    mask[0:y1, x2:W] = grad_tr

    # bottom left
    row = np.linspace(1, 0, x1)[None, :]  # (1, x1)
    col = np.linspace(0, 1, H - y2)[:, None]  # (H-y2, 1)
    grad_bl = np.sqrt(row**2 + col**2).astype(np.float32)  # (H-y2, x1)
    grad_bl = 1 - np.clip(grad_bl, 0, 1)
    mask[y2:H, 0:x1] = grad_bl

    # bottom right
    row = np.linspace(0, 1, W - x2)[None, :]  # (1, W-x2)
    col = np.linspace(0, 1, H - y2)[:, None]  # (H-y2, 1)
    grad_br = np.sqrt(row**2 + col**2).astype(np.float32)  # (H-y2, W-x2)
    grad_br = 1 - np.clip(grad_br, 0, 1)
    mask[y2:H, x2:W] = grad_br
    return mask[:, :, None]