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

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

结束语

下一篇预告:图片去噪

  • 5
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值