Loading src/main/java/com/elphel/imagej/tileprocessor/IntersceneMatchParameters.java +46 −0 Original line number Original line Diff line number Diff line Loading @@ -261,6 +261,12 @@ public class IntersceneMatchParameters { public double fpn_radius = 0.75; // pix - zero around center public double fpn_radius = 0.75; // pix - zero around center public boolean fpn_ignore_border = false; // only if fpn_mask != null - ignore tile if maximum touches fpn_mask public boolean fpn_ignore_border = false; // only if fpn_mask != null - ignore tile if maximum touches fpn_mask public double min_offset = 1.5; // pixels - minimal average pixel offset between images to consider interscene matching public double max_rel_offset = 0.5; // maximal interscene offset as a fraction of image width public double max_roll_deg = 10.0; // maximal interscene roll to consider matching public boolean fpn_skip = true; // skip too close scenes (false - abort, previous behavior) public boolean fpn_rematch = true; // match fpn-failed scenes to later scenes with larger difference // Remove moving objects (goal is not to detect slightest movement, but to improve pose matching // Remove moving objects (goal is not to detect slightest movement, but to improve pose matching public boolean mov_en = true; // enable detection/removal of the moving objects during pose matching public boolean mov_en = true; // enable detection/removal of the moving objects during pose matching public double mov_sigma = 1.5; // pix - weighted-blur offsets before detection public double mov_sigma = 1.5; // pix - weighted-blur offsets before detection Loading Loading @@ -793,6 +799,18 @@ public class IntersceneMatchParameters { gd.addCheckbox ("Ignore maximums \"touching\" FPN", this.fpn_ignore_border, gd.addCheckbox ("Ignore maximums \"touching\" FPN", this.fpn_ignore_border, "Discard TD integrated tiles where local maximum is a neighbor (including diagonal) to blanked FPN correlation pixels"); "Discard TD integrated tiles where local maximum is a neighbor (including diagonal) to blanked FPN correlation pixels"); gd.addMessage ("Limit series, handle FPN-related problems"); gd.addNumericField("Minimal inter-scene offset", this.min_offset, 6,7,"pix", "Minimal average pixel offset between images to consider interscene matching"); gd.addNumericField("Maximal interscene offset fraction of width", this.max_rel_offset, 6,7,"x width", "Maximal interscene offset as a fraction of image width to handle low overlap"); gd.addNumericField("Maximal interscene roll", this.max_roll_deg, 6,7,"degrees", "Maximal interscene roll to consider matching"); gd.addCheckbox ("Skip too close to reference scenes", this.fpn_skip, "Skip too close to reference scenes (false - abort, previous behavior)"); gd.addCheckbox ("Match FPN-failed with other scenes", this.fpn_rematch, "Match fpn-failed scenes to later scenes with larger difference"); gd.addMessage ("Detect and remove moving objects from pose matching"); gd.addMessage ("Detect and remove moving objects from pose matching"); gd.addCheckbox ("Enable movement detection/elimination", this.mov_en, gd.addCheckbox ("Enable movement detection/elimination", this.mov_en, "Detect and mask areas with detected movement to improve pose matching"); "Detect and mask areas with detected movement to improve pose matching"); Loading Loading @@ -1167,6 +1185,13 @@ public class IntersceneMatchParameters { this.fpn_max_offset = gd.getNextNumber(); this.fpn_max_offset = gd.getNextNumber(); this.fpn_radius = gd.getNextNumber(); this.fpn_radius = gd.getNextNumber(); this.fpn_ignore_border = gd.getNextBoolean(); this.fpn_ignore_border = gd.getNextBoolean(); this.min_offset = gd.getNextNumber(); this.max_rel_offset = gd.getNextNumber(); this.max_roll_deg = gd.getNextNumber(); this.fpn_skip = gd.getNextBoolean(); this.fpn_rematch = gd.getNextBoolean(); this.mov_en = gd.getNextBoolean(); this.mov_en = gd.getNextBoolean(); this.mov_sigma = gd.getNextNumber(); this.mov_sigma = gd.getNextNumber(); this.mov_max_std = gd.getNextNumber(); this.mov_max_std = gd.getNextNumber(); Loading Loading @@ -1494,6 +1519,13 @@ public class IntersceneMatchParameters { properties.setProperty(prefix+"fpn_max_offset", this.fpn_max_offset+""); // double properties.setProperty(prefix+"fpn_max_offset", this.fpn_max_offset+""); // double properties.setProperty(prefix+"fpn_radius", this.fpn_radius+""); // double properties.setProperty(prefix+"fpn_radius", this.fpn_radius+""); // double properties.setProperty(prefix+"fpn_ignore_border", this.fpn_ignore_border+""); // boolean properties.setProperty(prefix+"fpn_ignore_border", this.fpn_ignore_border+""); // boolean properties.setProperty(prefix+"min_offset", this.min_offset+""); // double properties.setProperty(prefix+"max_rel_offset", this.max_rel_offset+""); // double properties.setProperty(prefix+"max_roll_deg", this.max_roll_deg+""); // double properties.setProperty(prefix+"fpn_skip", this.fpn_skip+""); // boolean properties.setProperty(prefix+"fpn_rematch", this.fpn_rematch+""); // boolean properties.setProperty(prefix+"mov_en", this.mov_en+""); // boolean properties.setProperty(prefix+"mov_en", this.mov_en+""); // boolean properties.setProperty(prefix+"mov_sigma", this.mov_sigma+""); // double properties.setProperty(prefix+"mov_sigma", this.mov_sigma+""); // double properties.setProperty(prefix+"mov_max_std", this.mov_max_std+""); // double properties.setProperty(prefix+"mov_max_std", this.mov_max_std+""); // double Loading Loading @@ -1779,6 +1811,13 @@ public class IntersceneMatchParameters { if (properties.getProperty(prefix+"fpn_max_offset")!=null) this.fpn_max_offset=Double.parseDouble(properties.getProperty(prefix+"fpn_max_offset")); if (properties.getProperty(prefix+"fpn_max_offset")!=null) this.fpn_max_offset=Double.parseDouble(properties.getProperty(prefix+"fpn_max_offset")); if (properties.getProperty(prefix+"fpn_radius")!=null) this.fpn_radius=Double.parseDouble(properties.getProperty(prefix+"fpn_radius")); if (properties.getProperty(prefix+"fpn_radius")!=null) this.fpn_radius=Double.parseDouble(properties.getProperty(prefix+"fpn_radius")); if (properties.getProperty(prefix+"fpn_ignore_border")!=null) this.fpn_ignore_border=Boolean.parseBoolean(properties.getProperty(prefix+"fpn_ignore_border")); if (properties.getProperty(prefix+"fpn_ignore_border")!=null) this.fpn_ignore_border=Boolean.parseBoolean(properties.getProperty(prefix+"fpn_ignore_border")); if (properties.getProperty(prefix+"min_offset")!=null) this.min_offset=Double.parseDouble(properties.getProperty(prefix+"min_offset")); if (properties.getProperty(prefix+"max_rel_offset")!=null) this.max_rel_offset=Double.parseDouble(properties.getProperty(prefix+"max_rel_offset")); if (properties.getProperty(prefix+"max_roll_deg")!=null) this.max_roll_deg=Double.parseDouble(properties.getProperty(prefix+"max_roll_deg")); if (properties.getProperty(prefix+"fpn_skip")!=null) this.fpn_skip=Boolean.parseBoolean(properties.getProperty(prefix+"fpn_skip")); if (properties.getProperty(prefix+"fpn_rematch")!=null) this.fpn_rematch=Boolean.parseBoolean(properties.getProperty(prefix+"fpn_rematch")); if (properties.getProperty(prefix+"mov_en")!=null) this.mov_en=Boolean.parseBoolean(properties.getProperty(prefix+"mov_en")); if (properties.getProperty(prefix+"mov_en")!=null) this.mov_en=Boolean.parseBoolean(properties.getProperty(prefix+"mov_en")); if (properties.getProperty(prefix+"mov_sigma")!=null) this.mov_sigma=Double.parseDouble(properties.getProperty(prefix+"mov_sigma")); if (properties.getProperty(prefix+"mov_sigma")!=null) this.mov_sigma=Double.parseDouble(properties.getProperty(prefix+"mov_sigma")); if (properties.getProperty(prefix+"mov_max_std")!=null) this.mov_max_std=Double.parseDouble(properties.getProperty(prefix+"mov_max_std")); if (properties.getProperty(prefix+"mov_max_std")!=null) this.mov_max_std=Double.parseDouble(properties.getProperty(prefix+"mov_max_std")); Loading Loading @@ -2074,6 +2113,13 @@ public class IntersceneMatchParameters { imp.fpn_max_offset = this.fpn_max_offset; imp.fpn_max_offset = this.fpn_max_offset; imp.fpn_radius = this.fpn_radius; imp.fpn_radius = this.fpn_radius; imp.fpn_ignore_border = this.fpn_ignore_border; imp.fpn_ignore_border = this.fpn_ignore_border; imp.min_offset = this.min_offset; imp.max_rel_offset = this.max_rel_offset; imp.max_roll_deg = this.max_roll_deg; imp.fpn_skip = this.fpn_skip; imp.fpn_rematch = this.fpn_rematch; imp.mov_en = this.mov_en; imp.mov_en = this.mov_en; imp.mov_sigma = this.mov_sigma; imp.mov_sigma = this.mov_sigma; imp.mov_max_std = this.mov_max_std; imp.mov_max_std = this.mov_max_std; Loading Loading
src/main/java/com/elphel/imagej/tileprocessor/IntersceneMatchParameters.java +46 −0 Original line number Original line Diff line number Diff line Loading @@ -261,6 +261,12 @@ public class IntersceneMatchParameters { public double fpn_radius = 0.75; // pix - zero around center public double fpn_radius = 0.75; // pix - zero around center public boolean fpn_ignore_border = false; // only if fpn_mask != null - ignore tile if maximum touches fpn_mask public boolean fpn_ignore_border = false; // only if fpn_mask != null - ignore tile if maximum touches fpn_mask public double min_offset = 1.5; // pixels - minimal average pixel offset between images to consider interscene matching public double max_rel_offset = 0.5; // maximal interscene offset as a fraction of image width public double max_roll_deg = 10.0; // maximal interscene roll to consider matching public boolean fpn_skip = true; // skip too close scenes (false - abort, previous behavior) public boolean fpn_rematch = true; // match fpn-failed scenes to later scenes with larger difference // Remove moving objects (goal is not to detect slightest movement, but to improve pose matching // Remove moving objects (goal is not to detect slightest movement, but to improve pose matching public boolean mov_en = true; // enable detection/removal of the moving objects during pose matching public boolean mov_en = true; // enable detection/removal of the moving objects during pose matching public double mov_sigma = 1.5; // pix - weighted-blur offsets before detection public double mov_sigma = 1.5; // pix - weighted-blur offsets before detection Loading Loading @@ -793,6 +799,18 @@ public class IntersceneMatchParameters { gd.addCheckbox ("Ignore maximums \"touching\" FPN", this.fpn_ignore_border, gd.addCheckbox ("Ignore maximums \"touching\" FPN", this.fpn_ignore_border, "Discard TD integrated tiles where local maximum is a neighbor (including diagonal) to blanked FPN correlation pixels"); "Discard TD integrated tiles where local maximum is a neighbor (including diagonal) to blanked FPN correlation pixels"); gd.addMessage ("Limit series, handle FPN-related problems"); gd.addNumericField("Minimal inter-scene offset", this.min_offset, 6,7,"pix", "Minimal average pixel offset between images to consider interscene matching"); gd.addNumericField("Maximal interscene offset fraction of width", this.max_rel_offset, 6,7,"x width", "Maximal interscene offset as a fraction of image width to handle low overlap"); gd.addNumericField("Maximal interscene roll", this.max_roll_deg, 6,7,"degrees", "Maximal interscene roll to consider matching"); gd.addCheckbox ("Skip too close to reference scenes", this.fpn_skip, "Skip too close to reference scenes (false - abort, previous behavior)"); gd.addCheckbox ("Match FPN-failed with other scenes", this.fpn_rematch, "Match fpn-failed scenes to later scenes with larger difference"); gd.addMessage ("Detect and remove moving objects from pose matching"); gd.addMessage ("Detect and remove moving objects from pose matching"); gd.addCheckbox ("Enable movement detection/elimination", this.mov_en, gd.addCheckbox ("Enable movement detection/elimination", this.mov_en, "Detect and mask areas with detected movement to improve pose matching"); "Detect and mask areas with detected movement to improve pose matching"); Loading Loading @@ -1167,6 +1185,13 @@ public class IntersceneMatchParameters { this.fpn_max_offset = gd.getNextNumber(); this.fpn_max_offset = gd.getNextNumber(); this.fpn_radius = gd.getNextNumber(); this.fpn_radius = gd.getNextNumber(); this.fpn_ignore_border = gd.getNextBoolean(); this.fpn_ignore_border = gd.getNextBoolean(); this.min_offset = gd.getNextNumber(); this.max_rel_offset = gd.getNextNumber(); this.max_roll_deg = gd.getNextNumber(); this.fpn_skip = gd.getNextBoolean(); this.fpn_rematch = gd.getNextBoolean(); this.mov_en = gd.getNextBoolean(); this.mov_en = gd.getNextBoolean(); this.mov_sigma = gd.getNextNumber(); this.mov_sigma = gd.getNextNumber(); this.mov_max_std = gd.getNextNumber(); this.mov_max_std = gd.getNextNumber(); Loading Loading @@ -1494,6 +1519,13 @@ public class IntersceneMatchParameters { properties.setProperty(prefix+"fpn_max_offset", this.fpn_max_offset+""); // double properties.setProperty(prefix+"fpn_max_offset", this.fpn_max_offset+""); // double properties.setProperty(prefix+"fpn_radius", this.fpn_radius+""); // double properties.setProperty(prefix+"fpn_radius", this.fpn_radius+""); // double properties.setProperty(prefix+"fpn_ignore_border", this.fpn_ignore_border+""); // boolean properties.setProperty(prefix+"fpn_ignore_border", this.fpn_ignore_border+""); // boolean properties.setProperty(prefix+"min_offset", this.min_offset+""); // double properties.setProperty(prefix+"max_rel_offset", this.max_rel_offset+""); // double properties.setProperty(prefix+"max_roll_deg", this.max_roll_deg+""); // double properties.setProperty(prefix+"fpn_skip", this.fpn_skip+""); // boolean properties.setProperty(prefix+"fpn_rematch", this.fpn_rematch+""); // boolean properties.setProperty(prefix+"mov_en", this.mov_en+""); // boolean properties.setProperty(prefix+"mov_en", this.mov_en+""); // boolean properties.setProperty(prefix+"mov_sigma", this.mov_sigma+""); // double properties.setProperty(prefix+"mov_sigma", this.mov_sigma+""); // double properties.setProperty(prefix+"mov_max_std", this.mov_max_std+""); // double properties.setProperty(prefix+"mov_max_std", this.mov_max_std+""); // double Loading Loading @@ -1779,6 +1811,13 @@ public class IntersceneMatchParameters { if (properties.getProperty(prefix+"fpn_max_offset")!=null) this.fpn_max_offset=Double.parseDouble(properties.getProperty(prefix+"fpn_max_offset")); if (properties.getProperty(prefix+"fpn_max_offset")!=null) this.fpn_max_offset=Double.parseDouble(properties.getProperty(prefix+"fpn_max_offset")); if (properties.getProperty(prefix+"fpn_radius")!=null) this.fpn_radius=Double.parseDouble(properties.getProperty(prefix+"fpn_radius")); if (properties.getProperty(prefix+"fpn_radius")!=null) this.fpn_radius=Double.parseDouble(properties.getProperty(prefix+"fpn_radius")); if (properties.getProperty(prefix+"fpn_ignore_border")!=null) this.fpn_ignore_border=Boolean.parseBoolean(properties.getProperty(prefix+"fpn_ignore_border")); if (properties.getProperty(prefix+"fpn_ignore_border")!=null) this.fpn_ignore_border=Boolean.parseBoolean(properties.getProperty(prefix+"fpn_ignore_border")); if (properties.getProperty(prefix+"min_offset")!=null) this.min_offset=Double.parseDouble(properties.getProperty(prefix+"min_offset")); if (properties.getProperty(prefix+"max_rel_offset")!=null) this.max_rel_offset=Double.parseDouble(properties.getProperty(prefix+"max_rel_offset")); if (properties.getProperty(prefix+"max_roll_deg")!=null) this.max_roll_deg=Double.parseDouble(properties.getProperty(prefix+"max_roll_deg")); if (properties.getProperty(prefix+"fpn_skip")!=null) this.fpn_skip=Boolean.parseBoolean(properties.getProperty(prefix+"fpn_skip")); if (properties.getProperty(prefix+"fpn_rematch")!=null) this.fpn_rematch=Boolean.parseBoolean(properties.getProperty(prefix+"fpn_rematch")); if (properties.getProperty(prefix+"mov_en")!=null) this.mov_en=Boolean.parseBoolean(properties.getProperty(prefix+"mov_en")); if (properties.getProperty(prefix+"mov_en")!=null) this.mov_en=Boolean.parseBoolean(properties.getProperty(prefix+"mov_en")); if (properties.getProperty(prefix+"mov_sigma")!=null) this.mov_sigma=Double.parseDouble(properties.getProperty(prefix+"mov_sigma")); if (properties.getProperty(prefix+"mov_sigma")!=null) this.mov_sigma=Double.parseDouble(properties.getProperty(prefix+"mov_sigma")); if (properties.getProperty(prefix+"mov_max_std")!=null) this.mov_max_std=Double.parseDouble(properties.getProperty(prefix+"mov_max_std")); if (properties.getProperty(prefix+"mov_max_std")!=null) this.mov_max_std=Double.parseDouble(properties.getProperty(prefix+"mov_max_std")); Loading Loading @@ -2074,6 +2113,13 @@ public class IntersceneMatchParameters { imp.fpn_max_offset = this.fpn_max_offset; imp.fpn_max_offset = this.fpn_max_offset; imp.fpn_radius = this.fpn_radius; imp.fpn_radius = this.fpn_radius; imp.fpn_ignore_border = this.fpn_ignore_border; imp.fpn_ignore_border = this.fpn_ignore_border; imp.min_offset = this.min_offset; imp.max_rel_offset = this.max_rel_offset; imp.max_roll_deg = this.max_roll_deg; imp.fpn_skip = this.fpn_skip; imp.fpn_rematch = this.fpn_rematch; imp.mov_en = this.mov_en; imp.mov_en = this.mov_en; imp.mov_sigma = this.mov_sigma; imp.mov_sigma = this.mov_sigma; imp.mov_max_std = this.mov_max_std; imp.mov_max_std = this.mov_max_std; Loading