Шумовая Оценка / Измерение шума в Изображении

Я хочу оценить шум в изображении.

Давайте примем модель Изображения + Белый шум. Теперь я хочу оценить Шумовое Различие.

Мой метод должен вычислить Локальное Различие (3*3 до 21*21 Блока) изображения и затем найти области, где Локальное Различие является довольно постоянным (Путем вычисления Локального Различия Локальной Матрицы Различия). Я предполагаю, что те области являются "Плоскими" следовательно, Различие является почти "Чистым" шумом.

Все же я не получаю постоянные результаты.

Существует ли лучший путь?

Спасибо.

P.S. Я ничего не могу принять об Изображении кроме независимого шума (Который еще не верен для реального изображения, давайте примем это).

13
задан Royi 13 March 2010 в 23:49
поделиться

1 ответ

Проблема характеризации сигнала от шума непроста. Исходя из вашего вопроса, первой попыткой было бы охарактеризовать статистику второго порядка: известно, что естественные изображения имеют корреляции между пикселями, которые по определению не присутствуют в белом шуме.

В пространстве Фурье корреляция соответствует энергетическому спектру. Известно, что для естественных изображений она уменьшается как 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

Я рекомендую эту замечательную статью для более подробной информации.

4
ответ дан 2 December 2019 в 00:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: