Image processing 图像中的噪声估计/噪声测量

Image processing 图像中的噪声估计/噪声测量,image-processing,estimation,noise,Image Processing,Estimation,Noise,我想估计图像中的噪声 让我们假设图像+白噪声的模型。 现在我要估计噪声方差 我的方法是计算图像的局部方差(3*3到21*21块),然后找到局部方差相当恒定的区域(通过计算局部方差矩阵的局部方差)。 我假设这些区域是“平坦”的,因此方差几乎是“纯”噪声 但我并没有得到固定的结果 有更好的办法吗 谢谢 附言。 除了独立的噪声外,我不能对图像做任何假设(这对于真实图像来说还不是真的,让我们假设一下)。从噪声中表征信号的问题并不容易。根据你的问题,第一次尝试是描述二阶统计特性:已知自然图像具有像素到像素

我想估计图像中的噪声

让我们假设图像+白噪声的模型。 现在我要估计噪声方差

我的方法是计算图像的局部方差(3*3到21*21块),然后找到局部方差相当恒定的区域(通过计算局部方差矩阵的局部方差)。 我假设这些区域是“平坦”的,因此方差几乎是“纯”噪声

但我并没有得到固定的结果

有更好的办法吗

谢谢

附言。
除了独立的噪声外,我不能对图像做任何假设(这对于真实图像来说还不是真的,让我们假设一下)。

从噪声中表征信号的问题并不容易。根据你的问题,第一次尝试是描述二阶统计特性:已知自然图像具有像素到像素的相关性,而根据定义,这些相关性不存在于白噪声中

在傅里叶空间中,相关性对应于能谱。众所周知,对于自然图像,它会减小为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

我建议您了解更多详细信息。

您可以使用以下方法来估计噪声方差(此实现仅适用于灰度图像):


参考文献:J.Immerkær,“快速噪声方差估计”,计算机视觉和图像理解,第64卷,第2期,第300-302页,1996年9月[]

Scikit图像具有一个非常有效的估计sigma函数:

它也适用于彩色图像,您只需设置
multichannel=True
average\u sigmas=True

导入cv2
从skimage.restoration导入估算值\u sigma
def估计噪声(图像路径):
img=cv2.imread(图像路径)
返回估计值_sigma(img,多通道=真,平均值_sigmas=真)

高数字意味着低噪声。

为了让事情更清楚,假设我有一个图像矩阵-I。在Matlab语法中,我会写:NoisyImage=I+5*randn(size(I));现在,我想估计噪声-25的方差(假设I处没有噪声)。现在,该方法应该是可靠的,因为噪声的因子(方差)要小得多,然后在某种程度上估计实际图像的噪声级(使用独立的噪声模型)。顺便问一下,你能告诉我在这篇文章里我应该在哪里找到它吗?你还认识其他人吗?你能给我一份完整的参考资料吗?您提供的链接现在已失效。Thx@user1735003也许是这篇文章:(只是假设来自死链接url)谢谢。我会试试的。这确实有效!如果你得到sigma>10.0,那么你有一个有噪声的图像,否则-不是。另外,为了使它也适用于彩色图像,只需将它们转换为灰度,如下所示:
import cv2
img=cv2.imread(img\u path)
img\u gray=cv2.cvt颜色(img,cv2.COLOR\u bgr2 gray)
噪声=估计噪声(img\u gray)
,不要忘记导入数学,
将numpy作为np导入
从scipy.signal导入convolve2d
;)此外,提供的PDF链接也不起作用-请使用此链接:“sigma”此值的含义是什么??我们应该高还是低??如果我们使用DSLR,是否可以在没有任何噪音的情况下拍摄图像@tsveti_ikoHi,确实有Donoho基于小波(HH功率中值)的方法。我可以在MATLAB中添加它的实现。非常感谢。
def estimate_noise(I):

  H, W = I.shape

  M = [[1, -2, 1],
       [-2, 4, -2],
       [1, -2, 1]]

  sigma = np.sum(np.sum(np.absolute(convolve2d(I, M))))
  sigma = sigma * math.sqrt(0.5 * math.pi) / (6 * (W-2) * (H-2))

  return sigma