【问题标题】:How to measure Peak signal to noise ratio of images?如何测量图像的峰值信噪比?
【发布时间】:2012-03-04 16:03:02
【问题描述】:

我有以下图片:

被 30% 的椒盐噪声破坏

去噪后

我用各种技术对图像进行了去噪

我如何比较哪种方法在去噪方面最好

    function PSNR = PeakSignaltoNoiseRatio(origImg, distImg)

origImg = double(origImg);
distImg = double(distImg);

[M N] = size(origImg);
error = origImg - distImg;
MSE = sum(sum(error .* error)) / (M * N);

if(MSE > 0)
    PSNR = 10*log(255*255/MSE) / log(10);
else
    PSNR = 99;
end

我应该使用哪两张图像来计算 PSNR?

【问题讨论】:

    标签: image image-processing filter


    【解决方案1】:

    你检查Wikipedia article on PSNR了吗?一方面,它提供了一个更简洁的公式,可以修复你的代码(例如,你为什么要检查 MSE 是否 > 0?如果你定义的 MSE 正确,它必须大于 0。另外,这看起来是 Matlab 代码,所以请使用log10() 函数来保存一些令人困惑的基本转换。最后,请确保此函数的输入实际上是 0-255 尺度上的量化图像,而不是 0 和 1 之间的双值图像。

    您的问题不清楚。如果您想使用 PSNR 作为性能指标,那么您应该根据原始方法计算每个去噪方法的 PSNR 并报告这些数字。这可能不会很好地总结哪些方法做得更好,但这是一个开始。另一种方法是手动选择原始图像中您认为对应于不同定性现象的较小子区域,例如背景上的窗口、前景上的窗口以及跨越两者的窗口。然后仅计算那些窗口的 PSNR,对每个去噪结果与原始结果再次重复。最后,您需要一个表格,显示每种不同方法与原始方法相比的 PSNR,可能带有此子窗口细分。

    您可能希望根据应用程序的不同来研究更复杂的方法。陈伟霆的书中关于全变差图像去噪的章节非常有帮助(link)。

    【讨论】:

    • 是的,我确实查看了维基百科,我知道 PSNR 是通过比较原始图像和失真图像来测量的,但是如果我们不知道什么是原始图像,我们如何计算 PSNR,因为我们只有噪声图像和相应的去噪图像图像与过滤方法?通常研究论文会比较他们使用 PSNR 作为质量衡量标准的不同去噪技术,他们是如何做到这一点的?
    • 是的,在将去噪图像与原始图像进行比较之前,我做了同样的事情,但得到了错误的结果,我的图像噪声更大,PSNR 值更高,这应该是相反的方式
    • 我不明白你说“我们不知道原始图像是什么”是什么意思。在现实世界中,没有人知道真正的“原始”图像是什么。您只需在沙子上画一条线并选择一些图像进行测试。您将其称为原始图像,然后通过向您选择的原始图像添加噪声来制作合成的假“损坏”图像。然后你对合成的损坏图像进行去噪,并将结果与​​原始的、未损坏的图像进行比较。您不会在添加噪声的图像和去噪后的图像之间进行比较。
    【解决方案2】:

    这是使用 DataMelt 程序的 Jython/Python 示例。 将这些行放入文件“test.py”并在 DataMelt 中运行。 它将打印 2 个下载图像的 PSNR 值。如果您有不同的图像,请替换文件名。

    from Catalano.Imaging.Tools import ObjectiveFidelity
    from Catalano.Imaging  import FastBitmap
    from jhplot import *
    print Web.get("http://jwork.org/dmelt/examples/data/logo_jhepwork.png")
    print Web.get("http://jwork.org/dmelt/examples/data/logo_jhepwork_noisy.png")
    original=FastBitmap("logo_jhepwork.png")
    original.toGrayscale()
    reconstructed=FastBitmap("logo_jhepwork_noisy.png")
    reconstructed.toGrayscale()
    img=ObjectiveFidelity(original,reconstructed)
    print "Peak signal-to-noise ratio (PSNR)=",img.getPSNR()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-07
      • 2012-02-16
      • 2019-02-27
      • 1970-01-01
      • 1970-01-01
      • 2011-01-27
      • 1970-01-01
      相关资源
      最近更新 更多