matlab 计算图像的峰值信噪比PSNR以及均方根误差MSE

简介
PSNR 是最普遍,最广泛使用的评鉴画质的客观量测法,不过许多实验结果都显示,PSNR 的分数无法和人眼看到的视觉品质完全一致,有可能 PSNR 较高者看起来反而比PSNR 较低者差。
这是因为人眼的视觉对于误差的敏感度并不是绝对的,其感知结果会受到许多因素的影响而产生变化(例如:人眼对空间频率较低的对比差异敏感度较高,人眼对亮度对比差异的敏感度较色度高,人眼对一个区域的感知结果会受到其周围邻近区域的影响)。
(参考百度百科)

计算公式:

未命名.PNG


未命名1.PNG

2010-12-15 21:45:41 上传
下载附件 (4.23 KB)

 


 

function [PSNR, MSE] = psnr(X, Y)
% 计算峰值信噪比PSNR、均方根误差MSE
% 如果输入Y为空,则视为X与其本身来计算PSNR、MSE

if nargin<2
    D = X;
else
    if any(size(X)~=size(Y))
        error('The input size is not equal to each other!');
    end
    D = X-Y;
end
MSE = sum(D(:).*D(:))/prod(size(X));
PSNR = 10*log10(255^2/MSE);
display(MSE);
display(PSNR);

 

 

function main()
clc; close all;
I = imread('rice.png');
I1 = imnoise(I, 'salt & pepper');
figure;
subplot(1, 2, 1); imshow(I); title('原图像');
subplot(1, 2, 2); imshow(I1); title('加噪声图像');
[PSNR, MSE] = psnr(I, I1);

 

 

matlab 计算图像的峰值信噪比PSNR以及均方根误差MSE_第1张图片


matlab 计算图像的峰值信噪比PSNR以及均方根误差MSE_第2张图片

2010-12-15 21:54:31 上传
下载附件 (16.56 KB)

 



总结
有一些方法中采用了分块计算PSNR等参数,用来得到更为有效地信息。也有的方法提出一些新的计算公式,当然这都是为了统计处图像处理前后的差异信息。
类似的,对于相近的公式,也可以如上做编码。

你可能感兴趣的:(matlab,图像处理)