From bdf5f0d6f1aa566360ec09c2784a49d1d52bea85 Mon Sep 17 00:00:00 2001 From: ctrebeau <ctrebeau@pasteur.fr> Date: Mon, 18 Oct 2021 09:22:34 +0200 Subject: [PATCH] feature - add minimum surface size factor as a user parameter (variable surfaceMinSizeFactor) This factor set the minimum size that a surface has to be to be kept as a surface of interest. --- src/main/java/fr/pasteur/ida/zellige/Main.java | 8 +++++--- .../fr/pasteur/ida/zellige/command/ZelligeCommand.java | 8 ++++++-- .../construction/rounds/ConstructionParameters.java | 9 ++++++++- .../steps/construction/rounds/ConstructionRound.java | 4 +++- .../rounds/surface/SurfacesConstruction.java | 10 ++++++---- .../fr/pasteur/ida/zellige/utils/test/ZParameters.java | 6 +++--- .../pasteur/ida/zellige/behavior/ParameterSweep.java | 5 +++-- 7 files changed, 34 insertions(+), 16 deletions(-) diff --git a/src/main/java/fr/pasteur/ida/zellige/Main.java b/src/main/java/fr/pasteur/ida/zellige/Main.java index 44b2963b..0e66c540 100644 --- a/src/main/java/fr/pasteur/ida/zellige/Main.java +++ b/src/main/java/fr/pasteur/ida/zellige/Main.java @@ -53,7 +53,8 @@ public class Main double startingOsSize2 = Double.parseDouble( args[ 10 ] ); int overlap2 = Integer.parseInt( args[ 11 ] ); double connexityRate2 = Double.parseDouble( args[ 12 ] ); - int delta = Integer.parseInt( args[ 13 ] ); + double surfaceMinSizeFactor = Double.parseDouble( args[ 13 ] ); + int delta = Integer.parseInt( args[ 14 ] ); /* End of parameters. */ @@ -78,6 +79,7 @@ public class Main System.out.println( "starting os size2 : " + startingOsSize2 ); System.out.println( "overlap2 :" + overlap2 ); System.out.println( "connexityRate2 :" + connexityRate2 ); + System.out.println( "surface Minimum size factor : " + surfaceMinSizeFactor ); System.out.println( "delta : " + delta ); System.out.println( System.lineSeparator() ); /* End of Print parameters.*/ @@ -87,8 +89,8 @@ public class Main PostTreatmentParameters postTreatmentParameters = new PostTreatmentParameters( sigmaXY, sigmaZ, islandSize, connexity ); ProjectionParameters projectionParameters = new ProjectionParameters( delta, "MIP" );// no other method implemented yet. ConstructionParameters[] constructionParameters = new ConstructionParameters[]{ - new ConstructionParameters( startingOsSize1, overlap1, connexityRate1 ), - new ConstructionParameters( startingOsSize2, overlap2, connexityRate2 ) }; + new ConstructionParameters( startingOsSize1, overlap1, connexityRate1, surfaceMinSizeFactor ), + new ConstructionParameters( startingOsSize2, overlap2, connexityRate2, surfaceMinSizeFactor ) }; DisplayParameters displayParameters = new DisplayParameters( diff --git a/src/main/java/fr/pasteur/ida/zellige/command/ZelligeCommand.java b/src/main/java/fr/pasteur/ida/zellige/command/ZelligeCommand.java index a672b19c..020b895d 100644 --- a/src/main/java/fr/pasteur/ida/zellige/command/ZelligeCommand.java +++ b/src/main/java/fr/pasteur/ida/zellige/command/ZelligeCommand.java @@ -76,9 +76,13 @@ public class ZelligeCommand< T extends RealType< T > & NativeType< T > > extends @Parameter private double connexityRate2; + @Parameter + private double surfaceMinSizeFactor; + @Parameter private int delta; + public static void main( String[] args ) throws IOException { String currentFolder = FileSystems.getDefault() @@ -173,8 +177,8 @@ public class ZelligeCommand< T extends RealType< T > & NativeType< T > > extends e.printStackTrace(); } ConstructionParameters[] constructionParameters = new ConstructionParameters[]{ - new ConstructionParameters( startingOsSize1, overlap1, connexityRate1 ), - new ConstructionParameters( startingOsSize2, overlap2, connexityRate2 ) }; + new ConstructionParameters( startingOsSize1, overlap1, connexityRate1, surfaceMinSizeFactor ), + new ConstructionParameters( startingOsSize2, overlap2, connexityRate2, surfaceMinSizeFactor ) }; DisplayParameters displayParameters = new DisplayParameters( diff --git a/src/main/java/fr/pasteur/ida/zellige/steps/construction/rounds/ConstructionParameters.java b/src/main/java/fr/pasteur/ida/zellige/steps/construction/rounds/ConstructionParameters.java index 72df91af..ff750967 100644 --- a/src/main/java/fr/pasteur/ida/zellige/steps/construction/rounds/ConstructionParameters.java +++ b/src/main/java/fr/pasteur/ida/zellige/steps/construction/rounds/ConstructionParameters.java @@ -6,12 +6,14 @@ public class ConstructionParameters private final double startingSizeThreshold; private final int overlap; private final double connexityRate; + private double surfaceMinSizeFactor; - public ConstructionParameters( double startingSizeThreshold, int overlap, double connexityRate ) + public ConstructionParameters( double startingSizeThreshold, int overlap, double connexityRate, double surfaceMinSizeFactor ) { this.startingSizeThreshold = startingSizeThreshold; this.overlap = overlap; this.connexityRate = connexityRate; + this.surfaceMinSizeFactor = surfaceMinSizeFactor; } @@ -29,4 +31,9 @@ public class ConstructionParameters { return connexityRate; } + + public double getSurfaceMinSizeFactor() + { + return surfaceMinSizeFactor; + } } diff --git a/src/main/java/fr/pasteur/ida/zellige/steps/construction/rounds/ConstructionRound.java b/src/main/java/fr/pasteur/ida/zellige/steps/construction/rounds/ConstructionRound.java index 2e387c23..8c013192 100644 --- a/src/main/java/fr/pasteur/ida/zellige/steps/construction/rounds/ConstructionRound.java +++ b/src/main/java/fr/pasteur/ida/zellige/steps/construction/rounds/ConstructionRound.java @@ -18,6 +18,7 @@ public abstract class ConstructionRound private final double startingSizeThreshold; private final int overlap; private final double connexityRate; + private final double surfaceMinSizeFactor; private final ArrayList< Surface > surfaces; private long OSConstructionProcessingTime; private long ConstructionProcessingTime; @@ -32,6 +33,7 @@ public abstract class ConstructionRound this.overlap = constructionParameters.getOverlap(); this.connexityRate = constructionParameters.getConnexityRate(); this.surfaces = new ArrayList<>(); + this.surfaceMinSizeFactor = constructionParameters.getSurfaceMinSizeFactor(); } void finalizeSurface( ArrayList< Surface > surfaces ) throws NoSurfaceFoundException @@ -106,7 +108,7 @@ public abstract class ConstructionRound protected ArrayList< Surface > constructSurfaces( OSEListArray oseLists, int lineLength ) { SurfacesConstruction construction = - new SurfacesConstruction( oseLists, lineLength, overlap, connexityRate ); + new SurfacesConstruction( oseLists, lineLength, overlap, connexityRate, surfaceMinSizeFactor ); construction.buildAllSurfaces(); int tempSmallSurfaceCount = construction.getSmallSurfaceCount(); smallSurfacesCount += tempSmallSurfaceCount; diff --git a/src/main/java/fr/pasteur/ida/zellige/steps/construction/rounds/surface/SurfacesConstruction.java b/src/main/java/fr/pasteur/ida/zellige/steps/construction/rounds/surface/SurfacesConstruction.java index 2b9ac2e4..c0780093 100644 --- a/src/main/java/fr/pasteur/ida/zellige/steps/construction/rounds/surface/SurfacesConstruction.java +++ b/src/main/java/fr/pasteur/ida/zellige/steps/construction/rounds/surface/SurfacesConstruction.java @@ -24,18 +24,20 @@ public class SurfacesConstruction private final double connexity; private final int overlap; private int smallSurfaceCount; + private final double surfaceMinSizeFactor; - public SurfacesConstruction( OSEListArray oseLists, int width, int overlap, double connexity ) + public SurfacesConstruction( OSEListArray oseLists, int width, int overlap, double connexity, double surfaceMinSizeFactor ) { this.oseListArray = oseLists; this.width = width; this.connexity = connexity; this.overlap = overlap; + this.surfaceMinSizeFactor = surfaceMinSizeFactor; } - public static ArrayList< Surface > run( OSEListArray oseListArray, int surfaceLineLength, int overlap, double connexity ) + public static ArrayList< Surface > run( OSEListArray oseListArray, int surfaceLineLength, int overlap, double connexity, double surfaceMinSizeFactor ) { - SurfacesConstruction reconstruction = new SurfacesConstruction( oseListArray, surfaceLineLength, overlap, connexity ); + SurfacesConstruction reconstruction = new SurfacesConstruction( oseListArray, surfaceLineLength, overlap, connexity, surfaceMinSizeFactor ); reconstruction.buildAllSurfaces(); return reconstruction.constructedSurfaces; } @@ -68,7 +70,7 @@ public class SurfacesConstruction */ private void checkSurface( Surface surface ) { - if ( surface.getSize() >= width * oseListArray.getLength() * 0.2 ) + if ( surface.getSize() >= width * oseListArray.getLength() * surfaceMinSizeFactor ) { constructedSurfaces.add( surface ); } diff --git a/src/main/java/fr/pasteur/ida/zellige/utils/test/ZParameters.java b/src/main/java/fr/pasteur/ida/zellige/utils/test/ZParameters.java index 7a9fb62e..702c1a3d 100644 --- a/src/main/java/fr/pasteur/ida/zellige/utils/test/ZParameters.java +++ b/src/main/java/fr/pasteur/ida/zellige/utils/test/ZParameters.java @@ -25,15 +25,15 @@ public class ZParameters double XYSmoothing, double ZSmoothing, double startingThreshold1, int overlap1, double connexityRate1, double startingThreshold2, int overlap2, double connexityRate2, - int delta ) throws DataValidationException + double surfaceMinSizeFactor, int delta ) throws DataValidationException { pretreatmentParameters = new PretreatmentParameters( filter, filterParameter ); classificationParameters = new ClassificationParameters( amplitudeThreshold, otsuThreshold ); postTreatmentParameters = new PostTreatmentParameters( XYSmoothing, ZSmoothing, ISSize, ISConnexity ); constructionParameters = new ConstructionParameters[]{ - new ConstructionParameters( startingThreshold1, overlap1, connexityRate1 ), - new ConstructionParameters( startingThreshold2, overlap2, connexityRate2 ) }; + new ConstructionParameters( startingThreshold1, overlap1, connexityRate1, surfaceMinSizeFactor ), + new ConstructionParameters( startingThreshold2, overlap2, connexityRate2, surfaceMinSizeFactor ) }; projectionParameters = new ProjectionParameters( delta, "MIP" ); } diff --git a/src/test/java/fr/pasteur/ida/zellige/behavior/ParameterSweep.java b/src/test/java/fr/pasteur/ida/zellige/behavior/ParameterSweep.java index 11c5aa4f..87c077ca 100644 --- a/src/test/java/fr/pasteur/ida/zellige/behavior/ParameterSweep.java +++ b/src/test/java/fr/pasteur/ida/zellige/behavior/ParameterSweep.java @@ -28,6 +28,7 @@ public class ParameterSweep< T extends RealType< T > & NativeType< T >, R extend static ArrayList< Img > ref; static Img tested; private final int delta = 0; + private double surfaceMinSizeFactor; // @Ignore @BeforeAll @@ -74,7 +75,7 @@ public class ParameterSweep< T extends RealType< T > & NativeType< T >, R extend ZParameters parameters = new ZParameters( filter, filterParameter, amplitudeThreshold, otsuThreshold, ISConnexity, ISSize, XYSmoothing, ZSmoothing, startingThreshold1, overlap1, connexityRate1, - startingThreshold2, overlap2, connexityRate2, delta ); + startingThreshold2, overlap2, connexityRate2, surfaceMinSizeFactor, delta ); parameters.print(); ZelligePipelineAnalyse< T, R > analyse = new ZelligePipelineAnalyse(); @@ -121,7 +122,7 @@ public class ParameterSweep< T extends RealType< T > & NativeType< T >, R extend ZParameters parameters = new ZParameters( filter, filterParameter, amplitudeThreshold, otsuThreshold, ISConnexity, ISSize, XYSmoothing, ZSmoothing, startingThreshold1, overlap1, connexityRate1, - startingThreshold2, overlap2, connexityRate2, delta ); + startingThreshold2, overlap2, connexityRate2, surfaceMinSizeFactor, delta ); parameters.print(); ZelligePipelineAnalyse< T, R > analyse = new ZelligePipelineAnalyse(); -- GitLab