峰值信号噪声比

cnn*_*men 0 matlab image-processing

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

% Read the image
I1 = imread('Image1.bmp');
I2 = imread('Image2.bmp');
Run Code Online (Sandbox Code Playgroud)

方法1

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

方法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);
Run Code Online (Sandbox Code Playgroud)

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

abc*_*bcd 5

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

Sum = I3/512^2;
Run Code Online (Sandbox Code Playgroud)

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

Sum = I3/prod(size(I1));
Run Code Online (Sandbox Code Playgroud)