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.我不确定为什么值不同.需要一些帮助.
在方法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)