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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
import cv2 as cv
import numpy as np
def image_to_uint8(x):
"""Converts [-1, 1] float array to [0, 255] uint8."""
x = np.asarray(x)
x = (256. / 2.) * (x + 1.)
x = np.clip(x, 0, 255)
x = x.astype(np.uint8)
return x
def imconvert_uint8(im):
im = np.clip(((im + 1) / 2.0) * 256, 0, 255)
im = np.uint8(im)
return im
def imconvert_float32(im):
im = np.float32(im)
im = (im / 256) * 2.0 - 1
return im
def imread(filename):
img = cv.imread(filename, cv.IMREAD_UNCHANGED)
if img is not None:
if len(img.shape) > 2:
img = img[...,::-1]
return img
def imwrite(filename, img):
if img is not None:
if len(img.shape) > 2:
img = img[...,::-1]
return cv.imwrite(filename, img)
def imgrid(imarray, cols=5, pad=1):
if imarray.dtype != np.uint8:
raise ValueError('imgrid input imarray must be uint8')
pad = int(pad)
assert pad >= 0
cols = int(cols)
assert cols >= 1
N, H, W, C = imarray.shape
rows = int(np.ceil(N / float(cols)))
batch_pad = rows * cols - N
assert batch_pad >= 0
post_pad = [batch_pad, pad, pad, 0]
pad_arg = [[0, p] for p in post_pad]
imarray = np.pad(imarray, pad_arg, 'constant', constant_values=255)
H += pad
W += pad
grid = (imarray
.reshape(rows, cols, H, W, C)
.transpose(0, 2, 1, 3, 4)
.reshape(rows*H, cols*W, C))
if pad:
grid = grid[:-pad, :-pad]
return grid
def resize_and_crop_image(target_im, opt_dims):
w = target_im.shape[1]
h = target_im.shape[0]
if w <= h:
scale = opt_dims / w
else:
scale = opt_dims / h
#print("{} {}".format(w, h))
target_im = cv.resize(target_im,(0,0), fx=scale, fy=scale)
w = target_im.shape[1]
h = target_im.shape[0]
x0 = 0
x1 = opt_dims
y0 = 0
y1 = opt_dims
if w > opt_dims:
x0 += int((w - opt_dims) / 2)
x1 += x0
if h > opt_dims:
y0 += int((h - opt_dims) / 2)
y1 += y0
phi_target = imconvert_float32(target_im)
phi_target = phi_target[y0:y1,x0:x1]
if phi_target.shape[2] == 4:
phi_target = phi_target[:,:,1:4]
return phi_target
|