gd.addCheckbox("Create pairwise affines",create_pairwise_affines,"Create affines for scene pairs.");
gd.addCheckbox("Create pairwise affines",create_pairwise_affines,"Create affines for scene pairs.");
gd.addCheckbox("Augment pairwise affines",augment_pairwise_affines,"Augment pairwise affines after building initial map and re-running create_pairwise_matches.");
gd.addCheckbox("Augment pairwise affines",augment_pairwise_affines,"Augment pairwise affines after building initial map and re-running create_pairwise_matches.");
gd.addCheckbox("Equalize overlap pairs",equalize_overlaps,"Equalize intensities in overlaps.");
gd.addCheckbox("Equalize overlap pairs",equalize_overlaps,"Equalize intensities in overlaps.");
gd.addCheckbox("Altitude match pairs",altitude_match_pairs,"Pairwise match scenes altitude.");
gd.addCheckbox("Display pairs",display_pairs,"Display pairwise match data.");
gd.addCheckbox("Create map",create_map,"Create combined map from pairwise matches.");
gd.addCheckbox("Create map",create_map,"Create combined map from pairwise matches.");
gd.addCheckbox("Equalize intensities",create_equalize,"Create map intensities equalization from pairwise matches.");
gd.addCheckbox("Equalize intensities",create_equalize,"Create map intensities equalization from pairwise matches.");
gd.addNumericField("Remove fraction of worst matches",frac_remove,3,7,"","When fitting scenes remove this fraction of worst match.");
gd.addNumericField("Remove fraction of worst matches",frac_remove,3,7,"","When fitting scenes remove this fraction of worst match.");
...
@@ -241,6 +250,8 @@ public class ComboMatch {
...
@@ -241,6 +250,8 @@ public class ComboMatch {
}
}
gd.addCheckbox("Update files metadata",update_lla,"Re-read files metadata (if it was modified)");
gd.addCheckbox("Update files metadata",update_lla,"Re-read files metadata (if it was modified)");
gd.addCheckbox("Update kernels/patterns",update_kernel_patterns,"Re-read kernels and patterns from *.list file");
gd.addCheckbox("Update kernels/patterns",update_kernel_patterns,"Re-read kernels and patterns from *.list file");
gd.addCheckbox("Remove duplicate scenes",fix_duplicates,"Remove scenes with the same timestamp");
@@ -5261,6 +5211,9 @@ public class OrthoMapsCollection implements Serializable{
...
@@ -5261,6 +5211,9 @@ public class OrthoMapsCollection implements Serializable{
gdf.addCheckbox("Filter by zoom level",flt_filt_zoom,"Filter by the zoom level used for matching.");
gdf.addCheckbox("Filter by zoom level",flt_filt_zoom,"Filter by the zoom level used for matching.");
gdf.addNumericField("Minimal zoom",flt_min_zoom,0,3,"","Minimal zoom level used for matching.");
gdf.addNumericField("Minimal zoom",flt_min_zoom,0,3,"","Minimal zoom level used for matching.");
gdf.addNumericField("Maximal zoom",flt_max_zoom,0,3,"","Maximal zoom level used for matching.");
gdf.addNumericField("Maximal zoom",flt_max_zoom,0,3,"","Maximal zoom level used for matching.");
gdf.addNumericField("Minimal SfM gain",flt_min_sfm,3,7,"","Minimal SfM gain of the minimum in the scene pair.");
gdf.addNumericField("Maximal SfM gain",flt_max_sfm,3,7,"","Maximal SfM gain of the minimum in the scene pair.");
gdf.addChoice("Filter by pairwise ALT availability",IntersceneMatchParameters.FLT_ALT_MODES,IntersceneMatchParameters.FLT_ALT_MODES[flt_alt],"Filter by pairwise ALT availability.");
gdf.addMessage("Low-resolution match parameters");
gdf.addMessage("Low-resolution match parameters");
gdf.addCheckbox("Use low-res in augmentation",ospir_augment,"Use low-res matching during augmenting (false - skip, go to high-res).");
gdf.addCheckbox("Use low-res in augmentation",ospir_augment,"Use low-res matching during augmenting (false - skip, go to high-res).");
...
@@ -5302,9 +5255,11 @@ public class OrthoMapsCollection implements Serializable{
...
@@ -5302,9 +5255,11 @@ public class OrthoMapsCollection implements Serializable{
flt_min_overlap=gdf.getNextNumber();
flt_min_overlap=gdf.getNextNumber();
flt_max_overlap=gdf.getNextNumber();
flt_max_overlap=gdf.getNextNumber();
flt_filt_zoom=gdf.getNextBoolean();
flt_filt_zoom=gdf.getNextBoolean();
flt_min_zoom=(int)gdf.getNextNumber();
flt_min_zoom=(int)gdf.getNextNumber();
flt_max_zoom=(int)gdf.getNextNumber();
flt_max_zoom=(int)gdf.getNextNumber();
flt_min_sfm=gdf.getNextNumber();
flt_max_sfm=gdf.getNextNumber();
flt_alt=gdf.getNextChoiceIndex();
ospir_augment=gdf.getNextBoolean();
ospir_augment=gdf.getNextBoolean();
max_rms=gdf.getNextNumber();
max_rms=gdf.getNextNumber();
max_rms_refine=gdf.getNextNumber();
max_rms_refine=gdf.getNextNumber();
...
@@ -5343,6 +5298,9 @@ public class OrthoMapsCollection implements Serializable{
...
@@ -5343,6 +5298,9 @@ public class OrthoMapsCollection implements Serializable{
clt_parameters.imp.flt_filt_zoom=flt_filt_zoom;
clt_parameters.imp.flt_filt_zoom=flt_filt_zoom;
clt_parameters.imp.flt_min_zoom=flt_min_zoom;
clt_parameters.imp.flt_min_zoom=flt_min_zoom;
clt_parameters.imp.flt_max_zoom=flt_max_zoom;
clt_parameters.imp.flt_max_zoom=flt_max_zoom;
clt_parameters.imp.flt_min_sfm=flt_min_sfm;
clt_parameters.imp.flt_max_sfm=flt_max_sfm;
clt_parameters.imp.flt_alt=flt_alt;
clt_parameters.imp.ospir_augment=ospir_augment;
clt_parameters.imp.ospir_augment=ospir_augment;
clt_parameters.imp.ospir_max_rms=max_rms;
clt_parameters.imp.ospir_max_rms=max_rms;
clt_parameters.imp.pwise_max_rms=max_rms_refine;
clt_parameters.imp.pwise_max_rms=max_rms_refine;
...
@@ -5383,13 +5341,18 @@ public class OrthoMapsCollection implements Serializable{
...
@@ -5383,13 +5341,18 @@ public class OrthoMapsCollection implements Serializable{
flt_nan_rms,// boolean nan_rms)
flt_nan_rms,// boolean nan_rms)
flt_filt_zoom,// boolean filt_zoom,
flt_filt_zoom,// boolean filt_zoom,
flt_min_zoom,// int min_zoom,
flt_min_zoom,// int min_zoom,
flt_max_zoom);// int max_zoom)
flt_max_zoom,// int max_zoom)
flt_min_sfm,// double min_sfm,
flt_max_sfm,// double max_sfm,
flt_alt);// int flt_alt)
String[]choices_all=textPairs(
String[]choices_all=textPairs(
available_pairs,// int [][] plist,
available_pairs,// int [][] plist,
flt_show_names,// boolean show_names,
flt_show_names,// boolean show_names,
flt_show_overlaps,// boolean show_overlap,
flt_show_overlaps,// boolean show_overlap,
flt_show_rms,// boolean show_rms,
flt_show_rms,// boolean show_rms,
flt_show_zoom,// boolean show_zoom,
flt_show_zoom,// boolean show_zoom,
flt_show_alt,// boolean show_alt,
true,// boolean use_tab,
null);// String extra_line)
null);// String extra_line)
if(debugLevel>0){
if(debugLevel>0){
System.out.println("Selected "+available_pairs.length+" scene pairs for matching");
System.out.println("Selected "+available_pairs.length+" scene pairs for matching");
...
@@ -6302,6 +6265,438 @@ public class OrthoMapsCollection implements Serializable{
...
@@ -6302,6 +6265,438 @@ public class OrthoMapsCollection implements Serializable{
returntrue;
returntrue;
}
}
publicbooleanaltutudeMatchPairs(
CLTParametersclt_parameters,
StringorthoMapsCollection_path){
// Create list of all pairs (after recreating all overlaps with updated affines)
gdf.addNumericField("Minimal scene overlap (0..1)",flt_min_overlap,3,7,"","Minimal overlap of the scenes to keep (0-no overlap, 1.0 - smaller scene is inside the parger one.");
gdf.addNumericField("Maximal scene overlap (0..1)",flt_max_overlap,3,7,"","Maximal overlap of the scenes to keep (0-no overlap, 1.0 - smaller scene is inside the parger one.");
gdf.addCheckbox("Filter by zoom level",flt_filt_zoom,"Filter by the zoom level used for matching.");
gdf.addNumericField("Minimal zoom",flt_min_zoom,0,3,"","Minimal zoom level used for matching.");
gdf.addNumericField("Maximal zoom",flt_max_zoom,0,3,"","Maximal zoom level used for matching.");
gdf.addNumericField("Minimal SfM gain",flt_min_sfm,3,7,"","Minimal SfM gain of the minimum in the scene pair.");
gdf.addNumericField("Maximal SfM gain",flt_max_sfm,3,7,"","Maximal SfM gain of the minimum in the scene pair.");
gdf.addNumericField("Minimal RMSE",flt_min_rms,3,7,"","Minimal LMA RMSE of the scene pair.");
gdf.addNumericField("Maximal RMSE",flt_max_rms,3,7,"","Maximal LMA RMSE of the scene pair.");
gdf.addCheckbox("NaN RMS (failed match)",flt_nan_rms,"Keep only failed matches with RMSE=NaN.");
gdf.addChoice("Filter by pairwise ALT availability",IntersceneMatchParameters.FLT_ALT_MODES,IntersceneMatchParameters.FLT_ALT_MODES[flt_alt],"Filter by pairwise ALT availability.");
gdf.addMessage("Alt match parameters");
gdf.addCheckbox("Overwrite existing alt_data",alt_overwrite,"Overwrite already defined altitude match pairs.");
gdf.addCheckbox("Use pairwise affines",alt_pairwise,"Use pairwise affines if available (false - always recalculate from individual).");
gdf.addNumericField("Border sigma",alt_sigma,3,7,"tiles","Reduce weight of the border tiles, Gaussian sigma in tiles to apply to weights.");
gdf.addNumericField("Absolute outliers offset",alt_abs_outliers,3,7,"m","Remove absolute outliers when fitting planes.");
gdf.addNumericField("Fraction of ouliers",alt_outliers,3,7,"","Remove outliers when fitting planes, removed fraction.");
gdf.addNumericField("Number of alt plane refines",alt_refine,0,3,"","Refine altitude difference plane after removing outliers (0 - no outlier removal, 1 - remove outliers and refine once, ...)");
gdf.addMessage("Log and Save, and Debug parameters");
gdf.addCheckbox("Save state after each match",save_each,"Update state file after each match generation to mitigate possible crashes.");
gdf.addCheckbox("Write log file",log_append,"Enable writing log file with matching results.");
gdf.addStringField("Log file full path",log_path,150,"Path of the log file to be appended.");
gdf.addNumericField("Debug level",debugLevel,0,3,"","Debug level during Spiral search.");
gdf.addCheckbox("Update configuration",flt_update_config,"Update matching configuration parameters to be saved as defaults.");
gdf.addCheckbox("Select filtered pairs",select_pairs,"Manually select from the filtered pairs.");
gdf.addNumericField("Minimal scene overlap (0..1)",flt_min_overlap,3,7,"","Minimal overlap of the scenes to keep (0-no overlap, 1.0 - smaller scene is inside the parger one.");
gdf.addNumericField("Maximal scene overlap (0..1)",flt_max_overlap,3,7,"","Maximal overlap of the scenes to keep (0-no overlap, 1.0 - smaller scene is inside the parger one.");
gdf.addCheckbox("Filter by zoom level",flt_filt_zoom,"Filter by the zoom level used for matching.");
gdf.addNumericField("Minimal zoom",flt_min_zoom,0,3,"","Minimal zoom level used for matching.");
gdf.addNumericField("Maximal zoom",flt_max_zoom,0,3,"","Maximal zoom level used for matching.");
gdf.addNumericField("Minimal SfM gain",flt_min_sfm,3,7,"","Minimal SfM gain of the minimum in the scene pair.");
gdf.addNumericField("Maximal SfM gain",flt_max_sfm,3,7,"","Maximal SfM gain of the minimum in the scene pair.");
gdf.addNumericField("Minimal RMSE",flt_min_rms,3,7,"","Minimal LMA RMSE of the scene pair.");
gdf.addNumericField("Maximal RMSE",flt_max_rms,3,7,"","Maximal LMA RMSE of the scene pair.");
gdf.addCheckbox("NaN RMS (failed match)",flt_nan_rms,"Keep only failed matches with RMSE=NaN.");
gdf.addChoice("Filter by pairwise ALT availability",IntersceneMatchParameters.FLT_ALT_MODES,IntersceneMatchParameters.FLT_ALT_MODES[flt_alt],"Filter by pairwise ALT availability.");
gdf.addMessage("Alt match parameters");
gdf.addCheckbox("Overwrite existing alt_data",alt_overwrite,"Overwrite already defined altitude match pairs.");
gdf.addCheckbox("Use pairwise affines",alt_pairwise,"Use pairwise affines if available (false - always recalculate from individual).");
gdf.addMessage("Log and Save, and Debug parameters");
gdf.addCheckbox("Save state after each match",save_each,"Update state file after each match generation to mitigate possible crashes.");
gdf.addCheckbox("Write log file",log_append,"Enable writing log file with matching results.");
gdf.addStringField("Log file full path",log_path,150,"Path of the log file to be appended.");
gdf.addNumericField("Debug level",debugLevel,0,3,"","Debug level during Spiral search.");
gdf.addCheckbox("Update configuration",flt_update_config,"Update matching configuration parameters to be saved as defaults.");
gd.addCheckbox("Filter by zoom level",flt_filt_zoom,"Filter by the zoom level used for matching.");
gd.addCheckbox("Filter by zoom level",flt_filt_zoom,"Filter by the zoom level used for matching.");
gd.addNumericField("Minimal zoom",flt_min_zoom,0,3,"","Minimal zoom level used for matching.");
gd.addNumericField("Minimal zoom",flt_min_zoom,0,3,"","Minimal zoom level used for matching.");
gd.addNumericField("Maximal zoom",flt_max_zoom,0,3,"","Maximal zoom level used for matching.");
gd.addNumericField("Maximal zoom",flt_max_zoom,0,3,"","Maximal zoom level used for matching.");
gd.addNumericField("Minimal SfM gain",flt_min_sfm,3,7,"","Minimal SfM gain of the minimum in the scene pair.");
gd.addNumericField("Maximal SfM gain",flt_max_sfm,3,7,"","Maximal SfM gain of the minimum in the scene pair.");
gd.addChoice("Filter by pairwise ALT availability",IntersceneMatchParameters.FLT_ALT_MODES,IntersceneMatchParameters.FLT_ALT_MODES[flt_alt],"Filter by pairwise ALT availability.");
gd.addCheckbox("Moves only",move_only,"Moves only, no affine transform.");
gd.addCheckbox("Moves only",move_only,"Moves only, no affine transform.");
gd.addCheckbox("Ignore existing affines",ignore_affines,"Start from unity matrices, ignore saved affines.");
gd.addCheckbox("Ignore existing affines",ignore_affines,"Start from unity matrices, ignore saved affines.");
gd.addStringField("Log file full path",this.pwise_log_path,150,"Path of the log file to be appended.");
gd.addStringField("Log file full path",this.pwise_log_path,150,"Path of the log file to be appended.");
gd.addNumericField("Pairwise match debug level",this.pwise_debug,0,3,"","Debug level during Spiral search.");
gd.addNumericField("Pairwise match debug level",this.pwise_debug,0,3,"","Debug level during Spiral search.");
gd.addMessage("Parameters for elevation maps matching");
gd.addCheckbox("Overwrite existing alt_data",this.alt_overwrite,"Overwrite already defined altitude match pairs.");
gd.addCheckbox("Use pairwise affines",this.alt_pairwise,"Use pairwise affines if available (false - always recalculate from individual).");
gd.addNumericField("Border sigma",this.alt_sigma,3,7,"scaled pix","Reduce weight of the border tiles, Gaussian sigma in tiles to apply to weights.");
gd.addNumericField("Absolute outliers offset",this.alt_abs_outliers,3,7,"m","Remove absolute outliers when fitting planes.");
gd.addNumericField("Fraction of ouliers",this.alt_outliers,3,7,"","Remove outliers when fitting planes, removed fraction.");
gd.addNumericField("Number of alt plane refines",this.alt_refine,0,3,"","Refine altitude difference plane after removing outliers (0 - no outlier removal, 1 - remove outliers and refine once, ...)");
gd.addMessage("Build map with LMA from pairwise matches");
gd.addMessage("Build map with LMA from pairwise matches");
gd.addCheckbox("Moves only",this.pmap_move_only,"Moves only, no affine transform.");
gd.addCheckbox("Moves only",this.pmap_move_only,"Moves only, no affine transform.");
gd.addCheckbox("Ignore existing affines",this.pmap_ignore_affines,"Start from unity matrices, ignore saved affines.");
gd.addCheckbox("Ignore existing affines",this.pmap_ignore_affines,"Start from unity matrices, ignore saved affines.");
...
@@ -945,21 +968,20 @@ min_str_neib_fpn 0.35
...
@@ -945,21 +968,20 @@ min_str_neib_fpn 0.35
gd.addCheckbox("Filter by zoom level",this.flt_filt_zoom,"Filter by the zoom level used for matching.");
gd.addCheckbox("Filter by zoom level",this.flt_filt_zoom,"Filter by the zoom level used for matching.");
gd.addNumericField("Minimal zoom",this.flt_min_zoom,0,3,"","Minimal zoom level used for matching.");
gd.addNumericField("Minimal zoom",this.flt_min_zoom,0,3,"","Minimal zoom level used for matching.");
gd.addNumericField("Maximal zoom",this.flt_max_zoom,0,3,"","Maximal zoom level used for matching.");
gd.addNumericField("Maximal zoom",this.flt_max_zoom,0,3,"","Maximal zoom level used for matching.");
gd.addNumericField("Minimal SfM gain",this.flt_min_sfm,3,7,"","Minimal SfM gain of the minimum in the scene pair.");
gd.addNumericField("Maximal SfM gain",this.flt_max_sfm,3,7,"","Maximal SfM gain of the minimum in the scene pair.");
gd.addChoice("Filter by pairwise ALT availability",FLT_ALT_MODES,FLT_ALT_MODES[this.flt_alt],"Filter by pairwise ALT availability.");
gd.addCheckbox("Show scene names",this.flt_show_names,"Show scene full names (timestamps) in selection drop-down list.");
gd.addCheckbox("Show scene names",this.flt_show_names,"Show scene full names (timestamps) in selection drop-down list.");
gd.addCheckbox("Show scene overlaps",this.flt_show_overlaps,"Show scene overlaps (in percents) in selection drop-down list.");
gd.addCheckbox("Show scene overlaps",this.flt_show_overlaps,"Show scene overlaps (in percents) in selection drop-down list.");
gd.addCheckbox("Show pairs RMSE",this.flt_show_rms,"Show scene match RMSE in selection drop-down list.");
gd.addCheckbox("Show pairs RMSE",this.flt_show_rms,"Show scene match RMSE in selection drop-down list.");