4

1 つの画像のすべてのピクセルについて、その x(int)、y(int)、およびピクセル値(浮動小数点数)があります。

次に、画像にノイズを追加する必要があります。numpy.random.poisson は適切ですか?

新しいピクセル値=元の値+ノイズという感じではないので気になりますが、

new pixle value=numpy.random.poisson(original value,1) .そして、新しい値はすべて整数です。

私の質問はタイトルの通りです。

私の目的は星の測光測定誤差を取得することですが、画像が 1 つしかないため、ポアソン ノイズを追加してシミュレーションを行います。以下のccd画像から取得した図を確認してください。ソースは赤い機能です。

ここに画像の説明を入力

4

1 に答える 1

5

これは古いスレッドですが、私はこれに対する答えを知っているので、ここに行きます。

答えはイエスです。

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 関数。

于 2015-07-09T17:42:22.953 に答える