package fr.unistra.pelican.util.qfz; import java.util.Arrays; import fr.unistra.pelican.ByteImage; import fr.unistra.pelican.IntegerImage; import fr.unistra.pelican.algorithms.segmentation.qfz.color.MultivariateLogicalPredicateConnectivityAppliedOnRegion; import fr.unistra.pelican.util.Point4D; public class MultivariateGlobalRangeSoillePredicate extends MultivariateLogicalPredicate { private int[] min; private int[] max; private int omega; public MultivariateGlobalRangeSoillePredicate(int omega, int nBands) { super(nBands,LOCALPREDICATE); this.omega=omega; min=new int[nBands]; max=new int[nBands]; resetData(); } protected final boolean _check() { for(int i=0;i<nBands;i++) { if((max[i]-min[i])>omega) { return false; } } return true; } public final void resetData() { Arrays.fill(min,Integer.MAX_VALUE); Arrays.fill(max,Integer.MIN_VALUE); } public final void updatePredicateData(ByteImage inputImage,IntegerImage QFZ,MultivariateAlphaLogicalPredicate alphaPred,int x, int y, int z, int t, int currentLabel, Point4D[] neighbourhood) { int[] pixelValue = inputImage.getVectorPixelXYZTByte(x, y, z, t); for(int i=0;i<nBands;i++) { if(pixelValue[i]<min[i]) min[i]=pixelValue[i]; if(pixelValue[i]>max[i]) max[i]=pixelValue[i]; } } @Override public final void updatePredicateDataForMerging(MultivariateLogicalPredicateConnectivityAppliedOnRegion.Region region) { for(int i=0;i<nBands;i++) { if(region.getValues()[i]<min[i]) min[i]=region.getValues()[i]; if(region.getValues()[i]>max[i]) max[i]=region.getValues()[i]; } } }