首頁 > 軟體

python使用opencv對影象新增噪聲(高斯/椒鹽/泊松/斑點)

2022-04-06 13:01:15

導讀:

這篇文章主要介紹如何利用opencv來對影象新增各類噪聲,原圖:

1、高斯噪聲

高斯噪聲就是給圖片新增一個服從高斯分佈的噪聲,可以通過調節高斯分佈標準差(sigma)的大小來控制新增噪聲程度,sigma越大新增的噪聲越多圖片損壞的越厲害

#讀取圖片
img = cv2.imread("demo.png")
#設定高斯分佈的均值和方差
mean = 0
#設定高斯分佈的標準差
sigma = 25
#根據均值和標準差生成符合高斯分佈的噪聲
gauss = np.random.normal(mean,sigma,(img_height,img_width,img_channels))
#給圖片新增高斯噪聲
noisy_img = image + gauss
#設定圖片新增高斯噪聲之後的畫素值的範圍
noisy_img = np.clip(noisy_img,a_min=0,a_max=255)
#儲存圖片
cv2.imwrite("noisy_img.png",noise_img)

2、椒鹽噪聲

椒鹽噪聲就是給圖片新增黑白噪點,椒指的是黑色的噪點(0,0,0)鹽指的是白色的噪點(255,255,255),通過設定amount來控制新增噪聲的比例,值越大新增的噪聲越多,影象損壞的更加嚴重

#讀取圖片
img = cv2.imread("demo.png")
#設定新增椒鹽噪聲的數目比例
s_vs_p = 0.5
#設定新增噪聲影象畫素的數目
amount = 0.04
noisy_img = np.copy(image)
#新增salt噪聲
num_salt = np.ceil(amount * image.size * s_vs_p)
#設定新增噪聲的座標位置
coords = [np.random.randint(0,i - 1, int(num_salt)) for i in image.shape]
noisy_img[coords] = 255
#新增pepper噪聲
num_pepper = np.ceil(amount * image.size * (1. - s_vs_p))
#設定新增噪聲的座標位置
coords = [np.random.randint(0,i - 1, int(num_pepper)) for i in image.shape]
noisy_img[coords] = 0
#儲存圖片
cv2.imwrite("noisy_img.png",noise_img)

3、泊松噪聲

#讀取圖片
img = cv2.imread("demo.png")
#計算影象畫素的分佈範圍
vals = len(np.unique(image))
vals = 2 ** np.ceil(np.log2(vals))
#給圖片新增泊松噪聲
noisy_img = np.random.poisson(image * vals) / float(vals)
#儲存圖片
cv2.imwrite("noisy_img.png",noise_img)

4、speckle噪聲

#讀取圖片
img = cv2.imread("demo.png")
#隨機生成一個服從分佈的噪聲
gauss = np.random.randn(img_height,img_width,img_channels)
#給圖片新增speckle噪聲
noisy_img = image + image * gauss
#歸一化影象的畫素值
noisy_img = np.clip(noisy_img,a_min=0,a_max=255)
#儲存圖片
cv2.imwrite("noisy_img.png",noise_img)

到此這篇關於python使用opencv對影象新增噪聲(高斯/椒鹽/泊松/斑點)的文章就介紹到這了,更多相關python使用opencv內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com