これは古いスレッドですが、私はこれに対する答えを知っているので、ここに行きます。
答えはイエスです。
imageplusshotnoise = numpy.random.poisson(lam=<noiseless_simulated_image>, size=None)
これにより、元の画像の各ピクセルのポアソン分布からサンプル画像が生成されます。ポアソン分布には、平均と分散が等しいという特別な性質があります。これは、平均が 100 カウントの場合、分散が 100 になることを意味します。したがって、ショット ノイズの標準偏差は 10 になります (分散は標準偏差の 2 乗に等しい)。
すべての値が 100 に等しい numpy 画像配列を作成します
>>> myimage = 100 * np.ones((100,100))
>>> np.mean(myimage)
100.0
>>> np.std(myimage)
0.0
期待どおり、平均は 100 で、標準偏差は 0 であることに注意してください。
この画像をポアソン分布のラムダとして使用すると、その分布から同じサイズのサンプルが生成されます
>>> imageplusnoise = np.random.poisson(lam=myimage, size=None)
>>> imageplusnoise.shape
(100, 100)
サンプルの平均はラムダと同じ平均になりますが、標準偏差は分散の平方根に等しくなり、ポアソン分布では平均に等しくなります。
>>> np.mean(imageplusnoise)
100.0474
>>> np.std(imageplusnoise)
10.015934965843179
ショット ノイズのみを取得するには、単純にそこからラムダを差し引くと、平均がゼロに近くなります (平均が小さい場合、平均ノイズはゼロからさらに歪み始めます) が、常に同じ標準偏差になります。
>>> noiseonlyimage = imageplusnoise - myimage
>>> np.mean(noiseonlyimage)
0.047399999999999998
>>> np.std(noiseonlyimage)
10.015934965843179
ここで、lam 引数はポアソン分布の期待値であり、ノイズがないことに注意してください。あなたの開始画像にはすでにノイズが含まれているように見えるので、開口部を介して星の応答をモデル化することから始めて、ノイズのない画像を取得します。たとえば、エアリー ディスク、sinc 関数などの点広がり関数を numpy への入力として使用します。 random.poisson 関数。