96 lines
3.2 KiB
Python
96 lines
3.2 KiB
Python
import numpy as np
|
|
import tensorflow as tf
|
|
|
|
|
|
def lerp(a, b, t):
|
|
out = a + (b - a) * t
|
|
return out
|
|
|
|
|
|
def lerp_clip(a, b, t):
|
|
out = a + (b - a) * tf.clip_by_value(t, 0.0, 1.0)
|
|
return out
|
|
|
|
|
|
def adjust_dynamic_range(images, range_in, range_out, out_dtype):
|
|
scale = (range_out[1] - range_out[0]) / (range_in[1] - range_in[0])
|
|
bias = range_out[0] - range_in[0] * scale
|
|
images = images * scale + bias
|
|
images = tf.clip_by_value(images, range_out[0], range_out[1])
|
|
images = tf.cast(images, dtype=out_dtype)
|
|
return images
|
|
|
|
|
|
def random_flip_left_right_nchw(images):
|
|
s = tf.shape(images)
|
|
mask = tf.random.uniform([s[0], 1, 1, 1], 0.0, 1.0)
|
|
mask = tf.tile(mask, [1, s[1], s[2], s[3]])
|
|
images = tf.where(mask < 0.5, images, tf.reverse(images, axis=[3]))
|
|
return images
|
|
|
|
|
|
def preprocess_fit_train_image(images, res):
|
|
images = adjust_dynamic_range(images, range_in=(0.0, 255.0), range_out=(-1.0, 1.0), out_dtype=tf.dtypes.float32)
|
|
images = random_flip_left_right_nchw(images)
|
|
images.set_shape([None, 3, res, res])
|
|
return images
|
|
|
|
|
|
def postprocess_images(images):
|
|
images = adjust_dynamic_range(images, range_in=(-1.0, 1.0), range_out=(0.0, 255.0), out_dtype=tf.dtypes.float32)
|
|
images = tf.transpose(images, [0, 2, 3, 1])
|
|
images = tf.cast(images, dtype=tf.dtypes.uint8)
|
|
return images
|
|
|
|
|
|
def merge_batch_images(images, res, rows, cols):
|
|
batch_size = images.shape[0]
|
|
assert rows * cols == batch_size
|
|
canvas = np.zeros(shape=[res * rows, res * cols, 3], dtype=np.uint8)
|
|
for row in range(rows):
|
|
y_start = row * res
|
|
for col in range(cols):
|
|
x_start = col * res
|
|
index = col + row * cols
|
|
canvas[y_start:y_start + res, x_start:x_start + res, :] = images[index, :, :, :]
|
|
return canvas
|
|
|
|
|
|
def main():
|
|
# out_dtype = tf.dtypes.float32
|
|
# range_in = (0.0, 255.0)
|
|
# range_out = (-1.0, 1.0)
|
|
# # images = np.ones((2, 2), dtype=np.float32) * 255.0
|
|
# images1 = np.ones((2, 2), dtype=np.float32) * 0.0
|
|
# images2 = np.ones((2, 2), dtype=np.float32) * 127.5
|
|
# images3 = np.ones((2, 2), dtype=np.float32) * 255.0
|
|
# adjusted1 = adjust_dynamic_range(images1, range_in, range_out, out_dtype)
|
|
# adjusted2 = adjust_dynamic_range(images2, range_in, range_out, out_dtype)
|
|
# adjusted3 = adjust_dynamic_range(images3, range_in, range_out, out_dtype)
|
|
# print(adjusted1)
|
|
# print(adjusted2)
|
|
# print(adjusted3)
|
|
#
|
|
# out_dtype = tf.dtypes.uint8
|
|
# range_in = (-1.0, 1.0)
|
|
# range_out = (0.0, 255.0)
|
|
# images1 = np.ones((2, 2), dtype=np.float32) * -1.0
|
|
# images2 = np.ones((2, 2), dtype=np.float32) * 0.0
|
|
# images3 = np.ones((2, 2), dtype=np.float32) * 1.0
|
|
# adjusted1 = adjust_dynamic_range(images1, range_in, range_out, out_dtype)
|
|
# adjusted2 = adjust_dynamic_range(images2, range_in, range_out, out_dtype)
|
|
# adjusted3 = adjust_dynamic_range(images3, range_in, range_out, out_dtype)
|
|
# print(adjusted1)
|
|
# print(adjusted2)
|
|
# print(adjusted3)
|
|
|
|
batch_size = 8
|
|
res = 128
|
|
fake_images = np.ones(shape=(batch_size, res, res, 3), dtype=np.uint8)
|
|
merge_batch_images(fake_images, res, rows=4, cols=2)
|
|
return
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|