Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
hackassin
GitHub Repository: hackassin/learnopencv
Path: blob/master/FBAMatting/networks/transforms.py
3119 views
1
import cv2
2
import numpy as np
3
import torch
4
5
6
def dt(a):
7
return cv2.distanceTransform((a * 255).astype(np.uint8), cv2.DIST_L2, 0)
8
9
10
def trimap_transform(trimap):
11
h, w = trimap.shape[0], trimap.shape[1]
12
13
clicks = np.zeros((h, w, 6))
14
for k in range(2):
15
if np.count_nonzero(trimap[:, :, k]) > 0:
16
dt_mask = -dt(1 - trimap[:, :, k]) ** 2
17
L = 320
18
clicks[:, :, 3 * k] = np.exp(dt_mask / (2 * ((0.02 * L) ** 2)))
19
clicks[:, :, 3 * k + 1] = np.exp(dt_mask / (2 * ((0.08 * L) ** 2)))
20
clicks[:, :, 3 * k + 2] = np.exp(dt_mask / (2 * ((0.16 * L) ** 2)))
21
22
return clicks
23
24
25
# For RGB !
26
group_norm_std = [0.229, 0.224, 0.225]
27
group_norm_mean = [0.485, 0.456, 0.406]
28
29
30
def groupnorm_normalise_image(img, format="nhwc"):
31
"""
32
Accept rgb in range 0,1
33
"""
34
if format == "nhwc":
35
for i in range(3):
36
img[..., i] = (img[..., i] - group_norm_mean[i]) / group_norm_std[i]
37
else:
38
for i in range(3):
39
img[..., i, :, :] = (
40
img[..., i, :, :] - group_norm_mean[i]
41
) / group_norm_std[i]
42
43
return img
44
45
46
def groupnorm_denormalise_image(img, format="nhwc"):
47
"""
48
Accept rgb, normalised, return in range 0,1
49
"""
50
if format == "nhwc":
51
for i in range(3):
52
img[:, :, :, i] = img[:, :, :, i] * group_norm_std[i] + group_norm_mean[i]
53
else:
54
img1 = torch.zeros_like(img).cuda()
55
for i in range(3):
56
img1[:, i, :, :] = img[:, i, :, :] * group_norm_std[i] + group_norm_mean[i]
57
return img1
58
return img
59
60