strexp / augmentation /noise.py
markytools's picture
added strexp
d61b9c7
import numpy as np
import skimage as sk
from PIL import Image
'''
PIL resize (W,H)
'''
class GaussianNoise:
def __init__(self):
pass
def __call__(self, img, mag=-1, prob=1.):
if np.random.uniform(0,1) > prob:
return img
W, H = img.size
#c = np.random.uniform(.08, .38)
b = [.08, 0.1, 0.12]
if mag<0 or mag>=len(b):
index = 0
else:
index = mag
a = b[index]
c = np.random.uniform(a, a+0.03)
img = np.array(img) / 255.
img = np.clip(img + np.random.normal(size=img.shape, scale=c), 0, 1) * 255
return Image.fromarray(img.astype(np.uint8))
class ShotNoise:
def __init__(self):
pass
def __call__(self, img, mag=-1, prob=1.):
if np.random.uniform(0,1) > prob:
return img
W, H = img.size
#c = np.random.uniform(3, 60)
b = [13, 8, 3]
if mag<0 or mag>=len(b):
index = 2
else:
index = mag
a = b[index]
c = np.random.uniform(a, a+7)
img = np.array(img) / 255.
img = np.clip(np.random.poisson(img * c) / float(c), 0, 1) * 255
return Image.fromarray(img.astype(np.uint8))
class ImpulseNoise:
def __init__(self):
pass
def __call__(self, img, mag=-1, prob=1.):
if np.random.uniform(0,1) > prob:
return img
W, H = img.size
#c = np.random.uniform(.03, .27)
b = [.03, .07, .11]
if mag<0 or mag>=len(b):
index = 0
else:
index = mag
a = b[index]
c = np.random.uniform(a, a+.04)
img = sk.util.random_noise(np.array(img) / 255., mode='s&p', amount=c) * 255
return Image.fromarray(img.astype(np.uint8))
class SpeckleNoise:
def __init__(self):
pass
def __call__(self, img, mag=-1, prob=1.):
if np.random.uniform(0,1) > prob:
return img
W, H = img.size
# c = np.random.uniform(.15, .6)
b = [.15, .2, .25]
if mag<0 or mag>=len(b):
index = 0
else:
index = mag
a = b[index]
c = np.random.uniform(a, a+.05)
img = np.array(img) / 255.
img = np.clip(img + img * np.random.normal(size=img.shape, scale=c), 0, 1) * 255
return Image.fromarray(img.astype(np.uint8))