double[][]affine0=pmtch_use_affine?ortho_maps[ipair[0]].getAffine():unityAffine();// {{1,0,0},{0,1,0}}; // will always stay the same
double[][]affine1=pmtch_use_affine?ortho_maps[ipair[0]].getAffine():unityAffine();// {{1,0,0},{0,1,0}}; // here (manual mode) start from the center, may use prediction in auto
@@ -143,6 +143,7 @@ public class IntersceneMatchParameters {
...
@@ -143,6 +143,7 @@ public class IntersceneMatchParameters {
// pairwise match parameters
// pairwise match parameters
publicintpwise_zoom=-5;
publicintpwise_zoom=-5;
publicdoublepwise_overlap=0.25;
publicdoublepwise_overlap=0.25;
publicdoublepwise_max_rms=0.6;// maximal acceptable LMA RMS - best during refine
publicbooleanpwise_skip_exist=true;
publicbooleanpwise_skip_exist=true;
publicbooleanpwise_refine_exist=true;// if false, start from scratch, true - start from previous
publicbooleanpwise_refine_exist=true;// if false, start from scratch, true - start from previous
publicbooleanpwise_delete_fail=true;// delete existing match if now failed
publicbooleanpwise_delete_fail=true;// delete existing match if now failed
...
@@ -795,7 +796,7 @@ public class IntersceneMatchParameters {
...
@@ -795,7 +796,7 @@ public class IntersceneMatchParameters {
gd.addNumericField("Spiral search radius",this.ospir_range,3,7,"scaled pix","Maximal radius of the spiral search, in scaled pixels.");
gd.addNumericField("Spiral search radius",this.ospir_range,3,7,"scaled pix","Maximal radius of the spiral search, in scaled pixels.");
gd.addNumericField("Mitigate small overlap",this.ospir_double,3,7,"","For small overlaps increase zoom by 1 and range - twice.");
gd.addNumericField("Mitigate small overlap",this.ospir_double,3,7,"","For small overlaps increase zoom by 1 and range - twice.");
gd.addNumericField("RMSE to end search",this.ospir_good_rms,3,7,"scaled pix","Maximal RMSE to consider match, in scaled pixels.");
gd.addNumericField("RMSE to end search",this.ospir_good_rms,3,7,"scaled pix","Maximal RMSE to consider match, in scaled pixels.");
gd.addNumericField("Satisfactory RMSE",this.ospir_max_rms,3,7,"scaled pix","Maximal RMSE to consider match, in scaled pixels.");
gd.addNumericField("Satisfactory RMSE, spiral",this.ospir_max_rms,3,7,"scaled pix","Maximal RMSE to consider match, in scaled pixels, during spiral.");
gd.addNumericField("Minimal overlap",this.ospir_overlap,0,4,"scaled pix ^ 2","Minimal overlap area in square scaled pixels.");
gd.addNumericField("Minimal overlap",this.ospir_overlap,0,4,"scaled pix ^ 2","Minimal overlap area in square scaled pixels.");
gd.addNumericField("LMA iterations",this.ospir_num_iter,0,2,"","Number of LMA iterations during spiral search.");
gd.addNumericField("LMA iterations",this.ospir_num_iter,0,2,"","Number of LMA iterations during spiral search.");
gd.addNumericField("RMSE at first iteration",this.ospir_rms_iter[0],3,7,"scaled pix","Maximal RMSE at first iteration.");
gd.addNumericField("RMSE at first iteration",this.ospir_rms_iter[0],3,7,"scaled pix","Maximal RMSE at first iteration.");
...
@@ -806,6 +807,7 @@ public class IntersceneMatchParameters {
...
@@ -806,6 +807,7 @@ public class IntersceneMatchParameters {
gd.addMessage("Pairwise image matching");
gd.addMessage("Pairwise image matching");
gd.addNumericField("Zoom level",this.pwise_zoom,0,3,"","Low-res images to determine overlaps.");
gd.addNumericField("Zoom level",this.pwise_zoom,0,3,"","Low-res images to determine overlaps.");
gd.addNumericField("Minimal overlap fraction",this.pwise_overlap,3,7,"","Minimal overlap area as a fraction of the smaller of the two images.");
gd.addNumericField("Minimal overlap fraction",this.pwise_overlap,3,7,"","Minimal overlap area as a fraction of the smaller of the two images.");
gd.addNumericField("Satisfactory RMSE, refine",this.pwise_max_rms,3,7,"scaled pix","Maximal RMSE to consider match, in scaled pixels, during refine (high res).");
gd.addCheckbox("Skip existing",this.pwise_skip_exist,"Do not regenerate if match with same or higher resolution exists.");
gd.addCheckbox("Skip existing",this.pwise_skip_exist,"Do not regenerate if match with same or higher resolution exists.");
gd.addCheckbox("Refine existing",this.pwise_refine_exist,"Refine existing matches (false - start from scratch with spiral search).");
gd.addCheckbox("Refine existing",this.pwise_refine_exist,"Refine existing matches (false - start from scratch with spiral search).");
gd.addCheckbox("Delete failed",this.pwise_delete_fail,"Delete previous matches if it failed now.");
gd.addCheckbox("Delete failed",this.pwise_delete_fail,"Delete previous matches if it failed now.");
...
@@ -819,13 +821,13 @@ public class IntersceneMatchParameters {
...
@@ -819,13 +821,13 @@ public class IntersceneMatchParameters {
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.");
gd.addNumericField("Skew pull",this.pmap_skew_pull,3,7,"","Intention to have axes perpendicular.");
gd.addNumericField("Skew pull",this.pmap_skew_pull,7,11,"","Intention to have axes perpendicular.");
gd.addNumericField("Tilt pull",this.pmap_tilt_pull,3,7,"","Intention to have axes same length.");
gd.addNumericField("Tilt pull",this.pmap_tilt_pull,7,11,"","Intention to have axes same length.");
gd.addNumericField("Scale pull",this.pmap_scale_pull,3,7,"","Intention to have average scale of images = 1.0.");
gd.addNumericField("Scale pull",this.pmap_scale_pull,7,11,"","Intention to have average scale of images = 1.0.");
gd.addNumericField("Position pull",this.pmap_position_pull,3,7,"","Intension to match IMS (GNSS) coordinates.");
gd.addNumericField("Position pull",this.pmap_position_pull,7,11,"","Intension to match IMS (GNSS) coordinates.");
gd.addNumericField("Overlap inportance",this.pmap_overlap_pow,3,7,"","Raise overlap fraction (of the smaller image) to this power before using as weight.");
gd.addNumericField("Overlap inportance",this.pmap_overlap_pow,3,7,"","Raise overlap fraction (of the smaller image) to this power before using as weight.");
gd.addNumericField("RMSE relative improvement",this.pmap_rms_diff,3,7,"","Relative RMSE improvement to exit LMA.");
gd.addNumericField("RMSE relative improvement",this.pmap_rms_diff,8,11,"","Relative RMSE improvement to exit LMA.");
gd.addNumericField("LMA iterations",this.pmap_num_iter,0,3,"",".Maximal number of the LMA iterations.");
gd.addNumericField("LMA iterations",this.pmap_num_iter,0,3,"",".Maximal number of the LMA iterations.");
gd.addCheckbox("Show result image",this.pmap_show_result,".");
gd.addCheckbox("Show result image",this.pmap_show_result,".");
gd.addNumericField("Debug level for maps",this.pmap_debugLevel,0,3,"","Debug building for LMA building maps.");
gd.addNumericField("Debug level for maps",this.pmap_debugLevel,0,3,"","Debug building for LMA building maps.");
...
@@ -1721,6 +1723,7 @@ public class IntersceneMatchParameters {
...
@@ -1721,6 +1723,7 @@ public class IntersceneMatchParameters {
this.pwise_zoom=(int)gd.getNextNumber();
this.pwise_zoom=(int)gd.getNextNumber();
this.pwise_overlap=gd.getNextNumber();
this.pwise_overlap=gd.getNextNumber();
this.pwise_max_rms=gd.getNextNumber();
this.pwise_skip_exist=gd.getNextBoolean();
this.pwise_skip_exist=gd.getNextBoolean();
this.pwise_refine_exist=gd.getNextBoolean();
this.pwise_refine_exist=gd.getNextBoolean();
this.pwise_delete_fail=gd.getNextBoolean();
this.pwise_delete_fail=gd.getNextBoolean();
...
@@ -2249,6 +2252,8 @@ public class IntersceneMatchParameters {
...
@@ -2249,6 +2252,8 @@ public class IntersceneMatchParameters {
properties.setProperty(prefix+"pwise_zoom",this.pwise_zoom+"");// int
properties.setProperty(prefix+"pwise_zoom",this.pwise_zoom+"");// int