我想在Matlab中找出两个相同维度的图像A和B的PSNR和SNR值。我使用下面的代码
[peaksnr, snr] = psnr(A,B)
并收到错误
Undefined function 'psnr' for input arguments of type 'uint8'.
然后我将两张图像转换为双倍,如下所示
A = double(A);
B = double(B);
再次计算PSNR。现在我收到错误
Undefined function 'psnr' for input arguments of type 'double'.
为什么会这样?请帮我解决错误。
答案 0 :(得分:4)
function PSNR = psnr(distImg, origImg)
origImg = double(origImg);
distImg = double(distImg);
[M N] = size(origImg);
error = origImg - distImg;
MSE = sum(sum(error .* error)) / (M * N);
if(MSE > 0)
PSNR = 10*log(255*255/MSE) / log(10);
else
PSNR = 99;
end
end
答案 1 :(得分:0)
psnr = 10*log10(255/sqrt(mean((image1(:) - image2(:)).^2)))
答案 2 :(得分:0)
上面的代码有一些错误,应该考虑在Matlab中使用log10。 所以正确的代码(即使是彩色图像)如下:
function PSNR = MyPsnr(distImg, origImg)
origImg = double(origImg);
distImg = double(distImg);
[M N P] = size(origImg);
error = origImg - distImg;
MSE = sum(sum(sum(error.^2))) / (M * N * P);
if(MSE > 0)
PSNR = 20*log10(max(max(max(origImg))))-10*log10(MSE);
else
PSNR = 99;
end