以下代码是否是在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
。
答案 0 :(得分:0)
是,根据Wikipedia article about Peak signal-to-noise ratio,您的代码是PSNR的忠实实现;它直接对应于那里给出的第一个定义。
如果没有给出vmax
,您还可以设想使用intmax
来确定给定数据类型(取决于您的应用程序;您的实现也很有意义)。