数字图像的随机噪声在图像处理中有着重要的位置,今天用到了,就回顾一下。做个总结。
随机噪声很多种,最常用的一般有两种,高斯噪声和椒盐噪声,下面我们就针对这两种噪声做个科普。
高斯噪声:高斯噪声是指它的概率密度函数服从高斯分布(即正态分布)的一类噪声与椒盐噪声相似(Salt And Pepper Noise),高斯噪声(gauss noise)也是数字图像的一个常见噪声。椒盐噪声是出现在随机位置、噪点深度基本固定的噪声,高斯噪声与其相反,是几乎每个点上都出现噪声、噪点深度随机的噪声。
正如上面的简介我们只要实现一个随机矩阵,矩阵中值总体来说符合高斯分布,与原图像想加,就可以实现高斯噪声了,python中的random提供了产生高斯随机数的方法,但是numpy提供了直接生成随机高斯矩阵的方法。
我们这里使用numpy即可 gauss = np.random.normal(mean,sigma,(row,col,ch)) 因此我们可以得出产生高斯噪声的方式 def GaussieNoisy(image,sigma): row,col,ch= image.shape mean = 0 gauss = np.random.normal(mean,sigma,(row,col,ch)) gauss = gauss.reshape(row,col,ch) noisy = image + gauss return noisy.astype(np.uint8)
图像结果:
椒盐噪声:相比高斯噪声,椒盐噪声的概念非常简单,即在图像中随机选点,使其为0或255。
实现代码:
def spNoisy(image,s_vs_p = 0.5,amount = 0.004): row,col,ch = image.shape out = np.copy(image) 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] out[coords] = 1 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] out[coords] = 0 return out
图片效果:
总体代码:
import cv2 import numpy as np import matplotlib.pyplot as plt import scipy import scipy.stats def GaussieNoisy(image,sigma): row,col,ch= image.shape mean = 0 gauss = np.random.normal(mean,sigma,(row,col,ch)) gauss = gauss.reshape(row,col,ch) noisy = image + gauss return noisy.astype(np.uint8) def spNoisy(image,s_vs_p = 0.5,amount = 0.004): row,col,ch = image.shape out = np.copy(image) 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] out[coords] = 1 #num_pepper = np.ceil(amount * image.size * (2. - s_vs_p)) num_pepper = np.ceil(amount * image.size * (1 - 0.5)) coords = [np.random.randint(0, i - 1, int(num_pepper)) for i in image.shape] out[coords] = 0 return out apple = cv2.imread("girl8.jpg") apple = cv2.resize(cv2.cvtColor(apple,cv2.COLOR_BGR2RGB),(400,800)) #plt.imshow(apple) plt.imshow(GaussieNoisy(apple,25)) #plt.imshow(spNoisy(apple,25)) plt.savefig('girl_gs.jpg') plt.axis("off") plt.show()
参考文档:
1 https://www.cnblogs.com/lynsyklate/p/8047510.html
作者:虚生 出处:https://www.cnblogs.com/dylancao/ 以音频和传感器算法为核心的智能可穿戴产品解决方案提供商 ,提供可穿戴智能软硬件解决方案的设计,开发和咨询服务。 勾搭热线:邮箱:1173496664@qq.com weixin:18019245820 市场技术对接群:347609188 |
![]() |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战