content: package edu.stanford.rsl.conrad.metric;
  
  import ij.process.ImageProcessor;
  import edu.stanford.rsl.conrad.utils.CONRAD;
  
  public class MeanSquareErrorMetric extends ImageMetric {
  
  	/**
  	 * 
  	 */
  	private static final long serialVersionUID = 668095213557188946L;
  
  	@Override
  	public double evaluate() {
  		return computeMeanSquareError();
  	}
  
  	@Override
  	public String getBibtexCitation() {
  		return CONRAD.CONRADBibtex;
  	}
  
  	@Override
  	public String getMedlineCitation() {
  		return CONRAD.CONRADMedline;
  	}
  
  	protected double computeMeanSquareError(){
  		double revan = 0;
  		double sum = 0;
  		for (int k=0;k<testImage.getStackSize(); k++){
  			ImageProcessor rec = testImage.getStack().getProcessor(k+1);
  			ImageProcessor ideal = referenceImage.getStack().getProcessor(k+1);
  			for (int i=0;i<rec.getWidth();i++){
  				for (int j=0;j<rec.getHeight();j++){
  					float value = rec.getPixelValue(i, j);
  					if (!Float.isInfinite(value) && !Float.isNaN(value)){
  						sum++;
  						revan += Math.pow(rec.getPixelValue(i, j) - ideal.getPixelValue(i, j),2);
  					}
  				}
  			}
  		}
  		return revan/sum;
  	}
  
  	@Override
  	public String toString() {
  		return "Mean Square Error";
  	}
  
  
  
  }
  /*
   * Copyright (C) 2010-2014 Andreas Maier
   * CONRAD is developed as an Open Source project under the GNU General Public License (GPL).
   */