24

画像のノイズを推定したい。

Image + White Noise のモデルを想定してみましょう。ここで、ノイズ分散を推定したいと思います。

私の方法は、画像のローカル分散 (3*3 から 21*21 ブロックまで) を計算し、ローカル分散がかなり一定である領域を見つけることです (ローカル分散マトリックスのローカル分散を計算することによって)。これらの領域は「フラット」であると想定しているため、分散はほぼ「純粋な」ノイズです。

それでも、一定の結果は得られません。

より良い方法はありますか?

ありがとう。

PS画像については何も仮定できませんが、独立したノイズです(実際の画像には当てはまりませんが、仮定しましょう)。

4

3 に答える 3

6

ノイズから信号を特徴付ける問題は簡単ではありません。あなたの質問から、最初の試みは二次統計を特徴付けることです.自然画像は、定義上、ホワイトノイズには存在しないピクセル間の相関を持つことが知られています。

フーリエ空間では、相関はエネルギー スペクトルに対応します。自然画像では 1/f^2 程度減少することが知られています。したがって、ノイズを定量化するには、画像のスペクトルの相関係数を両方の仮説 (フラットと 1/f^2) で計算して、係数を抽出することをお勧めします。

あなたを起動するためのいくつかの機能:

import numpy
def get_grids(N_X, N_Y):
    from numpy import mgrid
    return mgrid[-1:1:1j*N_X, -1:1:1j*N_Y]

def frequency_radius(fx, fy):
    R2 = fx**2 + fy**2
    (N_X, N_Y) = fx.shape
    R2[N_X/2, N_Y/2]= numpy.inf

    return numpy.sqrt(R2)

def enveloppe_color(fx, fy, alpha=1.0):
    # 0.0, 0.5, 1.0, 2.0 are resp. white, pink, red, brown noise
    # (see http://en.wikipedia.org/wiki/1/f_noise )
    # enveloppe
    return 1. / frequency_radius(fx, fy)**alpha #

import scipy
image = scipy.lena()
N_X, N_Y = image.shape
fx, fy = get_grids(N_X, N_Y)
pink_spectrum = enveloppe_color(fx, fy)

from scipy.fftpack import fft2
power_spectrum = numpy.abs(fft2(image))**2

詳細については、この素晴らしい論文をお勧めします。

于 2010-03-14T13:09:58.313 に答える