python 峰值信噪比可以比较两个图片的相似度吗 峰高的信噪比怎么算_MATLAB

psnr

峰值信噪比(PSNR),一种评价图像的客观标准。它具有局限性,PSNR是“PeakSignaltoNoiseRatio”的缩写。peak的中文意思是顶点。而ratio的意思是比率或比列的。整个意思就是到达噪音比率的顶点信号,psnr是一般是用于最大值信号和背景噪音之间的一个工程项目。通常在经过影像压缩之后,输出的影像通常都会有某种程度与原始影像不一样。为了衡量经过处理后的影像品质,我们通常会参考PSNR值来认定某个处理程序够不够令人满意。它是原图像与处理图像之间均方误差相对于(2^n-1)^2的对数值(信号最大值的平方,n是每个采样值的比特数),它的单位是dB。公式如下:

 

  PSNR=10*log10((2^n-1)^2/MSE)

 

  其中,MSE是原图像与处理图像之间均方误差。公式中的符号采用了MATLAB的用法。

 

  Peak就是指8bits表示法的最大值255。MSE指MeanSquareError,I(角标n)指原始影像第n个pixel值,P(角标n)指经处理后的影像第n个pixel值。PSNR的单位为dB。所以PSNR值越大,就代表失真越少。

 

编辑本段PSNR优缺点

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

 

编辑本段PSNR的一种Matlab实现

  PSNR的Matlab实现

 

%**********************************************
 
  %计算峰值信噪比子程序
 
  % 输入:Im_original 原始图像
 
  % Im_modified 修改过的图像
 
  % 输出:S 峰值信噪比
 
  %注:此程序用来计算灰度图像的失真程度
 
  % ************************************************
 
  function S=PSNR(Im_original,Im_modified)
 
  if(size(Im_original)~=size(Im_modified))
 
  error('错误,两个输入的图像大小不一致!')
 
  end
 
  if(~isrgb(Im_original)&~isrgb(Im_modified))
 
  [m,n]=size(Im_original);
 
  A=double(Im_original);
 
  B=double(Im_modified);
 
  sumaDif=0;
 
  maxI=m*n*max(A.^2);
 
  for u=1:m
 
  for v=1:n
 
  sumaDif=sumaDif+(A(u,v)-B(u,v))^2;
 
  end
 
  end
 
  if(sumaDif==0)
 
  sumaDif=1;
 
  end
 
  Si=maxI/sumaDif;
 
  S=10*log10(Si);
 
  else
 
  error('错误,输入的图像为彩色图像')
 
  end
 
  end %func end