4

对于一个图像的每个像素,我都有它的 x(int)、y(int) 和像素值(浮点数)。

现在我需要给图像添加噪点。numpy.random.poisson 合适吗?

我担心它,因为它不像新像素值=原始值+噪声,而是像

new pixle value=numpy.random.poisson(original value,1) 。新的值都是整数。

我的问题就像标题一样。

我的目的是获得一颗恒星的光度测量误差。但我只有一个图像。所以我通过添加泊松噪声进行模拟。请检查从下面的 ccd 图像中得到的图。来源是红色特征。

在此处输入图像描述

4

1 回答 1

5

这是一个旧线程,但我知道这个问题的答案,所以就到这里。

答案是肯定的。

imageplusshotnoise = numpy.random.poisson(lam=<noiseless_simulated_image>, size=None)

这将从泊松分布中为原始图像的每个像素生成一个样本图像。泊松分布有一个特殊的性质,即均值和方差相等。这意味着如果平均值为 100,则方差将为 100;因此,散粒噪声的标准偏差为 10(方差等于标准偏差的平方)。

创建一个所有值都等于 100 的 numpy 图像数组

>>> myimage = 100 * np.ones((100,100))
>>> np.mean(myimage)
100.0
>>> np.std(myimage)
0.0

请注意,平均值为 100,标准差为 0,正如预期的那样

现在使用这个图像作为泊松分布的 lambda 将从该分布中产生一个大小相同的样本

>>> imageplusnoise = np.random.poisson(lam=myimage, size=None)
>>> imageplusnoise.shape
(100, 100)

样本的均值与 lambda 具有相同的均值,但标准差将等于方差的平方,在泊松分布中等于均值。

>>> np.mean(imageplusnoise)
100.0474
>>> np.std(imageplusnoise)
10.015934965843179

要仅获得散粒噪声,只需从中减去 lambda,现在平均值将接近于零(如果平均值很小,则平均噪声将从零开始进一步倾斜),但它始终具有相同的标准偏差。

>>> noiseonlyimage = imageplusnoise - myimage
>>> np.mean(noiseonlyimage)
0.047399999999999998
>>> np.std(noiseonlyimage)
10.015934965843179

这里需要指出的是,lam参数是泊松分布的期望值,是无噪声的。您的起始图像看起来已经有噪声,因此我将首先通过您的光圈对星体响应进行建模以获得无噪声图像,例如使用一些点扩散函数(如艾里斑、sinc 函数或类似函数作为 numpy 的输入)。随机泊松函数。

于 2015-07-09T17:42:22.953 回答