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

时间:2024-03-26 13:37:50

椒盐噪声及高斯噪声图片加噪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、椒盐噪声加噪

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

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)

结束语

下一篇预告:图片去噪