声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3089|回复: 2

[综合讨论] 峰值信噪比PSNR的疑问

[复制链接]
发表于 2010-10-22 08:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

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
回复
分享到:

使用道具 举报

发表于 2010-10-22 11:34 | 显示全部楼层
图像处理没玩过, LZ先搜索下
http://forum.vibunion.com/forum- ... highlight-PSNR.html
并同待高人路过
发表于 2010-10-23 08:57 | 显示全部楼层
这个问题从公式上就可以理解
根据PSNR的定义
eqn1124300049.gif
其中R(也就是你定义的max)对于8unit图形而言,他应该是255
MSE是均方差,它的定义是
eqn1124299593.gif
当你的图形归一化为[0,1]后,MSE相应的减小了255^2倍
所以此时只有R取1,所得PSNR才能和不做归一化时计算的PSNR结果一致

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

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


评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-25 21:44 , Processed in 0.061724 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表