def applyLinearTransformToCoords(self, coords, angle, shear_x, shear_y, scale, \
size_in, size_out):
'''Apply the image transformation specified by three parameters to a list of
coordinates. The anchor point of the transofrmation is the center of the tile.
Args:
x: list of coordinates.
angle: Angle by which the image is rotated.
shear_x: Shearing factor along the x-axis by which the image is sheared.
shear_y: Shearing factor along the x-axis by which the image is sheared.
scale: Scaling factor by which the image is scaled.
Returns:
A list of transformed coordinates.
'''
s_in = (size_in, size_in)
s_out = (size_out, size_out)
c_in = .5 * np.asarray(s_in, dtype=np.float64).reshape((1, 2))
c_out = .5 * np.asarray(s_out, dtype=np.float64).reshape((1, 2))
M_rot = np.asarray([[math.cos(angle), -math.sin(angle)], \
[math.sin(angle), math.cos(angle)]])
M_shear = np.asarray([[1., shear_x], [shear_y, 1.]])
M = np.dot(M_rot, M_shear)
M *= scale # Without translation, it does not matter whether scale is
# applied first or last.
coords = coords.astype(np.float64)
coords -= c_in
coords = np.dot(M.T, coords.T).T
coords += c_out
return np.round(coords).astype(np.int32)
# tf augmentation methods
# TODO https://github.com/tensorflow/benchmarks/blob/master/scripts/tf_cnn_benchmarks/preprocessing.py
评论列表
文章目录