Loading src/main/java/com/elphel/imagej/cameras/CLTParameters.java +14 −1 Original line number Original line Diff line number Diff line Loading @@ -385,6 +385,7 @@ public class CLTParameters { public double photo_offs = 21946; // weighted average offset target value, if photo_offs_set (and not photo_offs_balance) public double photo_offs = 21946; // weighted average offset target value, if photo_offs_set (and not photo_offs_balance) public boolean photo_debug = false;// Generate images and text public boolean photo_debug = false;// Generate images and text public boolean photo_each_debug = false;// Debug after Blue Sky public double tex_disp_adiffo = 0.10; // 0.35; // 0.3; disparity absolute tolerance to connect in ortho directions public double tex_disp_adiffo = 0.10; // 0.35; // 0.3; disparity absolute tolerance to connect in ortho directions public double tex_disp_rdiffo = 0.08; // 0.12; // 0.1; disparity relative tolerance to connect in ortho directions public double tex_disp_rdiffo = 0.08; // 0.12; // 0.1; disparity relative tolerance to connect in ortho directions Loading Loading @@ -448,6 +449,8 @@ public class CLTParameters { public double maxZ = 20000; // maximal distance to far object public double maxZ = 20000; // maximal distance to far object public boolean limitZ = true; // limit Z, if false - remove triangle public boolean limitZ = true; // limit Z, if false - remove triangle public double infinityDistance = 10000; // Distance to generate backdrop (0 - use regular backdrop) public double infinityDistance = 10000; // Distance to generate backdrop (0 - use regular backdrop) public double min_from_inf = 500; // farthest non-infinity closer than infinity public int min_bgnd_tiles = 10; // Minimal number of background tiles to generate background public int min_bgnd_tiles = 10; // Minimal number of background tiles to generate background public boolean gltf_emissive = false; // true; // Use emissive textures public boolean gltf_emissive = false; // true; // Use emissive textures Loading Loading @@ -1487,6 +1490,7 @@ public class CLTParameters { properties.setProperty(prefix+"photo_offs_set", this.photo_offs_set+""); // int properties.setProperty(prefix+"photo_offs_set", this.photo_offs_set+""); // int properties.setProperty(prefix+"photo_offs", this.photo_offs+""); // double properties.setProperty(prefix+"photo_offs", this.photo_offs+""); // double properties.setProperty(prefix+"photo_debug", this.photo_debug+""); // boolean properties.setProperty(prefix+"photo_debug", this.photo_debug+""); // boolean properties.setProperty(prefix+"photo_each_debug", this.photo_each_debug+""); // boolean properties.setProperty(prefix+"tex_disp_adiffo", this.tex_disp_adiffo+""); // double properties.setProperty(prefix+"tex_disp_adiffo", this.tex_disp_adiffo+""); // double properties.setProperty(prefix+"tex_disp_rdiffo", this.tex_disp_rdiffo+""); // double properties.setProperty(prefix+"tex_disp_rdiffo", this.tex_disp_rdiffo+""); // double Loading Loading @@ -1551,6 +1555,7 @@ public class CLTParameters { properties.setProperty(prefix+"limitZ", this.limitZ+""); properties.setProperty(prefix+"limitZ", this.limitZ+""); properties.setProperty(prefix+"infinityDistance", this.infinityDistance +""); properties.setProperty(prefix+"infinityDistance", this.infinityDistance +""); properties.setProperty(prefix+"min_from_inf", this.min_from_inf +""); properties.setProperty(prefix+"min_bgnd_tiles", this.min_bgnd_tiles+""); properties.setProperty(prefix+"min_bgnd_tiles", this.min_bgnd_tiles+""); properties.setProperty(prefix+"gltf_emissive", this.gltf_emissive+""); properties.setProperty(prefix+"gltf_emissive", this.gltf_emissive+""); Loading Loading @@ -2467,6 +2472,7 @@ public class CLTParameters { if (properties.getProperty(prefix+"photo_offs_set")!=null) this.photo_offs_set=Integer.parseInt(properties.getProperty(prefix+"photo_offs_set")); if (properties.getProperty(prefix+"photo_offs_set")!=null) this.photo_offs_set=Integer.parseInt(properties.getProperty(prefix+"photo_offs_set")); if (properties.getProperty(prefix+"photo_offs")!=null) this.photo_offs=Double.parseDouble(properties.getProperty(prefix+"photo_offs")); if (properties.getProperty(prefix+"photo_offs")!=null) this.photo_offs=Double.parseDouble(properties.getProperty(prefix+"photo_offs")); if (properties.getProperty(prefix+"photo_debug")!=null) this.photo_debug=Boolean.parseBoolean(properties.getProperty(prefix+"photo_debug")); if (properties.getProperty(prefix+"photo_debug")!=null) this.photo_debug=Boolean.parseBoolean(properties.getProperty(prefix+"photo_debug")); if (properties.getProperty(prefix+"photo_each_debug")!=null) this.photo_each_debug=Boolean.parseBoolean(properties.getProperty(prefix+"photo_each_debug")); if (properties.getProperty(prefix+"tex_disp_adiffo")!=null) this.tex_disp_adiffo=Double.parseDouble(properties.getProperty(prefix+"tex_disp_adiffo")); if (properties.getProperty(prefix+"tex_disp_adiffo")!=null) this.tex_disp_adiffo=Double.parseDouble(properties.getProperty(prefix+"tex_disp_adiffo")); if (properties.getProperty(prefix+"tex_disp_rdiffo")!=null) this.tex_disp_rdiffo=Double.parseDouble(properties.getProperty(prefix+"tex_disp_rdiffo")); if (properties.getProperty(prefix+"tex_disp_rdiffo")!=null) this.tex_disp_rdiffo=Double.parseDouble(properties.getProperty(prefix+"tex_disp_rdiffo")); Loading Loading @@ -2530,6 +2536,7 @@ public class CLTParameters { if (properties.getProperty(prefix+"limitZ")!=null) this.limitZ=Boolean.parseBoolean(properties.getProperty(prefix+"limitZ")); if (properties.getProperty(prefix+"limitZ")!=null) this.limitZ=Boolean.parseBoolean(properties.getProperty(prefix+"limitZ")); if (properties.getProperty(prefix+"infinityDistance")!=null) this.infinityDistance=Double.parseDouble(properties.getProperty(prefix+"infinityDistance")); if (properties.getProperty(prefix+"infinityDistance")!=null) this.infinityDistance=Double.parseDouble(properties.getProperty(prefix+"infinityDistance")); if (properties.getProperty(prefix+"min_from_inf")!=null) this.min_from_inf=Double.parseDouble(properties.getProperty(prefix+"min_from_inf")); if (properties.getProperty(prefix+"min_bgnd_tiles")!=null) this.min_bgnd_tiles=Integer.parseInt(properties.getProperty(prefix+"min_bgnd_tiles")); if (properties.getProperty(prefix+"min_bgnd_tiles")!=null) this.min_bgnd_tiles=Integer.parseInt(properties.getProperty(prefix+"min_bgnd_tiles")); if (properties.getProperty(prefix+"gltf_emissive")!=null) this.gltf_emissive=Boolean.parseBoolean(properties.getProperty(prefix+"gltf_emissive")); if (properties.getProperty(prefix+"gltf_emissive")!=null) this.gltf_emissive=Boolean.parseBoolean(properties.getProperty(prefix+"gltf_emissive")); Loading Loading @@ -3600,7 +3607,9 @@ public class CLTParameters { "Target weighted (by scales) average offset."); "Target weighted (by scales) average offset."); gd.addCheckbox ("Debug photometric calibration", this.photo_debug, gd.addCheckbox ("Debug photometric calibration", this.photo_debug, "Generate debug images an text output."); "Generate debug images an text output."); gd.addCheckbox ("Debug photometric calibration 'each'", this.photo_each_debug, "Generate debug images after Blue Sky."); // gd.addTab ("3D", "3D reconstruction"); gd.addTab ("3D", "3D reconstruction"); gd.addMessage ("Meshes clustering for texture generation"); gd.addMessage ("Meshes clustering for texture generation"); gd.addNumericField("Ortho tolerance absolute", this.tex_disp_adiffo, 5,7,"pix", gd.addNumericField("Ortho tolerance absolute", this.tex_disp_adiffo, 5,7,"pix", Loading Loading @@ -3726,6 +3735,8 @@ public class CLTParameters { gd.addNumericField("Distance to a backdrop", this.infinityDistance,8,8,"m", gd.addNumericField("Distance to a backdrop", this.infinityDistance,8,8,"m", "Distance to generate backdrop (0 - use regular backdrop)."); "Distance to generate backdrop (0 - use regular backdrop)."); gd.addNumericField("Minimal distance from backdrop", this.min_from_inf,8,8,"m", "Minimal distance of the fartest object from backdrop to be resolved."); gd.addNumericField("Minimal background tiles", this.min_bgnd_tiles, 0,4,"", gd.addNumericField("Minimal background tiles", this.min_bgnd_tiles, 0,4,"", "Minimal number of background tiles to generate background."); "Minimal number of background tiles to generate background."); Loading Loading @@ -4827,6 +4838,7 @@ public class CLTParameters { this.photo_offs_set = (int) gd.getNextNumber(); this.photo_offs_set = (int) gd.getNextNumber(); this.photo_offs = gd.getNextNumber(); this.photo_offs = gd.getNextNumber(); this.photo_debug = gd.getNextBoolean(); this.photo_debug = gd.getNextBoolean(); this.photo_each_debug = gd.getNextBoolean(); this.tex_disp_adiffo = gd.getNextNumber(); this.tex_disp_adiffo = gd.getNextNumber(); this.tex_disp_rdiffo = gd.getNextNumber(); this.tex_disp_rdiffo = gd.getNextNumber(); Loading Loading @@ -4891,6 +4903,7 @@ public class CLTParameters { this.limitZ= gd.getNextBoolean(); this.limitZ= gd.getNextBoolean(); this.infinityDistance= gd.getNextNumber(); this.infinityDistance= gd.getNextNumber(); this.min_from_inf= gd.getNextNumber(); this.min_bgnd_tiles= (int) gd.getNextNumber(); this.min_bgnd_tiles= (int) gd.getNextNumber(); this.gltf_emissive= gd.getNextBoolean(); this.gltf_emissive= gd.getNextBoolean(); Loading src/main/java/com/elphel/imagej/tileprocessor/IntersceneMatchParameters.java +66 −8 Original line number Original line Diff line number Diff line Loading @@ -136,28 +136,37 @@ public class IntersceneMatchParameters { //------------ //------------ // Sky detection/filtering // Sky detection/filtering public boolean sky_recalc = false; // force blue sky recalculation even if it exists public double sky_highest_min = -50; // lowest absolute value should not be higher (requires photometric) public double sky_highest_min = -50; // lowest absolute value should not be higher (requires photometric) public double cold_frac = 0.005; // this and lower will scale fom by cold_scale public double cold_frac = 0.005; // this and lower will scale fom by cold_scale public double hot_frac = 0.9; // this and above will scale fom by 1.0 public double hot_frac = 0.9; // this and above will scale fom by 1.0 public double cold_scale = 0.2; // <=1.0. 1.0 - disables temperature dependence public double cold_scale = 0.2; // <=1.0. 1.0 - disables temperature dependence public double sky_seed = 5.0; // start with product of strength by diff_second below this public double sky_seed = 5.0; // 5.0 start with product of strength by diff_second below this public double lma_seed = 2.0; // seed - disparity_lma limit double sky_lim = 15.0; // then expand to product of strength by diff_second below this public double lma_seed = 2.0; // seed - disparity_lma limit double sky_lim = 15.0; // then expand to product of strength by diff_second below this public double seed_temp = 0.5; // seed colder that this point between min and max temp public int sky_shrink = 2; public int sky_shrink = 2; public int seed_rows = 5; // sky should appear in this top rows public int seed_rows = 5; // sky should appear in this top rows public double max_disparity = 0.3; // maximal strong sky disparity public double max_disparity_strength = 0.2; // maximal strength of high disparity sky public double sky_lim = 15.0; // then expand to product of strength by diff_second below this public double sky_lim = 15.0; // then expand to product of strength by diff_second below this public double lim_temp = 0.5; // sky colder that this point between min and max temp public int sky_expand_extra = 0; // 1? public int sky_expand_extra = 0; // 1? public int sky_bottleneck = 5; public int sky_bottleneck = 5; public int sky_reexpand_extra = 9;// re-expand after bottleneck in addition to how it was shrank public double min_strength = 0.08; public double min_strength = 0.08; public int lowest_sky_row = 50; // appears that low - invalid, remove completely public int lowest_sky_row = 50; // appears that low - invalid, remove completely public double sky_bottom_override = -300; // maximal average sky value to override lowest_sky_row test public double sky_bottom_override = -300; // maximal average sky value to override lowest_sky_row test public int sky_override_shrink = 10; // shrink detected sky before finding hottest tile there public int sky_override_shrink = 6; // shrink detected sky before finding hottest tile there // Increase fom if there are enough LMA-defined similar tiles around // Increase fom if there are enough LMA-defined similar tiles around public double disp_boost_min = 0.5; public double disp_boost_min = 0.5; public double disp_boost_diff = 0.35; public double disp_boost_diff = 0.35; public int disp_boost_neibs = 2; public int disp_boost_neibs = 2; public double disp_boost_amount = 2.0; public double disp_boost_amount = 2.0; public double scale_combo_strength = 0.4; // reduce strength when it comes from combo, not DSI-MAIN public boolean save_debug_images = true; // Save blue sky debug images in model directory // Some "AGC" to adjust how much to discard // Some "AGC" to adjust how much to discard public int margin = 1; // do not use tiles if their centers are closer to the image edge public int margin = 1; // do not use tiles if their centers are closer to the image edge Loading Loading @@ -519,6 +528,8 @@ public class IntersceneMatchParameters { gd.addTab("Sky","Featureless sky areas detection and filtering (LWIR only)"); gd.addTab("Sky","Featureless sky areas detection and filtering (LWIR only)"); gd.addMessage ("Temperature-related filtering (requires photometric calibration)"); gd.addMessage ("Temperature-related filtering (requires photometric calibration)"); gd.addCheckbox ("Force blue sky recalculation", this.sky_recalc, "Recalculate blue sky even if it already exists."); gd.addNumericField("High limit of the scene coldest tile", this.sky_highest_min, 5,7,"", gd.addNumericField("High limit of the scene coldest tile", this.sky_highest_min, 5,7,"", "Sky is normally cold. If the (globally offset) minimal scene absolutre pixel value is above - no sky in the scene (debug images still show it)"); "Sky is normally cold. If the (globally offset) minimal scene absolutre pixel value is above - no sky in the scene (debug images still show it)"); gd.addNumericField("Cold level fraction", this.cold_frac, 5,7,"", gd.addNumericField("Cold level fraction", this.cold_frac, 5,7,"", Loading @@ -533,17 +544,27 @@ public class IntersceneMatchParameters { "at infinity and 3 above parameters"); "at infinity and 3 above parameters"); gd.addNumericField("Seed maximal disparity", this.lma_seed, 5,7,"pix", gd.addNumericField("Seed maximal disparity", this.lma_seed, 5,7,"pix", "Seed tiles should not have LMA-found disparity above this"); "Seed tiles should not have LMA-found disparity above this"); gd.addNumericField("Seed maximal relative temperature", this.seed_temp, 5,7,"", "Seed tiles should be colder than this point between min and max scene temperature."); gd.addNumericField("Shrink sky seed", this.sky_shrink, 0,3,"", gd.addNumericField("Shrink sky seed", this.sky_shrink, 0,3,"", "Shrink sky seed tiles to eliminate too small (false) clusters. One shrinks in hor/vert, 2 - with diagonals, ..."); "Shrink sky seed tiles to eliminate too small (false) clusters. One shrinks in hor/vert, 2 - with diagonals, ..."); gd.addNumericField("Seed rows", this.seed_rows, 0,3,"", gd.addNumericField("Seed rows", this.seed_rows, 0,3,"", "Sky is above and normally should appear in the top image rows. Applies after shrinking."); "Sky is above and normally should appear in the top image rows. Applies after shrinking."); gd.addMessage ("Expand seed tiles"); gd.addMessage ("Expand seed tiles"); gd.addNumericField("Maximal strong sky disparity", this.max_disparity, 5,7,"", "Maximal disparity of the sky tiles if they are strong enough."); gd.addNumericField("Strength of the high disparity sky", this.max_disparity_strength, 5,7,"", "Required tile strenghth to be considered strong to test against maximal disparity."); gd.addNumericField("Expand FOM limit", this.sky_lim, 5,7,"", gd.addNumericField("Expand FOM limit", this.sky_lim, 5,7,"", "Expand while FOM is below this value (usually to a high-contrast skyline)."); "Expand while FOM is below this value (usually to a high-contrast skyline)."); gd.addNumericField("Sky maximal relative temperature", this.lim_temp, 5,7,"", "Sky tiles should be colder than this point between min and max scene temperature."); gd.addNumericField("Expand extra", this.sky_expand_extra, 0,3,"", gd.addNumericField("Expand extra", this.sky_expand_extra, 0,3,"", "Additionally expand sky area after reaching threshold in the previous step."); "Additionally expand sky area after reaching threshold in the previous step."); gd.addNumericField("Bottleneck width", this.sky_bottleneck, 0,3,"", gd.addNumericField("Bottleneck width", this.sky_bottleneck, 0,3,"", "Shrink/reexpand from the seed detected sky to prevent \"leaks\" through narrow gaps in the high-contrast sky limit."); "Shrink/reexpand from the seed detected sky to prevent \"leaks\" through narrow gaps in the high-contrast sky limit."); gd.addNumericField("Re-expand extra after bottleneck", this.sky_reexpand_extra, 0,3,"", "Additionally expand sky area after bottleneck shrink in excess of re-expanding by the same amount as shrank."); gd.addNumericField("Modify strength to be at least this", this.min_strength, 5,7,"", gd.addNumericField("Modify strength to be at least this", this.min_strength, 5,7,"", "Input strength has some with zero values resulting in zero FOM. Make them at least this."); "Input strength has some with zero values resulting in zero FOM. Make them at least this."); gd.addNumericField("Lowest sky row", this.lowest_sky_row, 0,3,"", gd.addNumericField("Lowest sky row", this.lowest_sky_row, 0,3,"", Loading @@ -562,9 +583,12 @@ public class IntersceneMatchParameters { "Number of neighbors (of 8) to have small disparity difference to boost FOM."); "Number of neighbors (of 8) to have small disparity difference to boost FOM."); gd.addNumericField("Boost amount", this.disp_boost_amount, 5,7,"x", gd.addNumericField("Boost amount", this.disp_boost_amount, 5,7,"x", "Multiply FOM by this value if number of neighbors is exactly minimal. Scale proportional to the total number of neighbors."); "Multiply FOM by this value if number of neighbors is exactly minimal. Scale proportional to the total number of neighbors."); gd.addTab ("Inter-Match", "Parameters for full-resolution scene matching"); gd.addNumericField("Scale if strength is combo, not main", this.scale_combo_strength, 5,7,"x", "Reduce strength when it comes from combo, not DSI-MAIN."); gd.addCheckbox ("Save debug images", this.save_debug_images, "Save debug images for Blue Sky generation in model directory."); gd.addTab ("Inter-Match", "Parameters for full-resolution scene matching"); gd.addMessage ("Interscene match parameters"); gd.addMessage ("Interscene match parameters"); gd.addNumericField("Image margin", this.margin, 0,5,"pix", gd.addNumericField("Image margin", this.margin, 0,5,"pix", "Do not use tiles if their centers are closer to the virtual image edge"); "Do not use tiles if their centers are closer to the virtual image edge"); Loading Loading @@ -924,17 +948,23 @@ public class IntersceneMatchParameters { this.strong_strength = gd.getNextNumber(); this.strong_strength = gd.getNextNumber(); this.weak_strength = gd.getNextNumber(); this.weak_strength = gd.getNextNumber(); this.sky_recalc = gd.getNextBoolean(); this.sky_highest_min = gd.getNextNumber(); this.sky_highest_min = gd.getNextNumber(); this.cold_frac = gd.getNextNumber(); this.cold_frac = gd.getNextNumber(); this.hot_frac = gd.getNextNumber(); this.hot_frac = gd.getNextNumber(); this.cold_scale = gd.getNextNumber(); this.cold_scale = gd.getNextNumber(); this.sky_seed = gd.getNextNumber(); this.sky_seed = gd.getNextNumber(); this.lma_seed = gd.getNextNumber(); this.lma_seed = gd.getNextNumber(); this.seed_temp = gd.getNextNumber(); this.sky_shrink = (int) gd.getNextNumber(); this.sky_shrink = (int) gd.getNextNumber(); this.seed_rows = (int) gd.getNextNumber(); this.seed_rows = (int) gd.getNextNumber(); this.max_disparity = gd.getNextNumber(); this.max_disparity_strength = gd.getNextNumber(); this.sky_lim = gd.getNextNumber(); this.sky_lim = gd.getNextNumber(); this.lim_temp = gd.getNextNumber(); this.sky_expand_extra = (int) gd.getNextNumber(); this.sky_expand_extra = (int) gd.getNextNumber(); this.sky_bottleneck = (int) gd.getNextNumber(); this.sky_bottleneck = (int) gd.getNextNumber(); this.sky_reexpand_extra = (int) gd.getNextNumber(); this.min_strength = gd.getNextNumber(); this.min_strength = gd.getNextNumber(); this.lowest_sky_row = (int) gd.getNextNumber(); this.lowest_sky_row = (int) gd.getNextNumber(); this.sky_bottom_override = gd.getNextNumber(); this.sky_bottom_override = gd.getNextNumber(); Loading @@ -944,6 +974,8 @@ public class IntersceneMatchParameters { this.disp_boost_diff = gd.getNextNumber(); this.disp_boost_diff = gd.getNextNumber(); this.disp_boost_neibs = (int) gd.getNextNumber(); this.disp_boost_neibs = (int) gd.getNextNumber(); this.disp_boost_amount = gd.getNextNumber(); this.disp_boost_amount = gd.getNextNumber(); this.scale_combo_strength = gd.getNextNumber(); this.save_debug_images = gd.getNextBoolean(); this.margin = (int) gd.getNextNumber(); this.margin = (int) gd.getNextNumber(); this.sensor_mask_inter= (int) gd.getNextNumber(); this.sensor_mask_inter= (int) gd.getNextNumber(); Loading Loading @@ -1206,17 +1238,23 @@ public class IntersceneMatchParameters { properties.setProperty(prefix+"strong_strength", this.strong_strength+""); // double properties.setProperty(prefix+"strong_strength", this.strong_strength+""); // double properties.setProperty(prefix+"weak_strength", this.weak_strength+""); // double properties.setProperty(prefix+"weak_strength", this.weak_strength+""); // double properties.setProperty(prefix+"sky_recalc", this.sky_recalc+""); // boolean properties.setProperty(prefix+"sky_highest_min", this.sky_highest_min+""); // double properties.setProperty(prefix+"sky_highest_min", this.sky_highest_min+""); // double properties.setProperty(prefix+"cold_frac", this.cold_frac+""); // double properties.setProperty(prefix+"cold_frac", this.cold_frac+""); // double properties.setProperty(prefix+"hot_frac", this.hot_frac+""); // double properties.setProperty(prefix+"hot_frac", this.hot_frac+""); // double properties.setProperty(prefix+"cold_scale", this.cold_scale+""); // double properties.setProperty(prefix+"cold_scale", this.cold_scale+""); // double properties.setProperty(prefix+"sky_seed", this.sky_seed+""); // double properties.setProperty(prefix+"sky_seed", this.sky_seed+""); // double properties.setProperty(prefix+"lma_seed", this.lma_seed+""); // double properties.setProperty(prefix+"lma_seed", this.lma_seed+""); // double properties.setProperty(prefix+"seed_temp", this.seed_temp+""); // double properties.setProperty(prefix+"sky_shrink", this.sky_shrink+""); // int properties.setProperty(prefix+"sky_shrink", this.sky_shrink+""); // int properties.setProperty(prefix+"seed_rows", this.seed_rows+""); // int properties.setProperty(prefix+"seed_rows", this.seed_rows+""); // int properties.setProperty(prefix+"max_disparity", this.max_disparity+""); // double properties.setProperty(prefix+"max_disparity_strength",this.max_disparity_strength+"");// double properties.setProperty(prefix+"sky_lim", this.sky_lim+""); // double properties.setProperty(prefix+"sky_lim", this.sky_lim+""); // double properties.setProperty(prefix+"lim_temp", this.lim_temp+""); // double properties.setProperty(prefix+"sky_expand_extra", this.sky_expand_extra+""); // int properties.setProperty(prefix+"sky_expand_extra", this.sky_expand_extra+""); // int properties.setProperty(prefix+"sky_bottleneck", this.sky_bottleneck+""); // int properties.setProperty(prefix+"sky_bottleneck", this.sky_bottleneck+""); // int properties.setProperty(prefix+"sky_reexpand_extra", this.sky_reexpand_extra+""); // int properties.setProperty(prefix+"min_strength", this.min_strength+""); // double properties.setProperty(prefix+"min_strength", this.min_strength+""); // double properties.setProperty(prefix+"lowest_sky_row", this.lowest_sky_row+""); // int properties.setProperty(prefix+"lowest_sky_row", this.lowest_sky_row+""); // int properties.setProperty(prefix+"sky_bottom_override", this.sky_bottom_override+""); // double properties.setProperty(prefix+"sky_bottom_override", this.sky_bottom_override+""); // double Loading @@ -1226,6 +1264,8 @@ public class IntersceneMatchParameters { properties.setProperty(prefix+"disp_boost_diff", this.disp_boost_diff+""); // int properties.setProperty(prefix+"disp_boost_diff", this.disp_boost_diff+""); // int properties.setProperty(prefix+"disp_boost_neibs", this.disp_boost_neibs+""); // double properties.setProperty(prefix+"disp_boost_neibs", this.disp_boost_neibs+""); // double properties.setProperty(prefix+"disp_boost_amount", this.disp_boost_amount+""); // double properties.setProperty(prefix+"disp_boost_amount", this.disp_boost_amount+""); // double properties.setProperty(prefix+"scale_combo_strength", this.scale_combo_strength+""); // double properties.setProperty(prefix+"save_debug_images", this.save_debug_images+""); // boolean properties.setProperty(prefix+"margin", this.margin+""); // int properties.setProperty(prefix+"margin", this.margin+""); // int properties.setProperty(prefix+"sensor_mask_inter", this.sensor_mask_inter+""); // int properties.setProperty(prefix+"sensor_mask_inter", this.sensor_mask_inter+""); // int Loading Loading @@ -1441,17 +1481,25 @@ public class IntersceneMatchParameters { if (properties.getProperty(prefix+"strong_strength")!=null) this.strong_strength=Double.parseDouble(properties.getProperty(prefix+"strong_strength")); if (properties.getProperty(prefix+"strong_strength")!=null) this.strong_strength=Double.parseDouble(properties.getProperty(prefix+"strong_strength")); if (properties.getProperty(prefix+"weak_strength")!=null) this.weak_strength=Double.parseDouble(properties.getProperty(prefix+"weak_strength")); if (properties.getProperty(prefix+"weak_strength")!=null) this.weak_strength=Double.parseDouble(properties.getProperty(prefix+"weak_strength")); if (properties.getProperty(prefix+"sky_recalc")!=null) this.sky_recalc=Boolean.parseBoolean(properties.getProperty(prefix+"sky_recalc")); if (properties.getProperty(prefix+"sky_highest_min")!=null) this.sky_highest_min=Double.parseDouble(properties.getProperty(prefix+"sky_highest_min")); if (properties.getProperty(prefix+"sky_highest_min")!=null) this.sky_highest_min=Double.parseDouble(properties.getProperty(prefix+"sky_highest_min")); if (properties.getProperty(prefix+"cold_frac")!=null) this.cold_frac=Double.parseDouble(properties.getProperty(prefix+"cold_frac")); if (properties.getProperty(prefix+"cold_frac")!=null) this.cold_frac=Double.parseDouble(properties.getProperty(prefix+"cold_frac")); if (properties.getProperty(prefix+"hot_frac")!=null) this.hot_frac=Double.parseDouble(properties.getProperty(prefix+"hot_frac")); if (properties.getProperty(prefix+"hot_frac")!=null) this.hot_frac=Double.parseDouble(properties.getProperty(prefix+"hot_frac")); if (properties.getProperty(prefix+"cold_scale")!=null) this.cold_scale=Double.parseDouble(properties.getProperty(prefix+"cold_scale")); if (properties.getProperty(prefix+"cold_scale")!=null) this.cold_scale=Double.parseDouble(properties.getProperty(prefix+"cold_scale")); if (properties.getProperty(prefix+"sky_seed")!=null) this.sky_seed=Double.parseDouble(properties.getProperty(prefix+"sky_seed")); if (properties.getProperty(prefix+"sky_seed")!=null) this.sky_seed=Double.parseDouble(properties.getProperty(prefix+"sky_seed")); if (properties.getProperty(prefix+"lma_seed")!=null) this.lma_seed=Double.parseDouble(properties.getProperty(prefix+"lma_seed")); if (properties.getProperty(prefix+"lma_seed")!=null) this.lma_seed=Double.parseDouble(properties.getProperty(prefix+"lma_seed")); if (properties.getProperty(prefix+"seed_temp")!=null) this.seed_temp=Double.parseDouble(properties.getProperty(prefix+"seed_temp")); if (properties.getProperty(prefix+"sky_shrink")!=null) this.sky_shrink=Integer.parseInt(properties.getProperty(prefix+"sky_shrink")); if (properties.getProperty(prefix+"sky_shrink")!=null) this.sky_shrink=Integer.parseInt(properties.getProperty(prefix+"sky_shrink")); if (properties.getProperty(prefix+"seed_rows")!=null) this.seed_rows=Integer.parseInt(properties.getProperty(prefix+"seed_rows")); if (properties.getProperty(prefix+"seed_rows")!=null) this.seed_rows=Integer.parseInt(properties.getProperty(prefix+"seed_rows")); if (properties.getProperty(prefix+"max_disparity")!=null) this.max_disparity=Double.parseDouble(properties.getProperty(prefix+"max_disparity")); if (properties.getProperty(prefix+"max_disparity_strength")!=null)this.max_disparity_strength=Double.parseDouble(properties.getProperty(prefix+"max_disparity_strength")); if (properties.getProperty(prefix+"sky_lim")!=null) this.sky_lim=Double.parseDouble(properties.getProperty(prefix+"sky_lim")); if (properties.getProperty(prefix+"sky_lim")!=null) this.sky_lim=Double.parseDouble(properties.getProperty(prefix+"sky_lim")); if (properties.getProperty(prefix+"lim_temp")!=null) this.lim_temp=Double.parseDouble(properties.getProperty(prefix+"lim_temp")); if (properties.getProperty(prefix+"sky_expand_extra")!=null) this.sky_expand_extra=Integer.parseInt(properties.getProperty(prefix+"sky_expand_extra")); if (properties.getProperty(prefix+"sky_expand_extra")!=null) this.sky_expand_extra=Integer.parseInt(properties.getProperty(prefix+"sky_expand_extra")); if (properties.getProperty(prefix+"sky_bottleneck")!=null) this.sky_bottleneck=Integer.parseInt(properties.getProperty(prefix+"sky_bottleneck")); if (properties.getProperty(prefix+"sky_bottleneck")!=null) this.sky_bottleneck=Integer.parseInt(properties.getProperty(prefix+"sky_bottleneck")); if (properties.getProperty(prefix+"sky_reexpand_extra")!=null) this.sky_reexpand_extra=Integer.parseInt(properties.getProperty(prefix+"sky_reexpand_extra")); if (properties.getProperty(prefix+"min_strength")!=null) this.min_strength=Double.parseDouble(properties.getProperty(prefix+"min_strength")); if (properties.getProperty(prefix+"min_strength")!=null) this.min_strength=Double.parseDouble(properties.getProperty(prefix+"min_strength")); if (properties.getProperty(prefix+"lowest_sky_row")!=null) this.lowest_sky_row=Integer.parseInt(properties.getProperty(prefix+"lowest_sky_row")); if (properties.getProperty(prefix+"lowest_sky_row")!=null) this.lowest_sky_row=Integer.parseInt(properties.getProperty(prefix+"lowest_sky_row")); if (properties.getProperty(prefix+"sky_bottom_override")!=null) this.sky_bottom_override=Double.parseDouble(properties.getProperty(prefix+"sky_bottom_override")); if (properties.getProperty(prefix+"sky_bottom_override")!=null) this.sky_bottom_override=Double.parseDouble(properties.getProperty(prefix+"sky_bottom_override")); Loading @@ -1461,6 +1509,8 @@ public class IntersceneMatchParameters { if (properties.getProperty(prefix+"disp_boost_diff")!=null) this.disp_boost_diff=Double.parseDouble(properties.getProperty(prefix+"disp_boost_diff")); if (properties.getProperty(prefix+"disp_boost_diff")!=null) this.disp_boost_diff=Double.parseDouble(properties.getProperty(prefix+"disp_boost_diff")); if (properties.getProperty(prefix+"disp_boost_neibs")!=null) this.disp_boost_neibs=Integer.parseInt(properties.getProperty(prefix+"disp_boost_neibs")); if (properties.getProperty(prefix+"disp_boost_neibs")!=null) this.disp_boost_neibs=Integer.parseInt(properties.getProperty(prefix+"disp_boost_neibs")); if (properties.getProperty(prefix+"disp_boost_amount")!=null) this.disp_boost_amount=Double.parseDouble(properties.getProperty(prefix+"disp_boost_amount")); if (properties.getProperty(prefix+"disp_boost_amount")!=null) this.disp_boost_amount=Double.parseDouble(properties.getProperty(prefix+"disp_boost_amount")); if (properties.getProperty(prefix+"scale_combo_strength")!=null) this.scale_combo_strength=Double.parseDouble(properties.getProperty(prefix+"scale_combo_strength")); if (properties.getProperty(prefix+"save_debug_images")!=null) this.save_debug_images=Boolean.parseBoolean(properties.getProperty(prefix+"save_debug_images")); if (properties.getProperty(prefix+"margin")!=null) this.margin=Integer.parseInt(properties.getProperty(prefix+"margin")); if (properties.getProperty(prefix+"margin")!=null) this.margin=Integer.parseInt(properties.getProperty(prefix+"margin")); if (properties.getProperty(prefix+"sensor_mask_inter")!=null) this.sensor_mask_inter=Integer.parseInt(properties.getProperty(prefix+"sensor_mask_inter")); if (properties.getProperty(prefix+"sensor_mask_inter")!=null) this.sensor_mask_inter=Integer.parseInt(properties.getProperty(prefix+"sensor_mask_inter")); Loading Loading @@ -1694,17 +1744,23 @@ public class IntersceneMatchParameters { imp.strong_strength = this.strong_strength; imp.strong_strength = this.strong_strength; imp.weak_strength = this.weak_strength; imp.weak_strength = this.weak_strength; imp.sky_recalc = this.sky_recalc; imp.sky_highest_min = this.sky_highest_min; imp.sky_highest_min = this.sky_highest_min; imp.cold_frac = this.cold_frac; imp.cold_frac = this.cold_frac; imp.hot_frac = this.hot_frac; imp.hot_frac = this.hot_frac; imp.cold_scale = this.cold_scale; imp.cold_scale = this.cold_scale; imp.sky_seed = this.sky_seed; imp.sky_seed = this.sky_seed; imp.lma_seed = this.lma_seed; imp.lma_seed = this.lma_seed; imp.seed_temp = this.seed_temp; imp.sky_shrink = this.sky_shrink; imp.sky_shrink = this.sky_shrink; imp.seed_rows = this.seed_rows; imp.seed_rows = this.seed_rows; imp.max_disparity = this.max_disparity; imp.max_disparity_strength= this.max_disparity_strength; imp.sky_lim = this.sky_lim; imp.sky_lim = this.sky_lim; imp.lim_temp = this.lim_temp; imp.sky_expand_extra = this.sky_expand_extra; imp.sky_expand_extra = this.sky_expand_extra; imp.sky_bottleneck = this.sky_bottleneck; imp.sky_bottleneck = this.sky_bottleneck; imp.sky_reexpand_extra = this.sky_reexpand_extra; imp.min_strength = this.min_strength; imp.min_strength = this.min_strength; imp.lowest_sky_row = this.lowest_sky_row; imp.lowest_sky_row = this.lowest_sky_row; imp.sky_bottom_override = this.sky_bottom_override; imp.sky_bottom_override = this.sky_bottom_override; Loading @@ -1714,6 +1770,8 @@ public class IntersceneMatchParameters { imp.disp_boost_diff = this.disp_boost_diff; imp.disp_boost_diff = this.disp_boost_diff; imp.disp_boost_neibs = this.disp_boost_neibs; imp.disp_boost_neibs = this.disp_boost_neibs; imp.disp_boost_amount = this.disp_boost_amount; imp.disp_boost_amount = this.disp_boost_amount; imp.scale_combo_strength = this.scale_combo_strength; imp.save_debug_images = this.save_debug_images; imp.margin = this.margin; imp.margin = this.margin; imp.sensor_mask_inter = this.sensor_mask_inter; imp.sensor_mask_inter = this.sensor_mask_inter; Loading Loading
src/main/java/com/elphel/imagej/cameras/CLTParameters.java +14 −1 Original line number Original line Diff line number Diff line Loading @@ -385,6 +385,7 @@ public class CLTParameters { public double photo_offs = 21946; // weighted average offset target value, if photo_offs_set (and not photo_offs_balance) public double photo_offs = 21946; // weighted average offset target value, if photo_offs_set (and not photo_offs_balance) public boolean photo_debug = false;// Generate images and text public boolean photo_debug = false;// Generate images and text public boolean photo_each_debug = false;// Debug after Blue Sky public double tex_disp_adiffo = 0.10; // 0.35; // 0.3; disparity absolute tolerance to connect in ortho directions public double tex_disp_adiffo = 0.10; // 0.35; // 0.3; disparity absolute tolerance to connect in ortho directions public double tex_disp_rdiffo = 0.08; // 0.12; // 0.1; disparity relative tolerance to connect in ortho directions public double tex_disp_rdiffo = 0.08; // 0.12; // 0.1; disparity relative tolerance to connect in ortho directions Loading Loading @@ -448,6 +449,8 @@ public class CLTParameters { public double maxZ = 20000; // maximal distance to far object public double maxZ = 20000; // maximal distance to far object public boolean limitZ = true; // limit Z, if false - remove triangle public boolean limitZ = true; // limit Z, if false - remove triangle public double infinityDistance = 10000; // Distance to generate backdrop (0 - use regular backdrop) public double infinityDistance = 10000; // Distance to generate backdrop (0 - use regular backdrop) public double min_from_inf = 500; // farthest non-infinity closer than infinity public int min_bgnd_tiles = 10; // Minimal number of background tiles to generate background public int min_bgnd_tiles = 10; // Minimal number of background tiles to generate background public boolean gltf_emissive = false; // true; // Use emissive textures public boolean gltf_emissive = false; // true; // Use emissive textures Loading Loading @@ -1487,6 +1490,7 @@ public class CLTParameters { properties.setProperty(prefix+"photo_offs_set", this.photo_offs_set+""); // int properties.setProperty(prefix+"photo_offs_set", this.photo_offs_set+""); // int properties.setProperty(prefix+"photo_offs", this.photo_offs+""); // double properties.setProperty(prefix+"photo_offs", this.photo_offs+""); // double properties.setProperty(prefix+"photo_debug", this.photo_debug+""); // boolean properties.setProperty(prefix+"photo_debug", this.photo_debug+""); // boolean properties.setProperty(prefix+"photo_each_debug", this.photo_each_debug+""); // boolean properties.setProperty(prefix+"tex_disp_adiffo", this.tex_disp_adiffo+""); // double properties.setProperty(prefix+"tex_disp_adiffo", this.tex_disp_adiffo+""); // double properties.setProperty(prefix+"tex_disp_rdiffo", this.tex_disp_rdiffo+""); // double properties.setProperty(prefix+"tex_disp_rdiffo", this.tex_disp_rdiffo+""); // double Loading Loading @@ -1551,6 +1555,7 @@ public class CLTParameters { properties.setProperty(prefix+"limitZ", this.limitZ+""); properties.setProperty(prefix+"limitZ", this.limitZ+""); properties.setProperty(prefix+"infinityDistance", this.infinityDistance +""); properties.setProperty(prefix+"infinityDistance", this.infinityDistance +""); properties.setProperty(prefix+"min_from_inf", this.min_from_inf +""); properties.setProperty(prefix+"min_bgnd_tiles", this.min_bgnd_tiles+""); properties.setProperty(prefix+"min_bgnd_tiles", this.min_bgnd_tiles+""); properties.setProperty(prefix+"gltf_emissive", this.gltf_emissive+""); properties.setProperty(prefix+"gltf_emissive", this.gltf_emissive+""); Loading Loading @@ -2467,6 +2472,7 @@ public class CLTParameters { if (properties.getProperty(prefix+"photo_offs_set")!=null) this.photo_offs_set=Integer.parseInt(properties.getProperty(prefix+"photo_offs_set")); if (properties.getProperty(prefix+"photo_offs_set")!=null) this.photo_offs_set=Integer.parseInt(properties.getProperty(prefix+"photo_offs_set")); if (properties.getProperty(prefix+"photo_offs")!=null) this.photo_offs=Double.parseDouble(properties.getProperty(prefix+"photo_offs")); if (properties.getProperty(prefix+"photo_offs")!=null) this.photo_offs=Double.parseDouble(properties.getProperty(prefix+"photo_offs")); if (properties.getProperty(prefix+"photo_debug")!=null) this.photo_debug=Boolean.parseBoolean(properties.getProperty(prefix+"photo_debug")); if (properties.getProperty(prefix+"photo_debug")!=null) this.photo_debug=Boolean.parseBoolean(properties.getProperty(prefix+"photo_debug")); if (properties.getProperty(prefix+"photo_each_debug")!=null) this.photo_each_debug=Boolean.parseBoolean(properties.getProperty(prefix+"photo_each_debug")); if (properties.getProperty(prefix+"tex_disp_adiffo")!=null) this.tex_disp_adiffo=Double.parseDouble(properties.getProperty(prefix+"tex_disp_adiffo")); if (properties.getProperty(prefix+"tex_disp_adiffo")!=null) this.tex_disp_adiffo=Double.parseDouble(properties.getProperty(prefix+"tex_disp_adiffo")); if (properties.getProperty(prefix+"tex_disp_rdiffo")!=null) this.tex_disp_rdiffo=Double.parseDouble(properties.getProperty(prefix+"tex_disp_rdiffo")); if (properties.getProperty(prefix+"tex_disp_rdiffo")!=null) this.tex_disp_rdiffo=Double.parseDouble(properties.getProperty(prefix+"tex_disp_rdiffo")); Loading Loading @@ -2530,6 +2536,7 @@ public class CLTParameters { if (properties.getProperty(prefix+"limitZ")!=null) this.limitZ=Boolean.parseBoolean(properties.getProperty(prefix+"limitZ")); if (properties.getProperty(prefix+"limitZ")!=null) this.limitZ=Boolean.parseBoolean(properties.getProperty(prefix+"limitZ")); if (properties.getProperty(prefix+"infinityDistance")!=null) this.infinityDistance=Double.parseDouble(properties.getProperty(prefix+"infinityDistance")); if (properties.getProperty(prefix+"infinityDistance")!=null) this.infinityDistance=Double.parseDouble(properties.getProperty(prefix+"infinityDistance")); if (properties.getProperty(prefix+"min_from_inf")!=null) this.min_from_inf=Double.parseDouble(properties.getProperty(prefix+"min_from_inf")); if (properties.getProperty(prefix+"min_bgnd_tiles")!=null) this.min_bgnd_tiles=Integer.parseInt(properties.getProperty(prefix+"min_bgnd_tiles")); if (properties.getProperty(prefix+"min_bgnd_tiles")!=null) this.min_bgnd_tiles=Integer.parseInt(properties.getProperty(prefix+"min_bgnd_tiles")); if (properties.getProperty(prefix+"gltf_emissive")!=null) this.gltf_emissive=Boolean.parseBoolean(properties.getProperty(prefix+"gltf_emissive")); if (properties.getProperty(prefix+"gltf_emissive")!=null) this.gltf_emissive=Boolean.parseBoolean(properties.getProperty(prefix+"gltf_emissive")); Loading Loading @@ -3600,7 +3607,9 @@ public class CLTParameters { "Target weighted (by scales) average offset."); "Target weighted (by scales) average offset."); gd.addCheckbox ("Debug photometric calibration", this.photo_debug, gd.addCheckbox ("Debug photometric calibration", this.photo_debug, "Generate debug images an text output."); "Generate debug images an text output."); gd.addCheckbox ("Debug photometric calibration 'each'", this.photo_each_debug, "Generate debug images after Blue Sky."); // gd.addTab ("3D", "3D reconstruction"); gd.addTab ("3D", "3D reconstruction"); gd.addMessage ("Meshes clustering for texture generation"); gd.addMessage ("Meshes clustering for texture generation"); gd.addNumericField("Ortho tolerance absolute", this.tex_disp_adiffo, 5,7,"pix", gd.addNumericField("Ortho tolerance absolute", this.tex_disp_adiffo, 5,7,"pix", Loading Loading @@ -3726,6 +3735,8 @@ public class CLTParameters { gd.addNumericField("Distance to a backdrop", this.infinityDistance,8,8,"m", gd.addNumericField("Distance to a backdrop", this.infinityDistance,8,8,"m", "Distance to generate backdrop (0 - use regular backdrop)."); "Distance to generate backdrop (0 - use regular backdrop)."); gd.addNumericField("Minimal distance from backdrop", this.min_from_inf,8,8,"m", "Minimal distance of the fartest object from backdrop to be resolved."); gd.addNumericField("Minimal background tiles", this.min_bgnd_tiles, 0,4,"", gd.addNumericField("Minimal background tiles", this.min_bgnd_tiles, 0,4,"", "Minimal number of background tiles to generate background."); "Minimal number of background tiles to generate background."); Loading Loading @@ -4827,6 +4838,7 @@ public class CLTParameters { this.photo_offs_set = (int) gd.getNextNumber(); this.photo_offs_set = (int) gd.getNextNumber(); this.photo_offs = gd.getNextNumber(); this.photo_offs = gd.getNextNumber(); this.photo_debug = gd.getNextBoolean(); this.photo_debug = gd.getNextBoolean(); this.photo_each_debug = gd.getNextBoolean(); this.tex_disp_adiffo = gd.getNextNumber(); this.tex_disp_adiffo = gd.getNextNumber(); this.tex_disp_rdiffo = gd.getNextNumber(); this.tex_disp_rdiffo = gd.getNextNumber(); Loading Loading @@ -4891,6 +4903,7 @@ public class CLTParameters { this.limitZ= gd.getNextBoolean(); this.limitZ= gd.getNextBoolean(); this.infinityDistance= gd.getNextNumber(); this.infinityDistance= gd.getNextNumber(); this.min_from_inf= gd.getNextNumber(); this.min_bgnd_tiles= (int) gd.getNextNumber(); this.min_bgnd_tiles= (int) gd.getNextNumber(); this.gltf_emissive= gd.getNextBoolean(); this.gltf_emissive= gd.getNextBoolean(); Loading
src/main/java/com/elphel/imagej/tileprocessor/IntersceneMatchParameters.java +66 −8 Original line number Original line Diff line number Diff line Loading @@ -136,28 +136,37 @@ public class IntersceneMatchParameters { //------------ //------------ // Sky detection/filtering // Sky detection/filtering public boolean sky_recalc = false; // force blue sky recalculation even if it exists public double sky_highest_min = -50; // lowest absolute value should not be higher (requires photometric) public double sky_highest_min = -50; // lowest absolute value should not be higher (requires photometric) public double cold_frac = 0.005; // this and lower will scale fom by cold_scale public double cold_frac = 0.005; // this and lower will scale fom by cold_scale public double hot_frac = 0.9; // this and above will scale fom by 1.0 public double hot_frac = 0.9; // this and above will scale fom by 1.0 public double cold_scale = 0.2; // <=1.0. 1.0 - disables temperature dependence public double cold_scale = 0.2; // <=1.0. 1.0 - disables temperature dependence public double sky_seed = 5.0; // start with product of strength by diff_second below this public double sky_seed = 5.0; // 5.0 start with product of strength by diff_second below this public double lma_seed = 2.0; // seed - disparity_lma limit double sky_lim = 15.0; // then expand to product of strength by diff_second below this public double lma_seed = 2.0; // seed - disparity_lma limit double sky_lim = 15.0; // then expand to product of strength by diff_second below this public double seed_temp = 0.5; // seed colder that this point between min and max temp public int sky_shrink = 2; public int sky_shrink = 2; public int seed_rows = 5; // sky should appear in this top rows public int seed_rows = 5; // sky should appear in this top rows public double max_disparity = 0.3; // maximal strong sky disparity public double max_disparity_strength = 0.2; // maximal strength of high disparity sky public double sky_lim = 15.0; // then expand to product of strength by diff_second below this public double sky_lim = 15.0; // then expand to product of strength by diff_second below this public double lim_temp = 0.5; // sky colder that this point between min and max temp public int sky_expand_extra = 0; // 1? public int sky_expand_extra = 0; // 1? public int sky_bottleneck = 5; public int sky_bottleneck = 5; public int sky_reexpand_extra = 9;// re-expand after bottleneck in addition to how it was shrank public double min_strength = 0.08; public double min_strength = 0.08; public int lowest_sky_row = 50; // appears that low - invalid, remove completely public int lowest_sky_row = 50; // appears that low - invalid, remove completely public double sky_bottom_override = -300; // maximal average sky value to override lowest_sky_row test public double sky_bottom_override = -300; // maximal average sky value to override lowest_sky_row test public int sky_override_shrink = 10; // shrink detected sky before finding hottest tile there public int sky_override_shrink = 6; // shrink detected sky before finding hottest tile there // Increase fom if there are enough LMA-defined similar tiles around // Increase fom if there are enough LMA-defined similar tiles around public double disp_boost_min = 0.5; public double disp_boost_min = 0.5; public double disp_boost_diff = 0.35; public double disp_boost_diff = 0.35; public int disp_boost_neibs = 2; public int disp_boost_neibs = 2; public double disp_boost_amount = 2.0; public double disp_boost_amount = 2.0; public double scale_combo_strength = 0.4; // reduce strength when it comes from combo, not DSI-MAIN public boolean save_debug_images = true; // Save blue sky debug images in model directory // Some "AGC" to adjust how much to discard // Some "AGC" to adjust how much to discard public int margin = 1; // do not use tiles if their centers are closer to the image edge public int margin = 1; // do not use tiles if their centers are closer to the image edge Loading Loading @@ -519,6 +528,8 @@ public class IntersceneMatchParameters { gd.addTab("Sky","Featureless sky areas detection and filtering (LWIR only)"); gd.addTab("Sky","Featureless sky areas detection and filtering (LWIR only)"); gd.addMessage ("Temperature-related filtering (requires photometric calibration)"); gd.addMessage ("Temperature-related filtering (requires photometric calibration)"); gd.addCheckbox ("Force blue sky recalculation", this.sky_recalc, "Recalculate blue sky even if it already exists."); gd.addNumericField("High limit of the scene coldest tile", this.sky_highest_min, 5,7,"", gd.addNumericField("High limit of the scene coldest tile", this.sky_highest_min, 5,7,"", "Sky is normally cold. If the (globally offset) minimal scene absolutre pixel value is above - no sky in the scene (debug images still show it)"); "Sky is normally cold. If the (globally offset) minimal scene absolutre pixel value is above - no sky in the scene (debug images still show it)"); gd.addNumericField("Cold level fraction", this.cold_frac, 5,7,"", gd.addNumericField("Cold level fraction", this.cold_frac, 5,7,"", Loading @@ -533,17 +544,27 @@ public class IntersceneMatchParameters { "at infinity and 3 above parameters"); "at infinity and 3 above parameters"); gd.addNumericField("Seed maximal disparity", this.lma_seed, 5,7,"pix", gd.addNumericField("Seed maximal disparity", this.lma_seed, 5,7,"pix", "Seed tiles should not have LMA-found disparity above this"); "Seed tiles should not have LMA-found disparity above this"); gd.addNumericField("Seed maximal relative temperature", this.seed_temp, 5,7,"", "Seed tiles should be colder than this point between min and max scene temperature."); gd.addNumericField("Shrink sky seed", this.sky_shrink, 0,3,"", gd.addNumericField("Shrink sky seed", this.sky_shrink, 0,3,"", "Shrink sky seed tiles to eliminate too small (false) clusters. One shrinks in hor/vert, 2 - with diagonals, ..."); "Shrink sky seed tiles to eliminate too small (false) clusters. One shrinks in hor/vert, 2 - with diagonals, ..."); gd.addNumericField("Seed rows", this.seed_rows, 0,3,"", gd.addNumericField("Seed rows", this.seed_rows, 0,3,"", "Sky is above and normally should appear in the top image rows. Applies after shrinking."); "Sky is above and normally should appear in the top image rows. Applies after shrinking."); gd.addMessage ("Expand seed tiles"); gd.addMessage ("Expand seed tiles"); gd.addNumericField("Maximal strong sky disparity", this.max_disparity, 5,7,"", "Maximal disparity of the sky tiles if they are strong enough."); gd.addNumericField("Strength of the high disparity sky", this.max_disparity_strength, 5,7,"", "Required tile strenghth to be considered strong to test against maximal disparity."); gd.addNumericField("Expand FOM limit", this.sky_lim, 5,7,"", gd.addNumericField("Expand FOM limit", this.sky_lim, 5,7,"", "Expand while FOM is below this value (usually to a high-contrast skyline)."); "Expand while FOM is below this value (usually to a high-contrast skyline)."); gd.addNumericField("Sky maximal relative temperature", this.lim_temp, 5,7,"", "Sky tiles should be colder than this point between min and max scene temperature."); gd.addNumericField("Expand extra", this.sky_expand_extra, 0,3,"", gd.addNumericField("Expand extra", this.sky_expand_extra, 0,3,"", "Additionally expand sky area after reaching threshold in the previous step."); "Additionally expand sky area after reaching threshold in the previous step."); gd.addNumericField("Bottleneck width", this.sky_bottleneck, 0,3,"", gd.addNumericField("Bottleneck width", this.sky_bottleneck, 0,3,"", "Shrink/reexpand from the seed detected sky to prevent \"leaks\" through narrow gaps in the high-contrast sky limit."); "Shrink/reexpand from the seed detected sky to prevent \"leaks\" through narrow gaps in the high-contrast sky limit."); gd.addNumericField("Re-expand extra after bottleneck", this.sky_reexpand_extra, 0,3,"", "Additionally expand sky area after bottleneck shrink in excess of re-expanding by the same amount as shrank."); gd.addNumericField("Modify strength to be at least this", this.min_strength, 5,7,"", gd.addNumericField("Modify strength to be at least this", this.min_strength, 5,7,"", "Input strength has some with zero values resulting in zero FOM. Make them at least this."); "Input strength has some with zero values resulting in zero FOM. Make them at least this."); gd.addNumericField("Lowest sky row", this.lowest_sky_row, 0,3,"", gd.addNumericField("Lowest sky row", this.lowest_sky_row, 0,3,"", Loading @@ -562,9 +583,12 @@ public class IntersceneMatchParameters { "Number of neighbors (of 8) to have small disparity difference to boost FOM."); "Number of neighbors (of 8) to have small disparity difference to boost FOM."); gd.addNumericField("Boost amount", this.disp_boost_amount, 5,7,"x", gd.addNumericField("Boost amount", this.disp_boost_amount, 5,7,"x", "Multiply FOM by this value if number of neighbors is exactly minimal. Scale proportional to the total number of neighbors."); "Multiply FOM by this value if number of neighbors is exactly minimal. Scale proportional to the total number of neighbors."); gd.addTab ("Inter-Match", "Parameters for full-resolution scene matching"); gd.addNumericField("Scale if strength is combo, not main", this.scale_combo_strength, 5,7,"x", "Reduce strength when it comes from combo, not DSI-MAIN."); gd.addCheckbox ("Save debug images", this.save_debug_images, "Save debug images for Blue Sky generation in model directory."); gd.addTab ("Inter-Match", "Parameters for full-resolution scene matching"); gd.addMessage ("Interscene match parameters"); gd.addMessage ("Interscene match parameters"); gd.addNumericField("Image margin", this.margin, 0,5,"pix", gd.addNumericField("Image margin", this.margin, 0,5,"pix", "Do not use tiles if their centers are closer to the virtual image edge"); "Do not use tiles if their centers are closer to the virtual image edge"); Loading Loading @@ -924,17 +948,23 @@ public class IntersceneMatchParameters { this.strong_strength = gd.getNextNumber(); this.strong_strength = gd.getNextNumber(); this.weak_strength = gd.getNextNumber(); this.weak_strength = gd.getNextNumber(); this.sky_recalc = gd.getNextBoolean(); this.sky_highest_min = gd.getNextNumber(); this.sky_highest_min = gd.getNextNumber(); this.cold_frac = gd.getNextNumber(); this.cold_frac = gd.getNextNumber(); this.hot_frac = gd.getNextNumber(); this.hot_frac = gd.getNextNumber(); this.cold_scale = gd.getNextNumber(); this.cold_scale = gd.getNextNumber(); this.sky_seed = gd.getNextNumber(); this.sky_seed = gd.getNextNumber(); this.lma_seed = gd.getNextNumber(); this.lma_seed = gd.getNextNumber(); this.seed_temp = gd.getNextNumber(); this.sky_shrink = (int) gd.getNextNumber(); this.sky_shrink = (int) gd.getNextNumber(); this.seed_rows = (int) gd.getNextNumber(); this.seed_rows = (int) gd.getNextNumber(); this.max_disparity = gd.getNextNumber(); this.max_disparity_strength = gd.getNextNumber(); this.sky_lim = gd.getNextNumber(); this.sky_lim = gd.getNextNumber(); this.lim_temp = gd.getNextNumber(); this.sky_expand_extra = (int) gd.getNextNumber(); this.sky_expand_extra = (int) gd.getNextNumber(); this.sky_bottleneck = (int) gd.getNextNumber(); this.sky_bottleneck = (int) gd.getNextNumber(); this.sky_reexpand_extra = (int) gd.getNextNumber(); this.min_strength = gd.getNextNumber(); this.min_strength = gd.getNextNumber(); this.lowest_sky_row = (int) gd.getNextNumber(); this.lowest_sky_row = (int) gd.getNextNumber(); this.sky_bottom_override = gd.getNextNumber(); this.sky_bottom_override = gd.getNextNumber(); Loading @@ -944,6 +974,8 @@ public class IntersceneMatchParameters { this.disp_boost_diff = gd.getNextNumber(); this.disp_boost_diff = gd.getNextNumber(); this.disp_boost_neibs = (int) gd.getNextNumber(); this.disp_boost_neibs = (int) gd.getNextNumber(); this.disp_boost_amount = gd.getNextNumber(); this.disp_boost_amount = gd.getNextNumber(); this.scale_combo_strength = gd.getNextNumber(); this.save_debug_images = gd.getNextBoolean(); this.margin = (int) gd.getNextNumber(); this.margin = (int) gd.getNextNumber(); this.sensor_mask_inter= (int) gd.getNextNumber(); this.sensor_mask_inter= (int) gd.getNextNumber(); Loading Loading @@ -1206,17 +1238,23 @@ public class IntersceneMatchParameters { properties.setProperty(prefix+"strong_strength", this.strong_strength+""); // double properties.setProperty(prefix+"strong_strength", this.strong_strength+""); // double properties.setProperty(prefix+"weak_strength", this.weak_strength+""); // double properties.setProperty(prefix+"weak_strength", this.weak_strength+""); // double properties.setProperty(prefix+"sky_recalc", this.sky_recalc+""); // boolean properties.setProperty(prefix+"sky_highest_min", this.sky_highest_min+""); // double properties.setProperty(prefix+"sky_highest_min", this.sky_highest_min+""); // double properties.setProperty(prefix+"cold_frac", this.cold_frac+""); // double properties.setProperty(prefix+"cold_frac", this.cold_frac+""); // double properties.setProperty(prefix+"hot_frac", this.hot_frac+""); // double properties.setProperty(prefix+"hot_frac", this.hot_frac+""); // double properties.setProperty(prefix+"cold_scale", this.cold_scale+""); // double properties.setProperty(prefix+"cold_scale", this.cold_scale+""); // double properties.setProperty(prefix+"sky_seed", this.sky_seed+""); // double properties.setProperty(prefix+"sky_seed", this.sky_seed+""); // double properties.setProperty(prefix+"lma_seed", this.lma_seed+""); // double properties.setProperty(prefix+"lma_seed", this.lma_seed+""); // double properties.setProperty(prefix+"seed_temp", this.seed_temp+""); // double properties.setProperty(prefix+"sky_shrink", this.sky_shrink+""); // int properties.setProperty(prefix+"sky_shrink", this.sky_shrink+""); // int properties.setProperty(prefix+"seed_rows", this.seed_rows+""); // int properties.setProperty(prefix+"seed_rows", this.seed_rows+""); // int properties.setProperty(prefix+"max_disparity", this.max_disparity+""); // double properties.setProperty(prefix+"max_disparity_strength",this.max_disparity_strength+"");// double properties.setProperty(prefix+"sky_lim", this.sky_lim+""); // double properties.setProperty(prefix+"sky_lim", this.sky_lim+""); // double properties.setProperty(prefix+"lim_temp", this.lim_temp+""); // double properties.setProperty(prefix+"sky_expand_extra", this.sky_expand_extra+""); // int properties.setProperty(prefix+"sky_expand_extra", this.sky_expand_extra+""); // int properties.setProperty(prefix+"sky_bottleneck", this.sky_bottleneck+""); // int properties.setProperty(prefix+"sky_bottleneck", this.sky_bottleneck+""); // int properties.setProperty(prefix+"sky_reexpand_extra", this.sky_reexpand_extra+""); // int properties.setProperty(prefix+"min_strength", this.min_strength+""); // double properties.setProperty(prefix+"min_strength", this.min_strength+""); // double properties.setProperty(prefix+"lowest_sky_row", this.lowest_sky_row+""); // int properties.setProperty(prefix+"lowest_sky_row", this.lowest_sky_row+""); // int properties.setProperty(prefix+"sky_bottom_override", this.sky_bottom_override+""); // double properties.setProperty(prefix+"sky_bottom_override", this.sky_bottom_override+""); // double Loading @@ -1226,6 +1264,8 @@ public class IntersceneMatchParameters { properties.setProperty(prefix+"disp_boost_diff", this.disp_boost_diff+""); // int properties.setProperty(prefix+"disp_boost_diff", this.disp_boost_diff+""); // int properties.setProperty(prefix+"disp_boost_neibs", this.disp_boost_neibs+""); // double properties.setProperty(prefix+"disp_boost_neibs", this.disp_boost_neibs+""); // double properties.setProperty(prefix+"disp_boost_amount", this.disp_boost_amount+""); // double properties.setProperty(prefix+"disp_boost_amount", this.disp_boost_amount+""); // double properties.setProperty(prefix+"scale_combo_strength", this.scale_combo_strength+""); // double properties.setProperty(prefix+"save_debug_images", this.save_debug_images+""); // boolean properties.setProperty(prefix+"margin", this.margin+""); // int properties.setProperty(prefix+"margin", this.margin+""); // int properties.setProperty(prefix+"sensor_mask_inter", this.sensor_mask_inter+""); // int properties.setProperty(prefix+"sensor_mask_inter", this.sensor_mask_inter+""); // int Loading Loading @@ -1441,17 +1481,25 @@ public class IntersceneMatchParameters { if (properties.getProperty(prefix+"strong_strength")!=null) this.strong_strength=Double.parseDouble(properties.getProperty(prefix+"strong_strength")); if (properties.getProperty(prefix+"strong_strength")!=null) this.strong_strength=Double.parseDouble(properties.getProperty(prefix+"strong_strength")); if (properties.getProperty(prefix+"weak_strength")!=null) this.weak_strength=Double.parseDouble(properties.getProperty(prefix+"weak_strength")); if (properties.getProperty(prefix+"weak_strength")!=null) this.weak_strength=Double.parseDouble(properties.getProperty(prefix+"weak_strength")); if (properties.getProperty(prefix+"sky_recalc")!=null) this.sky_recalc=Boolean.parseBoolean(properties.getProperty(prefix+"sky_recalc")); if (properties.getProperty(prefix+"sky_highest_min")!=null) this.sky_highest_min=Double.parseDouble(properties.getProperty(prefix+"sky_highest_min")); if (properties.getProperty(prefix+"sky_highest_min")!=null) this.sky_highest_min=Double.parseDouble(properties.getProperty(prefix+"sky_highest_min")); if (properties.getProperty(prefix+"cold_frac")!=null) this.cold_frac=Double.parseDouble(properties.getProperty(prefix+"cold_frac")); if (properties.getProperty(prefix+"cold_frac")!=null) this.cold_frac=Double.parseDouble(properties.getProperty(prefix+"cold_frac")); if (properties.getProperty(prefix+"hot_frac")!=null) this.hot_frac=Double.parseDouble(properties.getProperty(prefix+"hot_frac")); if (properties.getProperty(prefix+"hot_frac")!=null) this.hot_frac=Double.parseDouble(properties.getProperty(prefix+"hot_frac")); if (properties.getProperty(prefix+"cold_scale")!=null) this.cold_scale=Double.parseDouble(properties.getProperty(prefix+"cold_scale")); if (properties.getProperty(prefix+"cold_scale")!=null) this.cold_scale=Double.parseDouble(properties.getProperty(prefix+"cold_scale")); if (properties.getProperty(prefix+"sky_seed")!=null) this.sky_seed=Double.parseDouble(properties.getProperty(prefix+"sky_seed")); if (properties.getProperty(prefix+"sky_seed")!=null) this.sky_seed=Double.parseDouble(properties.getProperty(prefix+"sky_seed")); if (properties.getProperty(prefix+"lma_seed")!=null) this.lma_seed=Double.parseDouble(properties.getProperty(prefix+"lma_seed")); if (properties.getProperty(prefix+"lma_seed")!=null) this.lma_seed=Double.parseDouble(properties.getProperty(prefix+"lma_seed")); if (properties.getProperty(prefix+"seed_temp")!=null) this.seed_temp=Double.parseDouble(properties.getProperty(prefix+"seed_temp")); if (properties.getProperty(prefix+"sky_shrink")!=null) this.sky_shrink=Integer.parseInt(properties.getProperty(prefix+"sky_shrink")); if (properties.getProperty(prefix+"sky_shrink")!=null) this.sky_shrink=Integer.parseInt(properties.getProperty(prefix+"sky_shrink")); if (properties.getProperty(prefix+"seed_rows")!=null) this.seed_rows=Integer.parseInt(properties.getProperty(prefix+"seed_rows")); if (properties.getProperty(prefix+"seed_rows")!=null) this.seed_rows=Integer.parseInt(properties.getProperty(prefix+"seed_rows")); if (properties.getProperty(prefix+"max_disparity")!=null) this.max_disparity=Double.parseDouble(properties.getProperty(prefix+"max_disparity")); if (properties.getProperty(prefix+"max_disparity_strength")!=null)this.max_disparity_strength=Double.parseDouble(properties.getProperty(prefix+"max_disparity_strength")); if (properties.getProperty(prefix+"sky_lim")!=null) this.sky_lim=Double.parseDouble(properties.getProperty(prefix+"sky_lim")); if (properties.getProperty(prefix+"sky_lim")!=null) this.sky_lim=Double.parseDouble(properties.getProperty(prefix+"sky_lim")); if (properties.getProperty(prefix+"lim_temp")!=null) this.lim_temp=Double.parseDouble(properties.getProperty(prefix+"lim_temp")); if (properties.getProperty(prefix+"sky_expand_extra")!=null) this.sky_expand_extra=Integer.parseInt(properties.getProperty(prefix+"sky_expand_extra")); if (properties.getProperty(prefix+"sky_expand_extra")!=null) this.sky_expand_extra=Integer.parseInt(properties.getProperty(prefix+"sky_expand_extra")); if (properties.getProperty(prefix+"sky_bottleneck")!=null) this.sky_bottleneck=Integer.parseInt(properties.getProperty(prefix+"sky_bottleneck")); if (properties.getProperty(prefix+"sky_bottleneck")!=null) this.sky_bottleneck=Integer.parseInt(properties.getProperty(prefix+"sky_bottleneck")); if (properties.getProperty(prefix+"sky_reexpand_extra")!=null) this.sky_reexpand_extra=Integer.parseInt(properties.getProperty(prefix+"sky_reexpand_extra")); if (properties.getProperty(prefix+"min_strength")!=null) this.min_strength=Double.parseDouble(properties.getProperty(prefix+"min_strength")); if (properties.getProperty(prefix+"min_strength")!=null) this.min_strength=Double.parseDouble(properties.getProperty(prefix+"min_strength")); if (properties.getProperty(prefix+"lowest_sky_row")!=null) this.lowest_sky_row=Integer.parseInt(properties.getProperty(prefix+"lowest_sky_row")); if (properties.getProperty(prefix+"lowest_sky_row")!=null) this.lowest_sky_row=Integer.parseInt(properties.getProperty(prefix+"lowest_sky_row")); if (properties.getProperty(prefix+"sky_bottom_override")!=null) this.sky_bottom_override=Double.parseDouble(properties.getProperty(prefix+"sky_bottom_override")); if (properties.getProperty(prefix+"sky_bottom_override")!=null) this.sky_bottom_override=Double.parseDouble(properties.getProperty(prefix+"sky_bottom_override")); Loading @@ -1461,6 +1509,8 @@ public class IntersceneMatchParameters { if (properties.getProperty(prefix+"disp_boost_diff")!=null) this.disp_boost_diff=Double.parseDouble(properties.getProperty(prefix+"disp_boost_diff")); if (properties.getProperty(prefix+"disp_boost_diff")!=null) this.disp_boost_diff=Double.parseDouble(properties.getProperty(prefix+"disp_boost_diff")); if (properties.getProperty(prefix+"disp_boost_neibs")!=null) this.disp_boost_neibs=Integer.parseInt(properties.getProperty(prefix+"disp_boost_neibs")); if (properties.getProperty(prefix+"disp_boost_neibs")!=null) this.disp_boost_neibs=Integer.parseInt(properties.getProperty(prefix+"disp_boost_neibs")); if (properties.getProperty(prefix+"disp_boost_amount")!=null) this.disp_boost_amount=Double.parseDouble(properties.getProperty(prefix+"disp_boost_amount")); if (properties.getProperty(prefix+"disp_boost_amount")!=null) this.disp_boost_amount=Double.parseDouble(properties.getProperty(prefix+"disp_boost_amount")); if (properties.getProperty(prefix+"scale_combo_strength")!=null) this.scale_combo_strength=Double.parseDouble(properties.getProperty(prefix+"scale_combo_strength")); if (properties.getProperty(prefix+"save_debug_images")!=null) this.save_debug_images=Boolean.parseBoolean(properties.getProperty(prefix+"save_debug_images")); if (properties.getProperty(prefix+"margin")!=null) this.margin=Integer.parseInt(properties.getProperty(prefix+"margin")); if (properties.getProperty(prefix+"margin")!=null) this.margin=Integer.parseInt(properties.getProperty(prefix+"margin")); if (properties.getProperty(prefix+"sensor_mask_inter")!=null) this.sensor_mask_inter=Integer.parseInt(properties.getProperty(prefix+"sensor_mask_inter")); if (properties.getProperty(prefix+"sensor_mask_inter")!=null) this.sensor_mask_inter=Integer.parseInt(properties.getProperty(prefix+"sensor_mask_inter")); Loading Loading @@ -1694,17 +1744,23 @@ public class IntersceneMatchParameters { imp.strong_strength = this.strong_strength; imp.strong_strength = this.strong_strength; imp.weak_strength = this.weak_strength; imp.weak_strength = this.weak_strength; imp.sky_recalc = this.sky_recalc; imp.sky_highest_min = this.sky_highest_min; imp.sky_highest_min = this.sky_highest_min; imp.cold_frac = this.cold_frac; imp.cold_frac = this.cold_frac; imp.hot_frac = this.hot_frac; imp.hot_frac = this.hot_frac; imp.cold_scale = this.cold_scale; imp.cold_scale = this.cold_scale; imp.sky_seed = this.sky_seed; imp.sky_seed = this.sky_seed; imp.lma_seed = this.lma_seed; imp.lma_seed = this.lma_seed; imp.seed_temp = this.seed_temp; imp.sky_shrink = this.sky_shrink; imp.sky_shrink = this.sky_shrink; imp.seed_rows = this.seed_rows; imp.seed_rows = this.seed_rows; imp.max_disparity = this.max_disparity; imp.max_disparity_strength= this.max_disparity_strength; imp.sky_lim = this.sky_lim; imp.sky_lim = this.sky_lim; imp.lim_temp = this.lim_temp; imp.sky_expand_extra = this.sky_expand_extra; imp.sky_expand_extra = this.sky_expand_extra; imp.sky_bottleneck = this.sky_bottleneck; imp.sky_bottleneck = this.sky_bottleneck; imp.sky_reexpand_extra = this.sky_reexpand_extra; imp.min_strength = this.min_strength; imp.min_strength = this.min_strength; imp.lowest_sky_row = this.lowest_sky_row; imp.lowest_sky_row = this.lowest_sky_row; imp.sky_bottom_override = this.sky_bottom_override; imp.sky_bottom_override = this.sky_bottom_override; Loading @@ -1714,6 +1770,8 @@ public class IntersceneMatchParameters { imp.disp_boost_diff = this.disp_boost_diff; imp.disp_boost_diff = this.disp_boost_diff; imp.disp_boost_neibs = this.disp_boost_neibs; imp.disp_boost_neibs = this.disp_boost_neibs; imp.disp_boost_amount = this.disp_boost_amount; imp.disp_boost_amount = this.disp_boost_amount; imp.scale_combo_strength = this.scale_combo_strength; imp.save_debug_images = this.save_debug_images; imp.margin = this.margin; imp.margin = this.margin; imp.sensor_mask_inter = this.sensor_mask_inter; imp.sensor_mask_inter = this.sensor_mask_inter; Loading