如何从Python中获取图像的信噪比?

Jal*_*alo 5 python image-processing

我正在过滤图像,我想知道SNR.我尝试使用scipy函数scipy.stats.signaltonoise(),但我得到了一组数字,我真的不知道我得到了什么.

有没有其他方法可以获得我的图像的信噪比?

Oli*_* W. 5

更新:(对于那些没有在评论中阅读链接材料的人)该scipy.stats.signaltonoise功能已被弃用并删除。在链接的github线程中,您可以找到自己实现的原始配方:

def signaltonoise(a, axis=0, ddof=0):
    a = np.asanyarray(a)
    m = a.mean(axis)
    sd = a.std(axis=axis, ddof=ddof)
    return np.where(sd == 0, 0, m/sd)
Run Code Online (Sandbox Code Playgroud)

原答案:

您返回数组而不是单个数字的原因是因为您没有axis=None在调用scipy.stats.signaltonoise.

因此,你可能需要这个:

snr = scipy.stats.signaltonoise(img, axis=None)
Run Code Online (Sandbox Code Playgroud)

如果没有该选项,您将获得图像中每一列的 SNR。当数据实际上不是图像,而是例如时间信号序列时,这很有意义。

  • @FrankMusteman v0.16.0 之前的 scipy.stats 中使用的信噪比只是平均值除以 stddev。在 github 上的[这个相关的 scipy 问题](https://github.com/scipy/scipy/issues/9097) 中,作者提供了它被删除的原因,以及创建它的简单方法,如果你需要。 (2认同)