在图像处理中,验证去噪功能的最佳方法是什么?信噪比似乎让我失望

2024-10-02 02:31:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用BrainWeb一个模拟数据集,用于正常的大脑磁共振图像。我想验证调用skimage.restoration包的denoise_nl_meansMyDenoise函数。为此,我从BrainWeb下载了两组图像,一组是带有0%噪声和0%强度不均匀性的原始图像,另一组是带有相同选项但带有9%噪声和40%强度不均匀性的噪声图像。并且,我根据弃用版本的scipy.stats计算信噪比(SNR),如下所示:

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)

我假设,在去噪之后,我们应该有一个更高的信噪比,这总是正确的。然而,与原始图像相比,噪声图像的信噪比更高。我猜这是因为图像的总平均值比标准差增加得更明显。因此,信噪比似乎不能很好地衡量去噪后的图像是否更接近原始图像,因为噪声图像的信噪比已经高于原始图像。我想知道是否有更好的方法来验证图像中的去噪功能

以下是我的结果: enter image description here

Original image SNR: 1.23
Noisy image SNR: 1.41
Denoised image SNR: 1.44

多谢各位


Tags: 数据图像imagenpsd噪声磁共振大脑
1条回答
网友
1楼 · 发布于 2024-10-02 02:31:50

这不是计算信噪比的方法

核心概念是,对于任何一个给定的图像,你都不知道什么是噪声,什么是信号。如果我们这样做了,去噪就不会成为问题。因此,无法从一幅图像中测量噪声级(可以估计噪声级,但我们无法计算噪声级)

解决方案是使用无噪图像。这是基本事实,也是去噪操作的目标。因此,我们可以通过将任何一幅图像与该地面真实值进行比较来估计噪声,差异就是噪声:

noise = image - ground_truth

现在可以计算均方误差(MSE):

mse = np.mean(noise**2)

或信噪比:

snr = np.mean(ground_truth) / np.mean(noise)

(请注意,这是许多不同的信噪比定义之一,我们通常使用信号的功率,而不仅仅是它们的平均值,通常以dB为单位进行测量。)

一般来说,MSE是讨论去噪误差的一个很好的方法。您将看到该领域的大多数科学论文另外使用峰值信噪比(PSNR),这只是MSE的缩放和对数映射。因此,两者都使用是毫无意义的

您还可以查看平均绝对误差(MAE),它对误差较大的单个像素更为敏感

相关问题 更多 >

    热门问题