| import torch |
| import numpy as np |
| import scipy |
|
|
| |
| class AnyType(str): |
| def __ne__(self, __value: object) -> bool: |
| return False |
|
|
| def min_(tensor_list): |
| |
| x = torch.stack(tensor_list) |
| mn = x.min(axis=0)[0] |
| return torch.clamp(mn, min=0) |
|
|
| def max_(tensor_list): |
| |
| x = torch.stack(tensor_list) |
| mx = x.max(axis=0)[0] |
| return torch.clamp(mx, max=1) |
|
|
| def expand_mask(mask, expand, tapered_corners): |
| c = 0 if tapered_corners else 1 |
| kernel = np.array([[c, 1, c], |
| [1, 1, 1], |
| [c, 1, c]]) |
| mask = mask.reshape((-1, mask.shape[-2], mask.shape[-1])) |
| out = [] |
| for m in mask: |
| output = m.numpy() |
| for _ in range(abs(expand)): |
| if expand < 0: |
| output = scipy.ndimage.grey_erosion(output, footprint=kernel) |
| else: |
| output = scipy.ndimage.grey_dilation(output, footprint=kernel) |
| output = torch.from_numpy(output) |
| out.append(output) |
|
|
| return torch.stack(out, dim=0) |
|
|