cmsthy 发表于 2010-10-22 08:33

峰值信噪比PSNR的疑问

问题如下:1.计算PSNR公式PSNR = 10*log10( (MAX^2) / MSE ):对像素点是8位Uint的图像来说,
      MAX=255,但是对转换后像数值在的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;
%小波域去噪
= ddencmp('den','wv',Xnoise);
= wdencmp('gbl',Xnoise,'sym8',3,thr,sorh,keepapp);

%计算PSNR
= 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

    = size(im1);
    A = double(im1);
    B = double(im2);
    D = sum( sum( (A-B).^2 ) );
    MSE = D / (m * n);
ifD == 0
    error('两幅图像完全一样');
    PSNR = 200;
else
    PSNR = 10*log10( (255^2) / MSE );                                                      
end

Happy99 发表于 2010-10-22 11:34

图像处理没玩过, LZ先搜索下
http://forum.vibunion.com/forum-viewthread-tid-89099-highlight-PSNR.html
并同待高人路过

happy 发表于 2010-10-23 08:57

这个问题从公式上就可以理解
根据PSNR的定义

其中R(也就是你定义的max)对于8unit图形而言,他应该是255
MSE是均方差,它的定义是

当你的图形归一化为后,MSE相应的减小了255^2倍
所以此时只有R取1,所得PSNR才能和不做归一化时计算的PSNR结果一致

这个你可以做一个比较验证
1. 图形归一化后,R取1,计算PSNR
2. 推行归一化后在乘以255,R取255,计算PSNR
比较一下两者的情况,其结果应该是一致的

所以在归一化后,R应该取1


页: [1]
查看完整版本: 峰值信噪比PSNR的疑问