马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
问题如下:1.计算PSNR公式PSNR = 10*log10( (MAX^2) / MSE ):对像素点是8位Uint的图像来说,
MAX=255,但是对转换后像数值在[0,1]的double型数据,MAX=255,还是MAX=1?
2,对于下面的程序,如果MAX=1,计算的PSNR=6.4043,MSE=0.2289,感觉PSNR太小?
如果MAX=255,PSNR=54.5242,MSE=0.2294,感觉PSNR太大?
下面是去噪后计算PSNR的程序:
%读取图像
I = imread('barbara.tif');
I = im2double(I);
subplot(2,2,1);
imshow(I,[]);
title('原始图像');
axis square;
noise = imnoise(I,'gaussian',Mean,(20^2)/(255^2));%标准差20的高斯噪声
Xnoise = I + noise;
%小波域去噪
[thr,sorh,keepapp] = ddencmp('den','wv',Xnoise);
[Xdenoise,cxc,lxc,perf0,perfl2] = wdencmp('gbl',Xnoise,'sym8',3,thr,sorh,keepapp);
%计算PSNR
[PSNR,MSE] = Psnr(I,Xdenoise);
%下面是PSNR函数
function [ PSNR,MSE ] = Psnr( im1,im2 )
%------------------------计算峰值信噪比程序———————————————-----
% ininput ------ im1 : the original image matrix
% im2 : the modified image matrix
if (size(im1))~=(size(im2))
error('错误:两个输入图象的大小不一致');
end
[m,n] = size(im1);
A = double(im1);
B = double(im2);
D = sum( sum( (A-B).^2 ) );
MSE = D / (m * n);
if D == 0
error('两幅图像完全一样');
PSNR = 200;
else
PSNR = 10*log10( (255^2) / MSE );
end |