1 package mpicbg
.trakem2
.align
;
3 import ij
.gui
.GenericDialog
;
5 import mpicbg
.trakem2
.align
.AlignmentUtils
.ParamPointMatch
;
7 public class AbstractLayerAlignmentParam
9 final public ParamPointMatch ppm
= new ParamPointMatch();
15 * Maximal accepted alignment error in px
17 public float maxEpsilon
= 200.0f
;
20 * Inlier/candidates ratio
22 public float minInlierRatio
= 0.0f
;
25 * Minimal absolute number of inliers
27 public int minNumInliers
= 12;
30 * Transformation models for choice
32 final static public String
[] modelStrings
= new String
[]{ "Translation", "Rigid", "Similarity", "Affine" };
33 public int expectedModelIndex
= 3;
34 public boolean multipleHypotheses
= false;
37 * Ignore identity transform up to a given tolerance
39 public boolean rejectIdentity
= false;
40 public float identityTolerance
= 5.0f
;
43 * Maximal number of consecutive sections to be tested for an alignment model
45 public int maxNumNeighbors
= 1;
48 * Maximal number of consecutive slices for which no model could be found
50 public int maxNumFailures
= 3;
52 public int desiredModelIndex
= 1;
53 public int maxIterationsOptimize
= 1000;
54 public int maxPlateauwidthOptimize
= 200;
56 public boolean visualize
= false;
58 public int maxNumThreads
= Runtime
.getRuntime().availableProcessors();
61 public boolean setupSIFT( final String title
)
64 final GenericDialog gdSIFT
= new GenericDialog( title
+ "SIFT parameters" );
66 SIFT
.addFields( gdSIFT
, ppm
.sift
);
68 gdSIFT
.addMessage( "Local Descriptor Matching:" );
69 gdSIFT
.addNumericField( "closest/next_closest_ratio :", ppm
.rod
, 2 );
71 gdSIFT
.addMessage( "Miscellaneous:" );
72 gdSIFT
.addCheckbox( "clear_cache", ppm
.clearCache
);
73 gdSIFT
.addNumericField( "feature_extraction_threads :", ppm
.maxNumThreadsSift
, 0 );
77 if ( gdSIFT
.wasCanceled() )
80 SIFT
.readFields( gdSIFT
, ppm
.sift
);
82 ppm
.rod
= ( float )gdSIFT
.getNextNumber();
83 ppm
.clearCache
= gdSIFT
.getNextBoolean();
84 ppm
.maxNumThreadsSift
= ( int )gdSIFT
.getNextNumber();
89 public AbstractLayerAlignmentParam() {}
91 public AbstractLayerAlignmentParam(
94 final float SIFTinitialSigma
,
95 final int SIFTmaxOctaveSize
,
96 final int SIFTminOctaveSize
,
99 final boolean clearCache
,
100 final int maxNumThreadsSift
,
103 final int desiredModelIndex
,
104 final int expectedModelIndex
,
105 final float identityTolerance
,
106 final float maxEpsilon
,
107 final int maxIterationsOptimize
,
108 final int maxNumFailures
,
109 final int maxNumNeighbors
,
110 final int maxNumThreads
,
111 final int maxPlateauwidthOptimize
,
112 final float minInlierRatio
,
113 final int minNumInliers
,
114 final boolean multipleHypotheses
,
115 final boolean rejectIdentity
,
116 final boolean visualize
)
118 ppm
.sift
.fdBins
= SIFTfdBins
;
119 ppm
.sift
.fdSize
= SIFTfdSize
;
120 ppm
.sift
.initialSigma
= SIFTinitialSigma
;
121 ppm
.sift
.maxOctaveSize
= SIFTmaxOctaveSize
;
122 ppm
.sift
.minOctaveSize
= SIFTminOctaveSize
;
123 ppm
.sift
.steps
= SIFTsteps
;
125 ppm
.clearCache
= clearCache
;
126 ppm
.maxNumThreadsSift
= maxNumThreadsSift
;
129 this.desiredModelIndex
= desiredModelIndex
;
130 this.expectedModelIndex
= expectedModelIndex
;
131 this.identityTolerance
= identityTolerance
;
132 this.maxEpsilon
= maxEpsilon
;
133 this.maxIterationsOptimize
= maxIterationsOptimize
;
134 this.maxNumFailures
= maxNumFailures
;
135 this.maxNumNeighbors
= maxNumNeighbors
;
136 this.maxNumThreads
= maxNumThreads
;
137 this.maxPlateauwidthOptimize
= maxPlateauwidthOptimize
;
138 this.minInlierRatio
= minInlierRatio
;
139 this.minNumInliers
= minNumInliers
;
140 this.multipleHypotheses
= multipleHypotheses
;
141 this.rejectIdentity
= rejectIdentity
;
142 this.visualize
= visualize
;
146 public AbstractLayerAlignmentParam
clone()
148 return new AbstractLayerAlignmentParam(
151 ppm
.sift
.initialSigma
,
152 ppm
.sift
.maxOctaveSize
,
153 ppm
.sift
.minOctaveSize
,
157 ppm
.maxNumThreadsSift
,
164 maxIterationsOptimize
,
168 maxPlateauwidthOptimize
,