日期:2014-05-18  浏览次数:20935 次

一个关于用C#计算图像峰值信噪比的问题
下面的代码是我写的用于计算两个图像峰值信噪比的代码,可问题是,不论我用什么图像进行比较,最后得到的psnr值都是正无穷大。
  我想问一下,计算峰值信噪比需要考虑哪些因素,需要考虑图片的类型什么的么?还是用一种方法就可以计算所有图了?
  麻烦大侠指导一下~谢了~~
public double countPSNR(string formerFpath, string laterFpath)
  {
  Bitmap formerImage=new Bitmap(formerFpath);
  Bitmap laterImage=new Bitmap(laterFpath);
  double sumR = 0;
  double sumG = 0;
  double sumB = 0;
  for (int i = 0; i < formerImage.Width - 1; i++)
  {
  for (int j = 0; j < formerImage.Height - 1; j++)
  {
  Color color1 = formerImage.GetPixel(i, j);
  Color color2 = laterImage.GetPixel(i, j);
  int retR = color1.R - color2.R;
  int retG = color1.G - color2.G;
  int retB = color1.B - color2.B;
  sumR = sumR + retR * retR;
  sumG = sumG + retG * retG;
  sumB = sumB + retB * retB;
  }
  }
  double sum=sumR+sumG+sumB;
  double MSE = (1 / (3 * formerImage.Width * formerImage.Height)) * sum;
  double PSNR = 20 * Math.Log10(255 / Math.Sqrt(MSE));
  return PSNR;
  }

------解决方案--------------------
不知道在说什么 不过感觉好强大的样子!
------解决方案--------------------
double MSE = (sum / (3 * formerImage.Width * formerImage.Height)) ;
改成这样