[英]PSNR of image using Matlab
我想在Matlab中找出兩個尺寸相同的圖像A和B的PSNR和SNR值,我使用了以下代碼
[peaksnr, snr] = psnr(A,B)
並得到一個錯誤
Undefined function 'psnr' for input arguments of type 'uint8'.
然后我將兩個圖像都轉換為如下的double
A = double(A);
B = double(B);
然后再次計算PSNR。現在我得到一個錯誤
Undefined function 'psnr' for input arguments of type 'double'.
為什么會發生這種情況?請幫助我解決錯誤。
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
psnr = 10*log10(255/sqrt(mean((image1(:) - image2(:)).^2)))
上面的代碼有一些錯誤,應該在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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.