import javax.swing.JOptionPane;
import edu.stanford.rsl.conrad.utils.Configuration;
import edu.stanford.rsl.conrad.utils.ImageUtil;
import ij.IJ;
import ij.ImagePlus;
import ij.plugin.PlugIn;
import ij.process.FloatProcessor;
/**
* Filters the projection data with a 2-D filter which is selected via the ImageJ GUI.
*
* @author Andreas Maier
*
*/
public class Copy_Convolution implements PlugIn {
public Copy_Convolution(){
}
@Override
public void run(String arg) {
Configuration.loadConfiguration();
ImagePlus [] images = ImageUtil.getAvailableImagePlusAsArray();
ImagePlus filtered = (ImagePlus) JOptionPane.showInputDialog(null, "Select image to mimic: ", "Image Selection", JOptionPane.PLAIN_MESSAGE, null, images, images[0]);
ImagePlus notFiltered = (ImagePlus) JOptionPane.showInputDialog(null, "Select image to adjust: ", "Image Selection", JOptionPane.PLAIN_MESSAGE, null, images, images[0]);
try {
FloatProcessor before = (FloatProcessor) filtered.getChannelProcessor().duplicate();
FloatProcessor after = (FloatProcessor) notFiltered.getChannelProcessor().duplicate();
ImageUtil.normalizeImageProcessorMinMax(before);
ImageUtil.normalizeImageProcessorMinMax(after);
int kernelSize = 5;
float [] kernel = ImageUtil.estimateConvolutionKernel(before, after, kernelSize, 10000);
for (int i=0;i<notFiltered.getStackSize();i++){
notFiltered.getStack().getProcessor(i+1).convolve(kernel, kernelSize, kernelSize);
IJ.showStatus("Applying Convolution");
IJ.showProgress((i + 0.0) / notFiltered.getStackSize());
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
IJ.log(e.getLocalizedMessage());
}
}
}
/*
* Copyright (C) 2010-2014 - Andreas Maier
* CONRAD is developed as an Open Source project under the GNU General Public License (GPL).
*/