def TF_rotate(x, angle=0.0, target=None):
assert len(x.shape) == 3
h, w, nc = x.shape
# Rotate using edge fill mode
return rotate(x, angle, mode='edge', order=1)
python类rotate()的实例源码
def rotate_image(inImgFilename, outImgFilename, rotAngle):
"""
Rotates a copy of inImgFilename by angle rotAngle (in degrees)
Args:
inImgFilename (str): path to the input mammogram in PNG format
outImgFilename (str): directory where the output image must be saved in PNG format
rotAngle (float): angle to rotate image (in degrees)
"""
raw = misc.imread(inImgFilename)
aug = rotate(raw, rotAngle)
imsave(outImgFilename, aug)
def Data_iterate_minibatches(inputs, targets, batchsize, arg=False, genSetting=None, shuffle=False, warpMode=None):
# assert len(inputs[0]) == len(targets[0])
if shuffle:
rinputs = copy.deepcopy(inputs)
rtargets = copy.deepcopy(targets)
indices = np.random.permutation(len(inputs[0]))
for i in range(len(inputs[0])):
for idx in range(len(inputs)):
rinputs[idx][i] = inputs[idx][indices[i]]
for idx in range(len(targets)):
rtargets[idx][i] = targets[idx][indices[i]]
inputs = rinputs
targets = rtargets
# inputs[:] = inputs[indices]
# targets[:] = targets[indices]
init = True
global input_tmp
global target_tmp
global isOK
for start_idx in range(0, len(inputs[0]) - batchsize*2 + 1, batchsize):
# if (isOK == False) and (two == False):
# inputsbatch, targetsbatch = read_pics(inputs[start_idx:start_idx + batchsize], targets[start_idx:start_idx + batchsize], batchsize, crop, mirror, flip, rotate)
# else:
while isOK == False:
if init:
sl = range(start_idx,start_idx + batchsize)
thread.start_new_thread(Data_readPics_thread, ([itemgetter(*sl)(i) for i in inputs], [itemgetter(*sl)(i) for i in targets], batchsize, genSetting, arg, warpMode))
init = False
# inputsbatch, targetsbatch = read_pics(inputs[start_idx:start_idx + batchsize], targets[start_idx:start_idx + batchsize], batchsize, crop, mirror, flip, rotate)
time.sleep(0.01)
inputsbatch, targetsbatch = input_tmp, target_tmp
isOK = False
sl = range(start_idx + batchsize,start_idx + 2 * batchsize)
thread.start_new_thread(Data_readPics_thread, ([itemgetter(*sl)(i) for i in inputs], [itemgetter(*sl)(i) for i in targets], batchsize, genSetting, arg, warpMode))
# yield itertools.chain(inputsbatch, targetsbatch)
yield inputsbatch + targetsbatch
while isOK == False:
time.sleep(0.01)
inputsbatch, targetsbatch = input_tmp, target_tmp
isOK = False
# yield itertools.chain(inputsbatch, targetsbatch)
yield inputsbatch + targetsbatch
# len(inputs) - batchsize*2 + 1
def randomrotate(angle=90, randomstate=None, invert=False, padding=0, extrapadding=0):
ignorechannels=True
if isinstance(randomstate, int):
rng = np.random.RandomState(randomstate)
elif isinstance(randomstate, np.random.RandomState):
rng = randomstate
else:
rng = np.random.RandomState(None)
def _randomrot90(im):
k = rng.randint(0, 4)
if not invert:
return np.rot90(im, k=k)
else:
return np.rot90(im, k=(4-k))
def _randomrot45(im):
assert im.shape[0] == im.shape[1], "45 degree rotations are tested only for square images."
k = int(rng.choice(a=[0, 1, 3, 5, 7, 8], size=1))
# Rotation angle (in degrees)
rotangle = 45 * k
if not invert:
if k == 0 or k == 8:
im = np.pad(im, (padding + extrapadding), mode='reflect') if padding > 0 else im
return im
else:
im = _rotate(im, angle=rotangle, resize=True, mode='reflect')
im = np.pad(im, padding, mode='reflect') if padding > 0 else im
return im
else:
if k == 0 or k == 8:
im = im[(padding + extrapadding):-(padding + extrapadding),
(padding + extrapadding):-(padding + extrapadding)] if padding > 0 else im
return im
else:
im = im[padding:-padding, padding:-padding] if padding > 0 else im
# For some reason, _rotate doesn't like if it's values are larger than +1 or smaller than -1.
# Scale
scale = np.max(np.abs(im))
im *= (1./scale)
# Process
im = _rotate(im, angle=(360 - rotangle), resize=True, mode='reflect')
# Rescale
im *= scale
# Edges of im are now twice as large as they were in the original image. Crop.
cropstart = im.shape[0]/4
cropstop = cropstart * 3
im = im[cropstart:cropstop, cropstart:cropstop]
return im
if angle == 45:
return image2batchfunc(_randomrot45, ignorechannels=ignorechannels)
elif angle == 90:
return image2batchfunc(_randomrot90, ignorechannels=ignorechannels)
else:
raise NotImplementedError("Curently implemented rotation angles are 45 and 90 degrees.")
# Function for random flips of the image