package fr.unistra.pelican.algorithms.morphology.fuzzy;
import fr.unistra.pelican.Algorithm;
import fr.unistra.pelican.AlgorithmException;
import fr.unistra.pelican.Image;
import fr.unistra.pelican.util.morphology.GrayStructuringElement;
import fr.unistra.pelican.util.morphology.complements.FuzzyComplement;
import fr.unistra.pelican.util.morphology.fuzzyNorms.FuzzyNorm;
import fr.unistra.pelican.util.morphology.fuzzyNorms.FuzzyTCoNorm;
import fr.unistra.pelican.util.morphology.fuzzyNorms.FuzzyTNorm;
/**
* Fuzzy opening as defined by Bloch and Maitre
* Works with double image with values in [0;1]
* @author Benjamin Perret
*/
public class FuzzyOpening extends Algorithm {
/**
* Input image
*/
public Image inputImage;
/**
* Structuring function
*/
public GrayStructuringElement se;
/**
* Fuzzy norm
*/
public FuzzyNorm n;
private FuzzyTNorm t;
private FuzzyTCoNorm s;
/**
* Complementing function
*/
public FuzzyComplement c;
/**
* Result of opening
*/
public Image outputImage;
/**
* Constructor
*
*/
public FuzzyOpening() {
super();
super.inputs = "inputImage,se,n,c";
super.outputs = "outputImage";
}
/*
* (non-Javadoc)
*
* @see fr.unistra.pelican.Algorithm#launch()
*/
public void launch() throws AlgorithmException {
t=n;
s=n;
outputImage = (Image) new FuzzyErosion().process(inputImage, se, s, c);
outputImage = (Image) new FuzzyDilation().process(outputImage, se, t);
}
/*
public static void main(String[] args) {
GrayStructuringElement se = new GrayStructuringElement(9, 9, new Point(
4, 4));
double vals[] = GaussianMask.createLinearMask(9, 1.0);
double vals2[] = { 0.0, 1.0, 0.0, 1.0, 1.0, 1.0, 0.0, 1.0, 0.0 };
se.setPixels(vals);
FuzzyStandardNorm t = new FuzzyStandardNorm();
FuzzyComplement c = new FuzzyStandardComplement();
Image im = (Image) new ImageLoader().process("img1-12.fits");
new Viewer2D().process(im, "op");
im = (Image) new FuzzyOpening().process(im, se, t, t, c);
new Viewer2D().process(im, "la");
new ImageSave().process(im, "res.jpg");
}*/
/**
* Fuzzy opening as defined by Bloch and Maitre
* Works with double image with values in [0;1]
* @param image Input image
* @param se Structuring function
* @param n Fuzzy Norm
* @param c Complement function
* @return Closed image
*/
public static Image exec(Image inputImage, GrayStructuringElement se, FuzzyNorm n, FuzzyComplement c)
{
return (Image) new FuzzyOpening().process(inputImage,se,n,c);
}
}