基于Matlab计算峰值信噪比PSNR及均方根误差MSE

标签:
matlab峰值信噪比psnr均方根误差mse杂谈 |
分类: 技术文章 |
lyqmath
http://blog.sina.com.cn/lyqmath
简介
PSNR
是最普遍,最广泛使用的评鉴画质的客观量测法,不过许多实验结果都显示,PSNR 的分数无法和人眼看到的视觉品质完全一致,有可能 PSNR
较高者看起来反而比PSNR 较低者差。
这是因为人眼的视觉对于误差的敏感度并不是绝对的,其感知结果会受到许多因素的影响而产生变化(例如:人眼对空间频率较低的对比差异敏感度较高,人眼对亮度对比差异的敏感度较色度高,人眼对一个区域的感知结果会受到其周围邻近区域的影响)。
(参考百度百科)
计算公式:
http://s4/middle/72586626ha3b0c28b7733&690
http://s2/middle/72586626ha3b0c2c87db1&690
代码
% By lyqmath
% DLUT School of Mathematical Sciences 2008
% BLOG:http://blog.sina.com.cn/lyqmath
function [PSNR, MSE] = psnr(X, Y)
% 计算峰值信噪比PSNR、均方根误差MSE
% 如果输入Y为空,则视为X与其本身来计算PSNR、MSE
if nargin<2
else
end
MSE = sum(D(:).*D(:))/prod(size(X));
PSNR = 10*log10(255^2/MSE);
实例
% By lyqmath
% DLUT School of Mathematical Sciences 2008
% BLOG:http://blog.sina.com.cn/lyqmath
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)
% 图像峰值信噪比PSNR、均方根误差MSE
function [PSNR, MSE] = psnr(X, Y)
% 计算峰值信噪比PSNR、均方根误差MSE
% 如果输入Y为空,则视为X与其本身来计算PSNR、MSE
if nargin<2
else
end
MSE = sum(D(:).*D(:))/prod(size(X));
PSNR = 10*log10(255^2/MSE);
结果
http://s8/middle/72586626ha3b0c5485397&690
http://s6/middle/72586626ha3b0c5a3eb85&690
总结
有一些方法中采用了分块计算PSNR等参数,用来得到更为有效地信息。也有的方法提出一些新的计算公式,当然这都是为了统计处图像处理前后的差异信息。
类似的,对于相近的公式,也可以如上做编码。