峰值信号噪声比

时间:2011-10-25 18:00:23

标签: matlab image-processing

我需要找出两幅图像的峰值信噪比(PSNR)。我用两种不同的方式编写代码。答案是不同的。

% Read the image
I1 = imread('Image1.bmp');
I2 = imread('Image2.bmp');

方法1

P = 255;
MSE =0;
MSE = mean((I1(:)-I2(:)).^2);
PSNR = 10*log10(P^2/MSE);

方法2

 I3 = 0;
    for i=1:512
        for j=1:512
            I3 = I3 + (I1(i,j)-I2(i,j))^2;
        end
    end

Sum = mean(I3);
Sum1 = 255^2/Sum;
PSNR = 10*log10(Sum1);

对于方法1,我的值为30.1131,对于方法2,我的值为24.0654。我不确定为什么值不同。需要一些帮助。

1 个答案:

答案 0 :(得分:5)

在方法2中,I3只是一个标量,是平方差的总和。取标量的mean()将返回相同的值。错误在于您没有将I3标准化为图像中的元素数量。您应该将方法2中的相应行更改为

Sum = I3/512^2;

它应该正常工作。更一般地说,它应该是

Sum = I3/prod(size(I1));