我在Matlab中正确实现了PSNR计算代码吗?

时间:2012-03-22 13:01:57

标签: matlab

以下代码是否是在Matlab中为灰度图像计算PSNR的正确方法?

function p = psnr(x,y, vmax)

if nargin<3
    m1 = max( abs(x(:)) );
    m2 = max( abs(y(:)) );
    vmax = max(m1,m2);
end

d = mean( (x(:)-y(:)).^2 );

p = 10*log10( vmax^2/d ); 

对于8位输入,vmax=255

1 个答案:

答案 0 :(得分:0)

,根据Wikipedia article about Peak signal-to-noise ratio,您的代码是PSNR的忠实实现;它直接对应于那里给出的第一个定义。

如果没有给出vmax,您还可以设想使用intmax来确定给定数据类型(取决于您的应用程序;您的实现也很有意义)。