从噪声中表征信号的问题并不容易。根据您的问题,第一次尝试是描述二阶统计数据:已知自然图像具有像素到像素的相关性,根据定义,白噪声中不存在这些相关性。
在傅立叶空间中,相关性对应于能谱。众所周知,对于自然图像,它会减少 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
我推荐this wonderful paper了解更多详情。