PSNR全称是Peak signal-to-noise ratio,是一种客观的量化评价视频质量的方法。把原始参考视频与失真视频在每一个对应帧中的每一个对应像素之问进行比较。准确的讲,这种方法得到的并不是真正的视频质量,而是失真视频相对于原始视频的相似程度或保真程度。
在图像和视频传输领域中,压缩是常见的。压缩的过程是去除冗余信息,解压缩的过程是重构冗余信息。在去除与重构过程中,会导致部分信息的丢失或出现错误。峰值信噪比用来衡量对压缩后的图像或视频进行重建的质量,它常简单地通过均方差(MSE)进行定义。两个m×n灰度图I和K,如果一个为另一个的噪声近似(原图的重构),那他们的均方差定义为[1]:
MSE=1mn∑m−1i=0∑n−1j=0||I(i,j)−K(i,j)||2
峰值信噪比定义为:
PSNR=10⋅log10(MAX2IMSE)=20⋅log10(MAXIMSE√)
其中,MAXI是表示图像点颜色的最大数值,如果每个采样点(像素)用 8 位(1个字节)表示,那一个像素灰度值范围是[0~255],MAXI是255。
对每个点有RGB三个值的彩色图像而言,峰值信噪比的定义基本一致,只是均方差是所有方差之和除以图像尺寸再除以 3。图像压缩中典型的峰值信噪比值在 30 到 40dB 之间,越高越好。
采用DispTian博客中的方法[3],对图像进行resize操作后比较和原图的PSNR,代码如下:
clc;
clear all;
close all;
scale = 5;%缩小几倍
img=imread('lena.jpg');
if ndims(img)>2
img =rgb2gray(img);
end
[h, w]=size(img);
imgn=imresize(img,[floor(h/scale) floor(w/scale)]);
imgn=imresize(imgn,[h w]);
img=double(img);
imgn=double(imgn);
B=8; %编码一个像素用多少二进制位
MAX=2^B-1; %图像有多少灰度级
MES=sum(sum((img-imgn).^2))/(h*w); %均方差
PSNR=20*log10(MAX/sqrt(MES)); %峰值信噪比
实验结果如下:
缩小2倍:
MSE = 35.390987396240234
PSNR = 32.641876813963584
缩小5倍
MSE = 1.141021347045898e+02
PSNR = 27.557865912809710
参考文献: