package fr.unistra.pelican.util.qfz;
import fr.unistra.pelican.ByteImage;
import fr.unistra.pelican.DoubleImage;
import fr.unistra.pelican.IntegerImage;
import fr.unistra.pelican.util.Point4D;
public class GrayGlobalRangePredicate extends GrayLogicalPredicate
{
private double min=Double.MAX_VALUE;
private double max=Double.MIN_VALUE;
private int omega;
public GrayGlobalRangePredicate(int omega)
{
type=LOCALPREDICATE;
this.omega=omega;
}
protected final boolean _check()
{
return (max-min)<=omega;
}
public final void resetData()
{
min = Integer.MAX_VALUE;
max = Integer.MIN_VALUE;
}
public final void updatePredicateData(ByteImage inputImage,IntegerImage QFZ,int alpha,int currentAlpha,int x, int y, int z, int t, int currentLabel, Point4D[] neighbourhood)
{
int pixelValue = inputImage.getPixelXYZTByte(x, y, z, t);
if(pixelValue<min)
min=pixelValue;
if(pixelValue>max)
max=pixelValue;
}
@Override
public void updatePredicateDataInteger(IntegerImage inputImage, IntegerImage QFZ, int alpha, int currentAlpha, int x, int y, int z,
int t, int currentLabel, Point4D[] neighbourhood) {
int pixelValue = inputImage.getPixelXYZTInt(x, y, z, t);
if(pixelValue<min)
min=pixelValue;
if(pixelValue>max)
max=pixelValue;
}
public void updatePredicateDataDouble(DoubleImage inputImage, IntegerImage QFZ, int alpha, int currentAlpha, int x, int y, int z,
int t, int currentLabel, Point4D[] neighbourhood) {
double pixelValue = inputImage.getPixelXYZTDouble(x, y, z, t);
if(pixelValue<min)
min=pixelValue;
if(pixelValue>max)
max=pixelValue;
}
}