计算两张图片的信噪比时,结果偏低甚至出现负值怎么办?

峰值信噪比(Peak Signal Noise Ratio,PSNR)的定义为图像所允许最大像素值平方与均方误差比率的对数值的10倍。对于常见的8bit灰度图像,其最大的像素值为255,其峰值信噪比的计算公式为
A值一般取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))

这样输出的峰值信噪比为
这样计算才是正确的psnr

猜你喜欢

转载自blog.csdn.net/qq_27273607/article/details/80159076