椒盐噪声及高斯噪声图片加噪python实现(附代码)

本文详细介绍了如何使用Python实现椒盐噪声和高斯噪声的图像加噪过程,包括代码实现和效果对比,适用于图像处理和计算机视觉领域的学习者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

椒盐噪声及高斯噪声图片加噪python实现(附代码)

写在前面

这个博客会记录我最近学习的笔记,算是成长记录啦,如果有错误的地方还请指出,这也是学习的过程呀!

椒盐噪声

椒盐噪声又称为脉冲噪声,它是一种随机出现的白点或者黑点。 椒盐噪声 = 椒噪声 + 盐噪声 ,椒盐噪声的值为0(黑色)或者255(白色),这里假设为等概率的出现0或者255。如果一张图像的宽x高 = 10x10 ,那么它的像素共计100个。

1、shape函数

关于shape:
from numpy import *
a=array([[1,2,3],[2,3,4],[3,4,5],[4,5,6]]) a.shape[0]
得到a的行数为 4
然后输入a.shape[1]
得到a的列数为 3
也就是说,shape[0]用于得到数组的行,shape[1]用于得到数组的列,在图像中前者代表宽,后者代表列,相乘就能得到像素。

2、椒盐噪声加噪

原图:
原图
加噪后:
加噪后
代码如下:

import numpy as npimport cv2  #pip install opencv_python
from numpy import shapeimport random
def  fun1(src,percetage):     
    NoiseImg=src    
    NoiseNum=int(percetage*src.shape[0]*src.shape[1])    
    for i in range(NoiseNum):   #返还一个迭代器  
    #把一张图片的像素用行和列表示的话,randX 代表随机生成的行,randY代表随机生成的列
    #random.randint生成随机整数
    #椒盐噪声图片边缘不处理,故-1
	    randX=random.randint(0,src.shape[0]-1)       
	    randY=random.randint(0,src.shape[1]-1) 
	    #random.random生成随机浮点数,随意取到一个像素点有一半的可能是白点255,一半的可能是黑点0      
	    if random.random()<=0.5:           
	    	NoiseImg[randX,randY]=0        
	    else:            
	    	NoiseImg[randX,randY]=255    
    return NoiseImg
    #导入图片
img=cv2.imread('123.jpg',0)
    #调fun1函数,0.2为参数
img1=fun1(img,0.2)
#在文件夹中写入命名为PepperandSalt.jpg的加噪后的图片
cv2.imwrite('PepperandSalt.jpg',img1)
#展示加噪后的图片
cv2.imshow('PepperandSalt',img1)
cv2.waitKey(0)

高斯噪声

高斯白噪声:通过使用函数random.gauss(means,sigma)生成均值为means,标准差为sigma的高斯白噪声。
代码如下:

#随机生成符合正态(高斯)分布的随机数,means,sigma为两个参数
import numpy as npimport cv2
from numpy import shapeimport random
def GaussianNoise(src,means,sigma,percetage):   
	NoiseImg=src    
	NoiseNum=int(percetage*src.shape[0]*src.shape[1])   
	for i in range(NoiseNum):        
		randX=random.randint(0,src.shape[0]-1)        
		randY=random.randint(0,src.shape[1]-1)
		#此处在原有像素灰度值上加上随机数
		NoiseImg[randX,randY]=NoiseImg[randX,randY]+random.gauss(means,sigma)        
		#若灰度值小于0则强制为0,若灰度值大于255则强制为255
		if  NoiseImg[randX, randY]< 0:                 
			NoiseImg[randX, randY]=0        
		elif NoiseImg[randX, randY]>255:                 
			NoiseImg[randX, randY]=255    
return NoiseImg
img=cv2.imread('1234.png',0)
img1=GaussianNoise(img,2,4,0.5)
cv2.imwrite('GaussianNoise.jpg',img1)
cv2.imshow('GaussianNoise',img1)
cv2.waitKey(0)

结束语

下一篇预告:图片去噪

Python中,我们可以使用PIL库处理图像,NumPy库进行数学运算,以及OpenCV库提供更多的图像处理功能。以下是使用这些库实现图像、滤波的基本步骤: 首先,安装所需的库(如果尚未安装): ```bash pip install pillow numpy opencv-python ``` 接下来是一个简单的例子,演示了如何对图像添椒盐噪声高斯噪声,然后分别应用均值滤波、中值滤波和高斯滤波: ```python import cv2 import numpy as np from PIL import Image # 载图像 img = cv2.imread('your_image.jpg', cv2.IMREAD_GRAYSCALE) # 添椒盐噪声(salt and pepper noise) def add_salt_pepper_noise(image, p=0.05): noisy = image.copy() s_vs_p = 1 - p amount = int(p * len(noisy.flat)) # Salt模式 indices = np.random.choice(len(noisy.ravel()), amount, replace=True) noisy[indices] = 255 # Pepper模式 indices = np.random.choice(len(noisy.ravel()), amount, replace=True) noisy[indices] = 0 return noisy noisy_img = add_salt_pepper_noise(img) # 添高斯噪声(Gaussian noise) sigma = 10 # 高斯噪声的标准差 gaussian_noisy = img + np.random.normal(0, sigma, img.shape) # 图像滤波操作 kernel_size = 5 # 滤波器大小 mean_filtered = cv2.blur(gaussian_noisy, (kernel_size, kernel_size)) # 均值滤波 median_filtered = cv2.medianBlur(gaussian_noisy, kernel_size) # 中值滤波 gaussian_filtered = cv2.GaussianBlur(gaussian_noisy, (kernel_size, kernel_size), sigmaX=sigma) # 高斯滤波 # 保存结果 cv2.imwrite('noisy_img.png', noisy_img) cv2.imwrite('mean_filtered.png', mean_filtered) cv2.imwrite('median_filtered.png', median_filtered) cv2.imwrite('gaussian_filtered.png', gaussian_filtered) ``` 在这个例子中,你需要替换 `'your_image.jpg'` 为你要处理的实际图像路径。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值