【图像处理】——Python实现图像加噪(随机噪声、椒盐噪声、高斯噪声等)

图像处理】——Python实现图像加噪(随机噪声、椒盐噪
声、⾼斯噪声等)
⽬录
1、随机噪声
随机噪声就是通过随机函数在图像上随机地添加噪声点
随机函数random模块参考:
def random_noise(image,noise_num):
'''
添加随机噪点(实际上就是随机在图像上将像素点的灰度值变为255即⽩⾊)
:param image: 需要加噪的图⽚
:param noise_num: 添加的噪⾳点数⽬,⼀般是上千级别的
:
return: img_noise
'''
#
# 参数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)#随机⽣成指定范围的整数
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)
2、椒盐噪声
椒盐噪声(salt-and-pepper noise)是指两种噪声,⼀种是盐噪声(salt noise),另⼀种是胡椒噪声(p
epper noise)。盐=⽩⾊(0),椒=⿊⾊(255)。前者是⾼灰度噪声,后者属于低灰度噪声。⼀般两种噪声同时出现,呈现在图像上就是⿊⽩杂点
以下使⽤的是⼀个阈值(prob、thres)进⾏的噪声分布,也可以⽤其他⽅法进⾏
def sp_noise(image,prob):
'''
添加椒盐噪声
毛发湿度计image:原始图⽚
prob:噪声⽐例
'''
image = cv2.imread(image)
output = np.zeros(image.shape,np.uint8)
noise_out = np.zeros(image.shape,np.uint8)
thres = 1 - prob
变异系数for i in range(image.shape[0]):
for j in range(image.shape[1]):
rdn = random.random()#随机⽣成0-1之间的数字
动漫部落if rdn < prob:#如果⽣成的随机数⼩于噪声⽐例则将该像素点添加⿊点,即椒噪声
output[i][j] = 0
noise_out[i][j] = 0
elif rdn > thres:#如果⽣成的随机数⼤于(1-噪声⽐例)则将该像素点添加⽩点,即盐噪声
output[i][j] = 255
noise_out[i][j] = 255
else:
output[i][j] = image[i][j]#其他情况像素点不变
noise_out[i][j] = 100
result = [noise_out,output]#返回椒盐噪声和加噪图像
return result
sp_noise,img_noise = sp_noise("colorful_lena.jpg",0.1)
cv2.imshow('sp_noise',sp_noise)
cv2.imshow('sp_noise_img',img_noise)
cv2.waitKey(0)
寡核苷酸探针
3、⾼斯噪声
⾼斯噪声(Gaussian noise)是指它的概率密度函数服从⾼斯分布的⼀类噪声。如果⼀个噪声,它的幅度分布服从⾼斯分布,⽽它的功率谱密度⼜是均匀分布的,则称它为⾼斯⽩噪声。
注意:“⾼斯⽩噪声的幅度服从⾼斯分布”的说法是错误的,⾼斯噪声的幅度服从瑞利分布。即使是⼀维的⾼斯⽩噪声,其幅度也不会服从⾼斯分布,⽽应该服从瑞利分布。⼆维不相关的复⾼斯⽩噪声包络服从指数分布(x2分布的⾃由度为2的特例)。n个不相关的复⾼斯⽩噪声序列叠加后的复信号包络服从⾃由度为2n的x2分 布。
必须区分⾼斯噪声和⽩噪声两个不同的概念。⾼斯噪声是指噪声的概率密度函数服从⾼斯分布,⽩噪声是指噪声的任意两个采样样本之间不相关,两者描述的⾓度不同。⽩噪声不必服从⾼斯分布,⾼斯分布的噪声不⼀定是⽩噪声。当然,实际系统中的热噪声是我们⼀般所说的⽩噪声的主要来源,它是服从⾼斯分布的,但⼀般具有有限的带宽,即常说的窄带⽩噪声,严格意义上它不是⽩噪声。
def gasuss_noise(image, mean=0, var=0.001):
'''
添加⾼斯噪声
image:原始图像
mean : 均值
var : ⽅差,越⼤,噪声越⼤
'''
image = cv2.imread(image)
image = np.array(image/255, dtype=float)#将原始图像的像素值进⾏归⼀化,除以255使得像素值在0-1之间
noise = al(mean, var ** 0.5, image.shape)#创建⼀个均值为mean,⽅差为var呈⾼斯分布的图像矩阵
out = image + noise#将噪声和原始图像进⾏相加得到加噪后的图像
if out.min() < 0:
low_clip = -1.机械臂
else:
low_clip = 0.
out = np.clip(out, low_clip, 1.0)#clip函数将元素的⼤⼩限制在了low_clip和1之间了,⼩于的⽤low_clip代替,⼤于1的⽤1代替
out = np.uint8(out*255)#解除归⼀化,乘以255将加噪后的图像的像素值恢复
#cv.imshow("gasuss", out)
noise = noise*255
return [noise,out]
noise,out = gasuss_noise("colorful_lena.jpg", mean=0, var=0.003)
cv2.imshow('noise',noise)
cv2.imshow('out',out)
cv2.waitKey(0)
参考:
补充:numpy.clip函数
numpy.clip(a, a_min, a_max, out=None)[source]
clip这个函数将将数组中的元素限制在a_min, a_max之间,⼤于a_max的就使得它等于 a_max,⼩于a_min,的就使得它等于a_min
import numpy as np
x=np.array([1,2,3,5,6,7,8,9])
np.clip(x,3,8)
Out[88]:
array([3, 3, 3, 5, 6, 7, 8, 8])
4、其他噪声
其他噪声参考:《》

本文发布于:2024-09-22 17:26:02,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/116585.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:噪声   分布   图像   服从   加噪   灰度
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议