Example_Based_Manga_Colorization / data /tps_transformation.py
Keiser41's picture
Upload 98 files
22d8ab7
import numpy as np
import data.thinplate as tps
import cv2
import random
import math
# Reference : https://github.com/cheind/py-thin-plate-spline
def tps_transform(img, dshape=None):
while True:
point1 = round(random.uniform(0.3, 0.7), 2)
point2 = round(random.uniform(0.3, 0.7), 2)
range_1 = round(random.uniform(-0.25, 0.25), 2)
range_2 = round(random.uniform(-0.25, 0.25), 2)
if math.isclose(point1 + range_1, point2 + range_2):
continue
else:
break
c_src = np.array([
[0.0, 0.0],
[1., 0],
[1, 1],
[0, 1],
[point1, point1],
[point2, point2],
])
c_dst = np.array([
[0., 0],
[1., 0],
[1, 1],
[0, 1],
[point1 + range_1, point1 + range_1],
[point2 + range_2, point2 + range_2],
])
dshape = dshape or img.shape
theta = tps.tps_theta_from_points(c_src, c_dst, reduced=True)
grid = tps.tps_grid(theta, c_dst, dshape)
mapx, mapy = tps.tps_grid_to_remap(grid, img.shape)
return cv2.remap(img, mapx, mapy, cv2.INTER_CUBIC)