峰值信噪比(Peak Signal Noise Ratio,PSNR)的定义为图像所允许最大像素值平方与均方误差比率的对数值的10倍。对于常见的8bit灰度图像,其最大的像素值为255,其峰值信噪比的计算公式为
但是当一张图片的像素值的范围为0~255,比如去噪图片的原图lena.而去噪后图片的像素值范围为9到11。这个时候,尽管图像的去噪效果明显,计算出来的psnr值却是负值。
首先,matlab自带psnr的计算函数,
psnr的正确使用应该满足当两张图片的峰值均为255时,直接调用
psnr(A,ref)即可。
当有一张图片的像素值范围较小,如9~11时,应该把原图的像素值范围也统一到9~11。然后再计算psnr的值,这是调用psnr(A,ref,11)。
统一的代码如下:
function xm=zdd( x, mn, mx )
x = x - min( x(:) );
x = x ./ max(x(:));
xm= mn + x * (mx-mn);
end
mn代表像素的最小值,如9;mx代表像素的最大值,如11。
zdd1=max(max(yhat));
zdd2=min(min(yhat));
yy=zdd(fd,zdd2,zdd1);
sprintf('OUTPUT PSNR = %f', psnr(yy,yhat,zdd1))
这样输出的峰值信噪比为