/**
*
*/
package fr.unistra.pelican.algorithms.arithmetic;
import fr.unistra.pelican.Algorithm;
import fr.unistra.pelican.AlgorithmException;
import fr.unistra.pelican.Image;
/**
* A very simple algorithm to replace a value by a new one.
* For every pixel p
* O[p] = newValue if I[p]== oldValue, I[p] otherwise
*
* @author Benjamin Perret
*
*/
public class ReplaceValue extends Algorithm {
/**
* Input image
*/
public Image inputImage;
/**
* Value to replace
*/
public double oldValue;
/**
* New value to replace oldValue
*/
public double newValue;
/**
* Result
*/
public Image outputImage;
/**
* Can we use inputImage to store result (no new space allocated)?
*/
public boolean inplace=false;
/**
*
*/
public ReplaceValue() {
super.inputs="inputImage,oldValue,newValue";
super.options="inplace";
super.outputs="outputImage";
}
/* (non-Javadoc)
* @see fr.unistra.pelican.Algorithm#launch()
*/
@Override
public void launch() throws AlgorithmException {
if(inplace)
outputImage=inputImage;
else outputImage=inputImage.copyImage(false);
for(int i=0;i<inputImage.size();i++)
{
double v=inputImage.getPixelDouble(i);
if(v==oldValue)
outputImage.setPixelDouble(i, newValue);
else outputImage.setPixelDouble(i, v);
}
}
@SuppressWarnings("unchecked")
public static <T extends Image> T exec(T inputImage, double oldValue, double newValue, boolean inplace)
{
return (T)(new ReplaceValue().process(inputImage,oldValue,newValue,inplace));
}
@SuppressWarnings("unchecked")
public static <T extends Image> T exec(T inputImage, double oldValue, double newValue)
{
return (T)(new ReplaceValue().process(inputImage,oldValue,newValue));
}
}