Python實現(xiàn)對圖像加噪(高斯噪聲 椒鹽噪聲)
更新時間:2021年11月24日 09:40:31 作者:驪山道童
這篇文章主要介紹了展示通過Python給圖像疊加不同等級的椒鹽噪聲和高斯噪聲的代碼,相應的疊加噪聲的已編為對應的類,可實例化使用。感興趣的同學可以看看
內容簡介
展示如何給圖像疊加不同等級的椒鹽噪聲和高斯噪聲的代碼,相應的疊加噪聲的已編為對應的類,可實例化使用。以下主要展示自己編寫的:
加噪聲的代碼(高斯噪聲,椒鹽噪聲)
add_noise.py
#代碼中的noisef為信號等級,例如我需要0.7的噪聲,傳入?yún)?shù)我傳入的是1-0.7 from PIL import Image import numpy as np import random import torchvision.transforms as transforms norm_mean = (0.5, 0.5, 0.5) norm_std = (0.5, 0.5, 0.5) class AddPepperNoise(object): """增加椒鹽噪聲 Args: snr (float): Signal Noise Rate p (float): 概率值,依概率執(zhí)行該操作 """ def __init__(self, snr, p=0.9): assert isinstance(snr, float) and (isinstance(p, float)) # 2020 07 26 or --> and self.snr = snr self.p = p def __call__(self, img): """ Args: img (PIL Image): PIL Image Returns: PIL Image: PIL image. """ if random.uniform(0, 1) < self.p: img_ = np.array(img).copy() h, w, c = img_.shape signal_pct = self.snr noise_pct = (1 - self.snr) mask = np.random.choice((0, 1, 2), size=(h, w, 1), p=[signal_pct, noise_pct/2., noise_pct/2.]) mask = np.repeat(mask, c, axis=2) img_[mask == 1] = 255 # 鹽噪聲 img_[mask == 2] = 0 # 椒噪聲 return Image.fromarray(img_.astype('uint8')).convert('RGB') else: return img class Gaussian_noise(object): """增加高斯噪聲 此函數(shù)用將產(chǎn)生的高斯噪聲加到圖片上 傳入: img : 原圖 mean : 均值 sigma : 標準差 返回: gaussian_out : 噪聲處理后的圖片 """ def __init__(self, mean, sigma): self.mean = mean self.sigma = sigma def __call__(self, img): """ Args: img (PIL Image): PIL Image Returns: PIL Image: PIL image. """ # 將圖片灰度標準化 img_ = np.array(img).copy() img_ = img_ / 255.0 # 產(chǎn)生高斯 noise noise = np.random.normal(self.mean, self.sigma, img_.shape) # 將噪聲和圖片疊加 gaussian_out = img_ + noise # 將超過 1 的置 1,低于 0 的置 0 gaussian_out = np.clip(gaussian_out, 0, 1) # 將圖片灰度范圍的恢復為 0-255 gaussian_out = np.uint8(gaussian_out*255) # 將噪聲范圍搞為 0-255 # noise = np.uint8(noise*255) return Image.fromarray(gaussian_out).convert('RGB') def image_transform(noisef): """對訓練集和測試集的圖片作預處理轉換 train_transform:加噪圖 _train_transform:原圖(不加噪) test_transform:測試圖(不加噪) """ train_transform = transforms.Compose([ transforms.Resize((256, 256)), # 重設大小 #transforms.RandomCrop(32,padding=4), AddPepperNoise(noisef, p=0.9), #加椒鹽噪聲 #Gaussian_noise(0, noisef), # 加高斯噪聲 transforms.ToTensor(), # 轉換為張量 # transforms.Normalize(norm_mean,norm_std), ]) _train_transform = transforms.Compose([ transforms.Resize((256, 256)), #transforms.RandomCrop(32,padding=4), transforms.ToTensor(), # transforms.Normalize(norm_mean,norm_std), ]) test_transform = transforms.Compose([ transforms.Resize((256, 256)), #transforms.RandomCrop(32,padding=4), transforms.ToTensor(), # transforms.Normalize(norm_mean,norm_std), ]) return train_transform, _train_transform, test_transform
在pytorch中如何使用
# 圖像變換和加噪聲train_transform為加噪圖,_train_transform為原圖,test_transform為測試圖 noisef為傳入的噪聲等級
train_transform,_train_transform,test_transform = image_transform(noisef)
training_data=FabricDataset_file(data_dir=train_dir,transform=train_transform)
_training_data=FabricDataset_file(data_dir=_train_dir,transform=_train_transform)
testing_data=FabricDataset_file(data_dir=test_dir,transform=test_transform)
補充
圖像添加隨機噪聲
隨機噪聲就是通過隨機函數(shù)在圖像上隨機地添加噪聲點
def random_noise(image,noise_num): ''' 添加隨機噪點(實際上就是隨機在圖像上將像素點的灰度值變?yōu)?55即白色) :param image: 需要加噪的圖片 :param noise_num: 添加的噪音點數(shù)目,一般是上千級別的 :return: img_noise ''' # # 參數(shù)image:,noise_num: img = cv2.imread(image) img_noise = img # cv2.imshow("src", img) rows, cols, chn = img_noise.shape # 加噪聲 for i in range(noise_num): x = np.random.randint(0, rows)#隨機生成指定范圍的整數(shù) y = np.random.randint(0, cols) img_noise[x, y, :] = 255 return img_noise
img_noise = random_noise("colorful_lena.jpg",3000) cv2.imshow('random_noise',img_noise) cv2.waitKey(0)
以上就是Python實現(xiàn)對圖像添加高斯噪聲或椒鹽噪聲的詳細內容,更多關于Python的資料請關注腳本之家其它相關文章!
相關文章
Python實現(xiàn)給文件添加內容及得到文件信息的方法
這篇文章主要介紹了Python實現(xiàn)給文件添加內容及得到文件信息的方法,可實現(xiàn)從文件開頭添加內容的功能,需要的朋友可以參考下2015-05-05Python使用Keras庫中的LSTM模型生成新文本內容教程
Python語言使用金庸小說文本庫,對文本進行預處理,然后使用Keras庫中的LSTM模型創(chuàng)建和訓練了模型,根據(jù)這個模型,我們可以生成新的文本,并探索小說的不同應用2024-01-01python線程池 ThreadPoolExecutor 的用法示例
這篇文章主要介紹了python線程池 ThreadPoolExecutor 的用法示例,幫助大家更好得理解和使用python線程池,感興趣的朋友可以了解下2020-10-10Python中l(wèi)ogging日志記錄到文件及自動分割的操作代碼
這篇文章主要介紹了Python中l(wèi)ogging日志記錄到文件及自動分割,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-08使用Python的開發(fā)框架Brownie部署以太坊智能合約
在本文中,我們將使用Python部署智能合約。這篇文章可能是您走向智能合約和區(qū)塊鏈開發(fā)的橋梁!2021-05-05