使用 tf.data.dataset 时向图像添加各种噪声类型

Add various noise types to image when using tf.data.dataset

我一直在使用提到的功能 here 为图像添加不同类型的噪声(高斯噪声、椒盐噪声等)。

但是,我正在尝试使用 tf.data.Dataset 构建输入管道。 我想我已经知道如何添加高斯和泊松噪声了:

@tf.function
def load_images(imagePath):   
   label = tf.io.read_file(base_path + "/clean/" + imagePath)   
   label = tf.image.decode_jpeg(label, channels=3)   
   label = tf.image.convert_image_dtype(label, dtype=tf.float32)

   image=label+tf.random.normal(shape=tf.shape(label),mean=0,stddev=0.1**0.5) #Add Gauss noise
   #image=label+tf.random.poisson(shape=tf.shape(label),lam=0.3) #Add Poisson noise

   return (image, label)

我怎样才能同时添加椒盐和斑点噪声?

这是一种随机添加盐和胡椒的方法:

from sklearn.datasets import load_sample_image
import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np

china = load_sample_image('china.jpg')[None, ...].astype(np.float32) / 255

def salt_and_pepper(image, prob_salt=0.1, prob_pepper=0.1):
    random_values = tf.random.uniform(shape=image[0, ..., -1:].shape)
    image = tf.where(random_values < prob_salt, 1., image)
    image = tf.where(1 - random_values < prob_pepper, 0., image)
    return image

ds = tf.data.Dataset.from_tensor_slices(china).batch(1).map(salt_and_pepper)

result_image = next(iter(ds))

plt.imshow(result_image[0])
plt.show()