向图像添加像素级独立噪声

时间:2019-03-01 22:38:22

标签: python numpy image-processing scikit-learn noise-generator

我的问题很简单:我有一个图像,并且想向图像添加像素级独立噪声。噪声可以来自任何分布,例如高斯分布。 numpy / scikit-learn中有哪些可用的模块可以执行相同的操作?

我没有任何代码,但我正在学习有关numpy.random.normal等模块的信息,我需要进一步说明。 没有一个模块明确地指出,如果我多次从分布中抽取样本,则抽取将是独立的。

谢谢你的建议。

2 个答案:

答案 0 :(得分:1)

您有几种选择。如果您要替换随机样本,只需使用numpy的内置随机模块之一(即numpy.random.random)即可。您也可以使用numpy.random.pareto获得更戏剧性/突发的噪音。这些方法会生成独立的样本。

如果您希望以无重复的方式从集合或数组中获取样本(例如,您有一个数组[0.1,0.3,0.9],并且只希望使用这些值生成噪声),您可以使用python内置的random.random.choice([0.1,0.3,0.9])从自定义分布中提取独立的样本。您还可以指定replace=False

答案 1 :(得分:0)

是的,随机表示独立。您可以使用numpy / scipy生成噪波并将其添加到图像。学习this tutorial也许对您有好处 enter image description here  这里的代码:

import numpy as np
import matplotlib.pylab as plt

#--- data -----
a = 1
xi, yi = np.linspace(-a,a,nx), np.linspace(-a,a,ny)
x, y = np.meshgrid(xi,yi)    # 2-dimensional grid
U = np.exp(-x*x - y*y)       # picture/signal
V = np.random.randn(nx, ny)  # random noise

#--- grafics -----
fig = plt.figure(figsize=(22,11)) 
ax1 = fig.add_subplot(131)
ax1.imshow(U)
ax2 = fig.add_subplot(132)
ax2.imshow(V)
ax3 = fig.add_subplot(133)
ax3.imshow(U+0.2*V)
plt.show()
fig.savefig('signal_noise.png', transparency=True)