95 lines
2.3 KiB
Python
95 lines
2.3 KiB
Python
|
|
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))
|
|
|