|
以下内容摘自好友lyqmath新浪博客,在此借花献佛。
前言 PSNR 是最普遍,最广泛使用的评鉴画质的客观量测法,不过许多实验结果都显示,PSNR 的分数无法和人眼看到的视觉品质完全一致,有可能 PSNR 较高者看起来反而比PSNR 较低者差。
这是因为人眼的视觉对于误差的敏感度并不是绝对的,其感知结果会受到许多因素的影响而产生变化(例如:人眼对空间频率较低的对比差异敏感度较高,人眼对亮度对比差异的敏感度较色度高,人眼对一个区域的感知结果会受到其周围邻近区域的影响)。
(参考百度百科)
计算公式:
\[MSE=\sqrt{\frac{x_1^2+\cdots+x_n^2}{n}}=\sqrt{\frac{\sum_{i=1}^n x_i^2}{n}}\]
\[PSNR=10\times\log(\frac{255^2}{MSE})\]
代码
- % 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
- 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);
复制代码 实例
- % 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
- 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);
复制代码
结果
总结 有一些方法中采用了分块计算PSNR等参数,用来得到更为有效地信息。也有的方法提出一些新的计算公式,当然这都是为了统计处图像处理前后的差异信息。
类似的,对于相近的公式,也可以如上做编码。
|
|