簡體   English   中英

使用Matlab的圖像PSNR

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM