我需要找出两幅图像的峰值信噪比(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。我不确定为什么值不同。需要一些帮助。
答案 0 :(得分:5)
在方法2中,I3
只是一个标量,是平方差的总和。取标量的mean()
将返回相同的值。错误在于您没有将I3
标准化为图像中的元素数量。您应该将方法2中的相应行更改为
Sum = I3/512^2;
它应该正常工作。更一般地说,它应该是
Sum = I3/prod(size(I1));