使用Matlab进行图像的PSNR

时间:2014-10-06 04:34:10

标签: matlab image-processing signal-processing

我想在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'.

为什么会这样?请帮我解决错误。

3 个答案:

答案 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