|
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) |
|
|