Skip to content

Instantly share code, notes, and snippets.

@ck196
Created January 29, 2016 07:42
Show Gist options
  • Save ck196/9b03874f80e6ee151a9b to your computer and use it in GitHub Desktop.
Save ck196/9b03874f80e6ee151a9b to your computer and use it in GitHub Desktop.
from skimage import io
from skimage import transform as tf
import random
import numpy as np
import md5
import glob
def rotate(image):
angle = random.randint(1,360)
return tf.rotate(image,angle)
def shear(image):
# Create Afine transform
shear = random.uniform(-0.4,0.4)
afine_tf = tf.AffineTransform(shear=shear)
# Apply transform to image data
modified = tf.warp(image, afine_tf)
return modified;
def rescale(image):
factor = random.uniform(0.1,0.9)
return tf.rescale(image,factor)
def translation(image):
# Create Afine transform
tx = random.randint(-40,40)
ty = random.randint(-40,40)
trans_factor = (tx,ty)
trans_tf = tf.AffineTransform(translation=trans_factor)
# Apply transform to image data
modified = tf.warp(image, trans_tf)
return modified;
def piecewise_affine(image):
rows, cols = image.shape[0], image.shape[1]
src_cols = np.linspace(0, cols, 20)
src_rows = np.linspace(0, rows, 10)
src_rows, src_cols = np.meshgrid(src_rows, src_cols)
src = np.dstack([src_cols.flat, src_rows.flat])[0]
# add sinusoidal oscillation to row coordinates
dst_rows = src[:, 1] - np.sin(np.linspace(0, 3 * np.pi, src.shape[0])) * 50
dst_cols = src[:, 0]
dst_rows *= 1.5
dst_rows -= 1.5 * 50
dst = np.vstack([dst_cols, dst_rows]).T
tform = tf.PiecewiseAffineTransform()
tform.estimate(src, dst)
out_rows = image.shape[0] - 1.5 * 50
out_cols = cols
out = tf.warp(image, tform, output_shape=(out_rows, out_cols))
return out
def resize(image):
return tf.resize(image,(512,512))
def data_augment(folder, outfolder):
number = 0
paths = glob.glob(folder+"/*.jpg")
for path in paths:
print "Processing ", path
try:
image = io.imread(path)
# Rotation 3 images
rotate1 = rotate(image)
number = number + 1
name = md5.new(str(number)).hexdigest()
io.imsave(outfolder + "/" + name + ".jpg", rotate1)
rotate2 = rotate(image)
number = number + 1
name = md5.new(str(number)).hexdigest()
io.imsave(outfolder + "/" + name + ".jpg", rotate2)
rotate3 = rotate(image)
number = number + 1
name = md5.new(str(number)).hexdigest()
io.imsave(outfolder + "/" + name + ".jpg", rotate3)
# Shear 3 images
shear1 = shear(image)
number = number + 1
name = md5.new(str(number)).hexdigest()
io.imsave(outfolder + "/" + name + ".jpg", shear1)
shear2 = shear(image)
number = number + 1
name = md5.new(str(number)).hexdigest()
io.imsave(outfolder + "/" + name + ".jpg", shear2)
shear3 = shear(image)
number = number + 1
name = md5.new(str(number)).hexdigest()
io.imsave(outfolder + "/" + name + ".jpg", shear3)
# Rescale 3 images
rescale1 = rescale(image)
number = number + 1
name = md5.new(str(number)).hexdigest()
io.imsave(outfolder + "/" + name + ".jpg", rescale1)
rescale2 = rescale(image)
number = number + 1
name = md5.new(str(number)).hexdigest()
io.imsave(outfolder + "/" + name + ".jpg", rescale2)
rescale3 = rescale(image)
number = number + 1
name = md5.new(str(number)).hexdigest()
io.imsave(outfolder + "/" + name + ".jpg", rescale3)
#translation 3 images
translation1 = translation(image)
number = number + 1
name = md5.new(str(number)).hexdigest()
io.imsave(outfolder + "/" + name + ".jpg", translation1)
translation2 = translation(image)
number = number + 1
name = md5.new(str(number)).hexdigest()
io.imsave(outfolder + "/" + name + ".jpg", translation2)
translation2 = translation(image)
number = number + 1
name = md5.new(str(number)).hexdigest()
io.imsave(outfolder + "/" + name + ".jpg", translation2)
#piecewise_affine
piecewise = piecewise_affine(image)
number = number + 1
name = md5.new(str(number)).hexdigest()
io.imsave(outfolder + "/" + name + ".jpg", piecewise)
#piecewise_affine
resizeimg = resize(image)
number = number + 1
name = md5.new(str(number)).hexdigest()
io.imsave(outfolder + "/" + name + ".jpg", resizeimg)
except:
print "False"
pass
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment