content: package edu.stanford.rsl.apps.gui.roi;
  
  import ij.ImagePlus;
  import ij.gui.Plot;
  import ij.process.ByteProcessor;
  
  import javax.swing.JOptionPane;
  
  import edu.stanford.rsl.conrad.fitting.LinearFunction;
  import edu.stanford.rsl.conrad.utils.ImageUtil;
  import edu.stanford.rsl.conrad.utils.VisualizationUtil;
  
  
  public class CompareGrayValues extends EvaluateROI {
  
  
  	private ImagePlus targetImage;
  
  	public void configure() throws Exception {
  		ImagePlus [] images = ImageUtil.getAvailableImagePlusAsArray();
  		image = (ImagePlus) JOptionPane.showInputDialog(null, "Select image with selection (selection required): ", "Image Selection", JOptionPane.PLAIN_MESSAGE, null, images, images[0]);
  		targetImage = (ImagePlus) JOptionPane.showInputDialog(null, "Select image copy the selection to: ", "Image Selection", JOptionPane.PLAIN_MESSAGE, null, images, images[0]);
  		roi = image.getRoi();
  		if (roi != null){
  			configured = true;
  		}
  	}
  
  	@Override
  	public Object evaluate() {
  		if (roi.getMask() == null){
  			double [] xCoord = new double [roi.getBounds().height*roi.getBounds().width];
  			double [] yCoord = new double [roi.getBounds().height*roi.getBounds().width];
  			for (int j=0; j < roi.getBounds().height; j++){
  				for (int i=0; i < roi.getBounds().width; i++){
  					int x = roi.getBounds().x + i;
  					int y = roi.getBounds().y + j;
  					xCoord[(j*roi.getBounds().width)+i] = image.getProcessor().getPixelValue(x, y);
  					yCoord[(j*roi.getBounds().width)+i] = targetImage.getProcessor().getPixelValue(x, y);
  				}
  			}
  			Plot a = VisualizationUtil.createScatterPlot("Compare gray values ", xCoord, yCoord, new LinearFunction());
  			a.draw();
  			a.show();
  		} else {
  			// Count pixels in mask
  			int count = 0;
  			ByteProcessor mask = (ByteProcessor)roi.getMask();
  			for (int j=0; j < roi.getBounds().height; j++){
  				for (int i=0; i < roi.getBounds().width; i++){
  					if (mask.getPixel(i, j) == 255){
  						count++;
  					}
  				}
  			}
  			double [] xCoord = new double [count];
  			double [] yCoord = new double [count];
  			int index = 0;
  			for (int j=0; j < roi.getBounds().height; j++){
  				for (int i=0; i < roi.getBounds().width; i++){
  					int x = roi.getBounds().x + i;
  					int y = roi.getBounds().y + j;
  					if (mask.getPixel(i, j) == 255){
  						xCoord[index] = image.getProcessor().getPixelValue(x, y);
  						yCoord[index] = targetImage.getProcessor().getPixelValue(x, y);
  						index++;
  					}
  				}
  			}
  			Plot a = VisualizationUtil.createScatterPlot("Compare gray values ", xCoord, yCoord, new LinearFunction());
  			a.draw();
  			a.show();
  		}
  		return null;
  	}
  
  	@Override
  	public String toString() {
  		return "Compare Gray Values";
  	}
  
  }
  
  /*
   * Copyright (C) 2010-2014 - Andreas Maier 
   * CONRAD is developed as an Open Source project under the GNU General Public License (GPL).
  */
  