Вот что я пытаюсь сделать:
Код: Выделить всё
import torchvision.transforms as transforms
from torchvision.datasets import MNIST
from torch.utils.data import DataLoader
from PIL import Image
import torchvision
def display_img(pixels, label = None):
plt.imshow(pixels, cmap="gray")
if label:
plt.title("Label: %d" % label)
plt.axis("off")
plt.show()
class NoisyMNIST(torchvision.datasets.MNIST):
def __init__(self, root, train=True, transform=None, target_transform=None, download=False):
super(NoisyMNIST, self).__init__(root, train=train, transform=transform, target_transform=target_transform, download=download)
def __getitem__(self, index):
img, target = self.data[index], self.targets[index]
img = Image.fromarray(img.numpy(), mode="L")
if self.transform is not None:
img = self.transform(img)
# add the noise
noise_level = 0.3
noise = self.generate_safe_random_tensor(img) * noise_level
noisy_img = img + noise
return noisy_img, noise, img, target
def generate_safe_random_tensor(self, img):
"""generates random noise for an image but limits the pixel values between -1 and 1"""
min_values = torch.clamp(-1 - img, max=0)
max_values = torch.clamp(1 - img, min=0)
return torch.rand(img.shape) * (max_values - min_values) + min_values
# Define transformations to apply to the data
transform = transforms.Compose([
transforms.ToTensor(), # Convert images to tensors
transforms.Normalize((0.1307,), (0.3081,)),
])
train_dataset = NoisyMNIST(root='./data', train=True, download=True, transform=transform)
test_dataset = NoisyMNIST(root='./data', train=False, download=True, transform=transform)
np_noise = train_dataset[img_id][1]
np_data = train_dataset[img_id][0]
display_img(np_data_sub_noise, 4)
Любые указатели или фрагменты кода будут иметь большое значение. оценил. Ниже приведены изображения, которые я сейчас получаю с помощью моего кода:
Исходное изображение:

С добавленным шумом:

И с вычтенным шумом для изображения с шумом:

Подробнее здесь: https://stackoverflow.com/questions/783 ... ng-pytorch