一点关于PSNR容易错的提醒
最近在WWW.mathwrok.com上下了一些很多经典的程序,仔细阅读发现好多计算PSNR的方法不同,结果不同,还有好多IEEE上的文章用PSNR计算的也不对,这里总结一下,希望以后大家发表文章请用正确的方法计算PSNR,否则欺人欺己。
一下是两种一般使用的计算PSNR的方法:
Q = 255;
MSE = sum(sum((img_spiht-Orig_I).^2))/nRow / nColumn;
fprintf('The psnr performance is %.2f dB\n', 10*log10(Q*Q/MSE));
还有一种:
=size(im1);
A=double(im1);
B=double(im2);
% sum1=m.*n.*max(max(A.^2));
sum1=m.*n.*255.*255;
sum2=sum(sum((A-B).^2));
ifsum2==0
error('两幅图像完全一样');
y=200;
else
y=10*log10(sum1/sum2);
end
细看一样
比较一下
将第一种分开
pa1
ay
Q = 255;
fprintf('----------- PSNR analysis ----------------\n');
(pa1-ay).^2
sum((pa1-ay).^2)
MSE1 = sum(sum((pa1-ay).^2))/nRow / nColumn;
fprintf('The psnr performance is %.4f dB\n', 10*log10(Q*Q/MSE1));
出现结果:
pa1 =
255255
0 0
ay =
153103
195138
----------- PSNR analysis ----------------
ans =
255255
0 0
ans =
255 255
MSE1 =127.5
The psnr performance is 27.0757 dB
而第二种方法
结果:psnr=4.58
分析:首先第一种方法是错的,因为pa1,ay是uint8型,所以当值大于255,小于0(当然这里不会)默认为255和0上面很明显有两255
这里只需在计算前加两句:
pa1=double(pa1);
ay=double(ay);
将矩阵转换成double型就行了
尤其提醒那些大师,请注意细节,不然会害很多人的!这里点名批评Amir Said and William A. Pearlman, "A New Fast and Efficient Image Codec Based on Set Partitioning in Hierarchical Trees," % IEEE Transactions on Circuits and Systems for Video Technology, vol. 6, pp. 243-250, June 1996.
程序下载http://www.mathworks.com/matlabcentral/fileexchange/4808-spiht
当然现在敢把源程序放网上大家来评价的专家很少了,还是可贵的,但请注意细节,你连这都错了,你的算法还有意义吗?
好了,正确程序,希望大家以后用这个,可能有错,如有发现,请告知我(xhclsl@163.com)
function y=psnr(im1,im2)
%------------------------计算峰值信噪比程序———————————————-----
%ininput ------ im1 : the original image matrix
% im2 : the modified image matrix
%output------ y :the PSNR between the input images
%------------------------NOTES---------------------------------------------
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if (size(im1))~=(size(im2))
error('错误:两个输入图象的大小不一致');
end
=size(im1);
A=double(im1);
B=double(im2);
% sum1=m.*n.*max(max(A.^2));
sum1=m.*n.*255.*255;
sum2=sum(sum((A-B).^2));
ifsum2==0
error('两幅图像完全一样');
y=200;
else
y=10*log10(sum1/sum2);
end
回复 楼主 xhclsl 的帖子
楼主是原创帖子吗?如果是原创的话,还可以多给些积分奖励的。 当然是原创了,本人第一次发帖,只是这种小问题太误人了。 怎么我这个程序一直说Function definitions are not permitted at the prompt or in scripts. konetime 发表于 2012-4-7 21:04 static/image/common/back.gif怎么我这个程序一直说Function definitions are not permitted at the prompt or in scripts.
Ref: 7F, 常见的程序出错问题整理 http://www.chinavib.com/thread-46001-1-1.html
页:
[1]