File size: 1,131 Bytes
22d8ab7 |
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 |
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)
|