Loading src/main/java/EyesisCorrectionParameters.java +60 −8 Original line number Original line Diff line number Diff line Loading @@ -1942,7 +1942,7 @@ public class EyesisCorrectionParameters { public boolean corr_show = false; // Show combined correlations public boolean corr_show = false; // Show combined correlations public boolean corr_mismatch= false; // calculate per-pair X/Y variations of measured correlations public boolean corr_mismatch= false; // calculate per-pair X/Y variations of measured correlations // TODO: what to do if some occlusion is present (only some channels correlate) // TODO: what to do if some occlusion is present (only some channels correlate) public double corr_offset = -1.0; //0.1; // add to pair correlation before multiplying by other pairs (between sum and product) public double corr_offset = 0.1; //0.1; // add to pair correlation before multiplying by other pairs (between sum and product) // negative - add, not mpy // negative - add, not mpy public double corr_red = 0.5; // Red to green correlation weight public double corr_red = 0.5; // Red to green correlation weight public double corr_blue = 0.2; // Blue to green correlation weight public double corr_blue = 0.2; // Blue to green correlation weight Loading Loading @@ -2013,18 +2013,29 @@ public class EyesisCorrectionParameters { // 3d reconstruction // 3d reconstruction public boolean show_textures = true; // show generated textures public boolean show_textures = true; // show generated textures public boolean debug_filters = false;// show intermediate results of filtering public boolean debug_filters = false;// show intermediate results of filtering public double min_smth = 0.5; // 0.25 minimal noise-normalized pixel difference in a channel to suspect something public double min_smth = 0.25; // 0.25 minimal noise-normalized pixel difference in a channel to suspect something public double sure_smth = 2.0; // reliable noise-normalized pixel difference in a channel to have something public double sure_smth = 2.0; // reliable noise-normalized pixel difference in a channel to have something public double bgnd_range = 0.3; // disparity range to be considered background public double bgnd_range = 0.3; // disparity range to be considered background public double other_range = 2.0; // disparity difference from center (provided) disparity to trust public double other_range = 2.0; // disparity difference from center (provided) disparity to trust public double bgnd_sure = 0.02; // minimal strength to be considered definitely background public double bgnd_sure = 0.18; // minimal strength to be considered definitely background public double bgnd_maybe = 0.004; // maximal strength to ignore as non-background public double bgnd_maybe = 0.1; // maximal strength to ignore as non-background // public double bgnd_2diff = 0.005; // maximal strength to ignore as non-background // public double bgnd_2diff = 0.005; // maximal strength to ignore as non-background public int min_clstr_seed = 3; // number of tiles in a cluster to seed (just background?) public int min_clstr_seed = 2; // number of tiles in a cluster to seed (just background?) public int min_clstr_block = 3; // number of tiles in a cluster to block (just non-background?) public int min_clstr_block = 3; // number of tiles in a cluster to block (just non-background?) public int bgnd_grow = 2; // number of tiles to grow (1 - hor/vert, 2 - hor/vert/diagonal) public int bgnd_grow = 2; // number of tiles to grow (1 - hor/vert, 2 - hor/vert/diagonal) // public double ortho_min = 0.09; // minimal strength of hor/vert correlation to be used instead of full 4-pair correlation public double ortho_min_hor = 0.07; // minimal strength of hor correlation to be used instead of full 4-pair correlation - public double ortho_min_vert = 0.15; // minimal strength of vert correlation to be used instead of full 4-pair correlation public double ortho_asym = 1.2; // vert/hor (or hor/vert) strength to be used instead of the full correlation public double ortho_sustain = 0.05; // minimal strength of hor/vert to bridge over public int ortho_run = 3; // minimal run of hor/vert tiles to be considered (at least from one side) public double ortho_minmax = 0.09; // minimal maximal strength in an ortho run public int ortho_bridge = 10; // number of tiles to bridge over hor/vert gaps public double ortho_rms = 0.3; // maximal disparity RMS in a run to replace by average public int ortho_half_length = 4; // convolve hor/vert strength by 3*(2*l+1) kernels to detect multi-tile features public double ortho_mix = 0.5; // Fraction ovf convolved ortho in a mix with raw Loading Loading @@ -2131,10 +2142,20 @@ public class EyesisCorrectionParameters { properties.setProperty(prefix+"other_range", this.other_range +""); properties.setProperty(prefix+"other_range", this.other_range +""); properties.setProperty(prefix+"bgnd_sure", this.bgnd_sure +""); properties.setProperty(prefix+"bgnd_sure", this.bgnd_sure +""); properties.setProperty(prefix+"bgnd_maybe", this.bgnd_maybe +""); properties.setProperty(prefix+"bgnd_maybe", this.bgnd_maybe +""); properties.setProperty(prefix+"min_clstr_seed", this.min_clstr_seed+""); properties.setProperty(prefix+"min_clstr_seed", this.min_clstr_seed+""); properties.setProperty(prefix+"min_clstr_block", this.min_clstr_block+""); properties.setProperty(prefix+"min_clstr_block", this.min_clstr_block+""); properties.setProperty(prefix+"bgnd_grow", this.bgnd_grow+""); properties.setProperty(prefix+"bgnd_grow", this.bgnd_grow+""); properties.setProperty(prefix+"ortho_min_hor", this.ortho_min_hor +""); properties.setProperty(prefix+"ortho_min_vert", this.ortho_min_vert +""); properties.setProperty(prefix+"ortho_asym", this.ortho_asym +""); properties.setProperty(prefix+"ortho_sustain", this.ortho_sustain +""); properties.setProperty(prefix+"ortho_run", this.ortho_run+""); properties.setProperty(prefix+"ortho_minmax", this.ortho_minmax +""); properties.setProperty(prefix+"ortho_bridge", this.ortho_bridge+""); properties.setProperty(prefix+"ortho_rms", this.ortho_rms +""); properties.setProperty(prefix+"ortho_half_length",this.ortho_half_length+""); properties.setProperty(prefix+"ortho_mix", this.ortho_mix +""); } } public void getProperties(String prefix,Properties properties){ public void getProperties(String prefix,Properties properties){ if (properties.getProperty(prefix+"transform_size")!=null) this.transform_size=Integer.parseInt(properties.getProperty(prefix+"transform_size")); if (properties.getProperty(prefix+"transform_size")!=null) this.transform_size=Integer.parseInt(properties.getProperty(prefix+"transform_size")); Loading Loading @@ -2233,11 +2254,20 @@ public class EyesisCorrectionParameters { if (properties.getProperty(prefix+"other_range")!=null) this.other_range=Double.parseDouble(properties.getProperty(prefix+"other_range")); if (properties.getProperty(prefix+"other_range")!=null) this.other_range=Double.parseDouble(properties.getProperty(prefix+"other_range")); if (properties.getProperty(prefix+"bgnd_sure")!=null) this.bgnd_sure=Double.parseDouble(properties.getProperty(prefix+"bgnd_sure")); if (properties.getProperty(prefix+"bgnd_sure")!=null) this.bgnd_sure=Double.parseDouble(properties.getProperty(prefix+"bgnd_sure")); if (properties.getProperty(prefix+"bgnd_maybe")!=null) this.bgnd_maybe=Double.parseDouble(properties.getProperty(prefix+"bgnd_maybe")); if (properties.getProperty(prefix+"bgnd_maybe")!=null) this.bgnd_maybe=Double.parseDouble(properties.getProperty(prefix+"bgnd_maybe")); if (properties.getProperty(prefix+"min_clstr_seed")!=null) this.min_clstr_seed=Integer.parseInt(properties.getProperty(prefix+"min_clstr_seed")); if (properties.getProperty(prefix+"min_clstr_seed")!=null) this.min_clstr_seed=Integer.parseInt(properties.getProperty(prefix+"min_clstr_seed")); if (properties.getProperty(prefix+"min_clstr_block")!=null) this.min_clstr_block=Integer.parseInt(properties.getProperty(prefix+"min_clstr_block")); if (properties.getProperty(prefix+"min_clstr_block")!=null) this.min_clstr_block=Integer.parseInt(properties.getProperty(prefix+"min_clstr_block")); if (properties.getProperty(prefix+"bgnd_grow")!=null) this.bgnd_grow=Integer.parseInt(properties.getProperty(prefix+"bgnd_grow")); if (properties.getProperty(prefix+"bgnd_grow")!=null) this.bgnd_grow=Integer.parseInt(properties.getProperty(prefix+"bgnd_grow")); if (properties.getProperty(prefix+"ortho_min_hor")!=null) this.ortho_min_hor=Double.parseDouble(properties.getProperty(prefix+"ortho_min_hor")); if (properties.getProperty(prefix+"ortho_min_vert")!=null) this.ortho_min_vert=Double.parseDouble(properties.getProperty(prefix+"ortho_min_vert")); if (properties.getProperty(prefix+"ortho_asym")!=null) this.ortho_asym=Double.parseDouble(properties.getProperty(prefix+"ortho_asym")); if (properties.getProperty(prefix+"ortho_sustain")!=null) this.ortho_sustain=Double.parseDouble(properties.getProperty(prefix+"ortho_sustain")); if (properties.getProperty(prefix+"ortho_run")!=null) this.ortho_run=Integer.parseInt(properties.getProperty(prefix+"ortho_run")); if (properties.getProperty(prefix+"ortho_minmax")!=null) this.ortho_minmax=Double.parseDouble(properties.getProperty(prefix+"ortho_minmax")); if (properties.getProperty(prefix+"ortho_bridge")!=null) this.ortho_bridge=Integer.parseInt(properties.getProperty(prefix+"ortho_bridge")); if (properties.getProperty(prefix+"ortho_rms")!=null) this.ortho_rms=Double.parseDouble(properties.getProperty(prefix+"ortho_rms")); if (properties.getProperty(prefix+"ortho_half_length")!=null) this.ortho_half_length=Integer.parseInt(properties.getProperty(prefix+"ortho_half_length")); if (properties.getProperty(prefix+"ortho_mix")!=null) this.ortho_mix=Double.parseDouble(properties.getProperty(prefix+"ortho_mix")); } } public boolean showDialog() { public boolean showDialog() { Loading Loading @@ -2355,6 +2385,18 @@ public class EyesisCorrectionParameters { gd.addNumericField("Number of tiles in a cluster to block (just non-background?)", this.min_clstr_block, 0); gd.addNumericField("Number of tiles in a cluster to block (just non-background?)", this.min_clstr_block, 0); gd.addNumericField("Number of tiles to grow tile selection (1 - hor/vert, 2 - hor/vert/diagonal)", this.bgnd_grow, 0); gd.addNumericField("Number of tiles to grow tile selection (1 - hor/vert, 2 - hor/vert/diagonal)", this.bgnd_grow, 0); gd.addNumericField("Minimal strength of hor correlation to be used instead of full 4-pair correlation", this.ortho_min_hor, 3); gd.addNumericField("Minimal strength of vert correlation to be used instead of full 4-pair correlation", this.ortho_min_vert, 3); gd.addNumericField("Vert/hor (or hor/vert) strength to be used instead of the full correlation", this.ortho_asym, 3); gd.addNumericField("Minimal strength of hor/vert to bridge over", this.ortho_sustain, 3); gd.addNumericField("minimal run of hor/vert tiles to be considered (at least from one side)", this.ortho_run, 0); gd.addNumericField("Minimal maximal strength in an ortho run (max. in run >=...)", this.ortho_minmax, 3); gd.addNumericField("Number of tiles to bridge over hor/vert gaps", this.ortho_bridge, 0); gd.addNumericField("Maximal disparity RMS in a run to replace by average)", this.ortho_rms, 3); gd.addNumericField("convolve hor/vert strength by 3*(2*l+1) kernels to detect multi-tile features",this.ortho_half_length, 0); gd.addNumericField("Fraction ovf convolved ortho in a mix with raw", this.ortho_mix, 3); WindowTools.addScrollBars(gd); WindowTools.addScrollBars(gd); gd.showDialog(); gd.showDialog(); Loading Loading @@ -2463,7 +2505,17 @@ public class EyesisCorrectionParameters { this.min_clstr_seed= (int) gd.getNextNumber(); this.min_clstr_seed= (int) gd.getNextNumber(); this.min_clstr_block= (int) gd.getNextNumber(); this.min_clstr_block= (int) gd.getNextNumber(); this.bgnd_grow= (int) gd.getNextNumber(); this.bgnd_grow= (int) gd.getNextNumber(); this.ortho_min_hor= gd.getNextNumber(); this.ortho_min_vert= gd.getNextNumber(); this.ortho_asym= gd.getNextNumber(); this.ortho_sustain= gd.getNextNumber(); this.ortho_run= (int) gd.getNextNumber(); this.ortho_minmax= gd.getNextNumber(); this.ortho_bridge= (int) gd.getNextNumber(); this.ortho_rms= gd.getNextNumber(); this.ortho_half_length=(int)gd.getNextNumber(); this.ortho_mix= gd.getNextNumber(); return true; return true; } } } } Loading src/main/java/EyesisDCT.java +466 −27 File changed.Preview size limit exceeded, changes collapsed. Show changes src/main/java/ImageDtt.java +33 −6 Original line number Original line Diff line number Diff line Loading @@ -1041,8 +1041,10 @@ public class ImageDtt { for (int i = 0; i < corr_size; i++){ for (int i = 0; i < corr_size; i++){ if ((i < (transform_size - enhortho_width)) || (i > (transform_size - 2 + enhortho_width))) enh_ortho_scale[i] = 1.0; if ((i < (transform_size - enhortho_width)) || (i > (transform_size - 2 + enhortho_width))) enh_ortho_scale[i] = 1.0; else enh_ortho_scale[i] = enhortho_scale; else enh_ortho_scale[i] = enhortho_scale; if (i == (transform_size-1)) enh_ortho_scale[i] = 0.0 ; // hardwired 0 in the center enh_ortho_scale[i] *= Math.sin(Math.PI*(i+1.0)/(2*transform_size)); } } if (globalDebugLevel > 0){ if (globalDebugLevel > -1){ System.out.println("enhortho_width="+ enhortho_width+" enhortho_scale="+ enhortho_scale); System.out.println("enhortho_width="+ enhortho_width+" enhortho_scale="+ enhortho_scale); for (int i = 0; i < corr_size; i++){ for (int i = 0; i < corr_size; i++){ System.out.println(" enh_ortho_scale["+i+"]="+ enh_ortho_scale[i]); System.out.println(" enh_ortho_scale["+i+"]="+ enh_ortho_scale[i]); Loading Loading @@ -1380,16 +1382,23 @@ public class ImageDtt { } // all pairs calculated } // all pairs calculated tcorr_combo = new double [TCORR_TITLES.length][corr_size * corr_size]; tcorr_combo = new double [TCORR_TITLES.length][corr_size * corr_size]; int numPairs = 0; int numPairs = 0, numPairsHor = 0, numPairsVert = 0; for (int pair = 0; pair < corr_pairs.length; pair++) if (((corr_mask >> pair) & 1) != 0){ for (int pair = 0; pair < corr_pairs.length; pair++) if (((corr_mask >> pair) & 1) != 0){ numPairs++; numPairs++; if (corr_pairs[pair][2] == 0) { // horizontal pair) numPairsHor++; } else { numPairsVert++; } } } double avScale = 0.0; double avScale = 0.0, avScaleHor = 0.0, avScaleVert = 0.0; if (numPairs > 0) { if (numPairs > 0) { boolean debugMax = (globalDebugLevel > 0) && (tileX == debug_tileX) && (tileY == debug_tileY); boolean debugMax = (globalDebugLevel > 0) && (tileX == debug_tileX) && (tileY == debug_tileY); avScale = 1.0/numPairs; avScale = 1.0/numPairs; if (numPairsHor > 0) avScaleHor = 1.0/numPairsHor; if (numPairsVert > 0) avScaleVert = 1.0/numPairsVert; if (debugMax) { if (debugMax) { System.out.println("avScale="+avScale+", corr_offset="+corr_offset); System.out.println("avScale = "+avScale+", avScaleHor = "+avScaleHor+", avScaleVert = "+avScaleVert+", corr_offset = "+corr_offset); } } if (corr_offset < 0) { // just add all partial correlations for composite color if (corr_offset < 0) { // just add all partial correlations for composite color for (int i = 0; i < tcorr_combo[TCORR_COMBO_RSLT].length; i++){ for (int i = 0; i < tcorr_combo[TCORR_COMBO_RSLT].length; i++){ Loading @@ -1399,9 +1408,9 @@ public class ImageDtt { for (int pair = 0; pair < corr_pairs.length; pair++) if (((corr_mask >> pair) & 1) != 0){ for (int pair = 0; pair < corr_pairs.length; pair++) if (((corr_mask >> pair) & 1) != 0){ tcorr_combo[TCORR_COMBO_RSLT][i] += avScale*tcorr_partial[pair][numcol][i]; // only composite color channel tcorr_combo[TCORR_COMBO_RSLT][i] += avScale*tcorr_partial[pair][numcol][i]; // only composite color channel if (corr_pairs[pair][2] == 0) { // horizontal pair if (corr_pairs[pair][2] == 0) { // horizontal pair tcorr_combo[TCORR_COMBO_HOR][i] += avScale*tcorr_partial[pair][numcol][i]; // only composite color channel tcorr_combo[TCORR_COMBO_HOR][i] += avScaleHor*tcorr_partial[pair][numcol][i]; // only composite color channel } else { //vertical pair } else { //vertical pair tcorr_combo[TCORR_COMBO_VERT][i] += avScale*tcorr_partial[pair][numcol][i]; // only composite color channel tcorr_combo[TCORR_COMBO_VERT][i] += avScaleVert*tcorr_partial[pair][numcol][i]; // only composite color channel } } if (debugMax) { if (debugMax) { System.out.println("tcorr_combo[TCORR_COMBO_RSLT]["+i+"]="+tcorr_combo[TCORR_COMBO_RSLT][i]+" tcorr_partial["+pair+"]["+numcol+"]["+i+"]="+tcorr_partial[pair][numcol][i]); System.out.println("tcorr_combo[TCORR_COMBO_RSLT]["+i+"]="+tcorr_combo[TCORR_COMBO_RSLT][i]+" tcorr_partial["+pair+"]["+numcol+"]["+i+"]="+tcorr_partial[pair][numcol][i]); Loading @@ -1428,7 +1437,25 @@ public class ImageDtt { } } // tcorr_combo[TCORR_COMBO_HOR][i] *= tcorr_combo[TCORR_COMBO_HOR][i]; // no have the same scale as tcorr_combo[TCORR_COMBO_RSLT] // tcorr_combo[TCORR_COMBO_HOR][i] *= tcorr_combo[TCORR_COMBO_HOR][i]; // no have the same scale as tcorr_combo[TCORR_COMBO_RSLT] // tcorr_combo[TCORR_COMBO_VERT][i] *= tcorr_combo[TCORR_COMBO_VERT][i]; // tcorr_combo[TCORR_COMBO_VERT][i] *= tcorr_combo[TCORR_COMBO_VERT][i]; if (corr_normalize) { if (tcorr_combo[TCORR_COMBO_RSLT][i] > 0.0){ tcorr_combo[TCORR_COMBO_RSLT][i] = Math.pow(tcorr_combo[TCORR_COMBO_RSLT][i],avScale) - corr_offset; } else { tcorr_combo[TCORR_COMBO_RSLT][i] = -corr_offset; } if (tcorr_combo[TCORR_COMBO_HOR][i] > 0.0){ tcorr_combo[TCORR_COMBO_HOR][i] = Math.pow(tcorr_combo[TCORR_COMBO_HOR][i],avScaleHor) - corr_offset; } else { tcorr_combo[TCORR_COMBO_HOR][i] = -corr_offset; } if (tcorr_combo[TCORR_COMBO_VERT][i] > 0.0){ tcorr_combo[TCORR_COMBO_VERT][i] = Math.pow(tcorr_combo[TCORR_COMBO_VERT][i],avScaleVert) - corr_offset; } else { tcorr_combo[TCORR_COMBO_VERT][i] = -corr_offset; } } } } } } // calculate sum also // calculate sum also Loading Loading
src/main/java/EyesisCorrectionParameters.java +60 −8 Original line number Original line Diff line number Diff line Loading @@ -1942,7 +1942,7 @@ public class EyesisCorrectionParameters { public boolean corr_show = false; // Show combined correlations public boolean corr_show = false; // Show combined correlations public boolean corr_mismatch= false; // calculate per-pair X/Y variations of measured correlations public boolean corr_mismatch= false; // calculate per-pair X/Y variations of measured correlations // TODO: what to do if some occlusion is present (only some channels correlate) // TODO: what to do if some occlusion is present (only some channels correlate) public double corr_offset = -1.0; //0.1; // add to pair correlation before multiplying by other pairs (between sum and product) public double corr_offset = 0.1; //0.1; // add to pair correlation before multiplying by other pairs (between sum and product) // negative - add, not mpy // negative - add, not mpy public double corr_red = 0.5; // Red to green correlation weight public double corr_red = 0.5; // Red to green correlation weight public double corr_blue = 0.2; // Blue to green correlation weight public double corr_blue = 0.2; // Blue to green correlation weight Loading Loading @@ -2013,18 +2013,29 @@ public class EyesisCorrectionParameters { // 3d reconstruction // 3d reconstruction public boolean show_textures = true; // show generated textures public boolean show_textures = true; // show generated textures public boolean debug_filters = false;// show intermediate results of filtering public boolean debug_filters = false;// show intermediate results of filtering public double min_smth = 0.5; // 0.25 minimal noise-normalized pixel difference in a channel to suspect something public double min_smth = 0.25; // 0.25 minimal noise-normalized pixel difference in a channel to suspect something public double sure_smth = 2.0; // reliable noise-normalized pixel difference in a channel to have something public double sure_smth = 2.0; // reliable noise-normalized pixel difference in a channel to have something public double bgnd_range = 0.3; // disparity range to be considered background public double bgnd_range = 0.3; // disparity range to be considered background public double other_range = 2.0; // disparity difference from center (provided) disparity to trust public double other_range = 2.0; // disparity difference from center (provided) disparity to trust public double bgnd_sure = 0.02; // minimal strength to be considered definitely background public double bgnd_sure = 0.18; // minimal strength to be considered definitely background public double bgnd_maybe = 0.004; // maximal strength to ignore as non-background public double bgnd_maybe = 0.1; // maximal strength to ignore as non-background // public double bgnd_2diff = 0.005; // maximal strength to ignore as non-background // public double bgnd_2diff = 0.005; // maximal strength to ignore as non-background public int min_clstr_seed = 3; // number of tiles in a cluster to seed (just background?) public int min_clstr_seed = 2; // number of tiles in a cluster to seed (just background?) public int min_clstr_block = 3; // number of tiles in a cluster to block (just non-background?) public int min_clstr_block = 3; // number of tiles in a cluster to block (just non-background?) public int bgnd_grow = 2; // number of tiles to grow (1 - hor/vert, 2 - hor/vert/diagonal) public int bgnd_grow = 2; // number of tiles to grow (1 - hor/vert, 2 - hor/vert/diagonal) // public double ortho_min = 0.09; // minimal strength of hor/vert correlation to be used instead of full 4-pair correlation public double ortho_min_hor = 0.07; // minimal strength of hor correlation to be used instead of full 4-pair correlation - public double ortho_min_vert = 0.15; // minimal strength of vert correlation to be used instead of full 4-pair correlation public double ortho_asym = 1.2; // vert/hor (or hor/vert) strength to be used instead of the full correlation public double ortho_sustain = 0.05; // minimal strength of hor/vert to bridge over public int ortho_run = 3; // minimal run of hor/vert tiles to be considered (at least from one side) public double ortho_minmax = 0.09; // minimal maximal strength in an ortho run public int ortho_bridge = 10; // number of tiles to bridge over hor/vert gaps public double ortho_rms = 0.3; // maximal disparity RMS in a run to replace by average public int ortho_half_length = 4; // convolve hor/vert strength by 3*(2*l+1) kernels to detect multi-tile features public double ortho_mix = 0.5; // Fraction ovf convolved ortho in a mix with raw Loading Loading @@ -2131,10 +2142,20 @@ public class EyesisCorrectionParameters { properties.setProperty(prefix+"other_range", this.other_range +""); properties.setProperty(prefix+"other_range", this.other_range +""); properties.setProperty(prefix+"bgnd_sure", this.bgnd_sure +""); properties.setProperty(prefix+"bgnd_sure", this.bgnd_sure +""); properties.setProperty(prefix+"bgnd_maybe", this.bgnd_maybe +""); properties.setProperty(prefix+"bgnd_maybe", this.bgnd_maybe +""); properties.setProperty(prefix+"min_clstr_seed", this.min_clstr_seed+""); properties.setProperty(prefix+"min_clstr_seed", this.min_clstr_seed+""); properties.setProperty(prefix+"min_clstr_block", this.min_clstr_block+""); properties.setProperty(prefix+"min_clstr_block", this.min_clstr_block+""); properties.setProperty(prefix+"bgnd_grow", this.bgnd_grow+""); properties.setProperty(prefix+"bgnd_grow", this.bgnd_grow+""); properties.setProperty(prefix+"ortho_min_hor", this.ortho_min_hor +""); properties.setProperty(prefix+"ortho_min_vert", this.ortho_min_vert +""); properties.setProperty(prefix+"ortho_asym", this.ortho_asym +""); properties.setProperty(prefix+"ortho_sustain", this.ortho_sustain +""); properties.setProperty(prefix+"ortho_run", this.ortho_run+""); properties.setProperty(prefix+"ortho_minmax", this.ortho_minmax +""); properties.setProperty(prefix+"ortho_bridge", this.ortho_bridge+""); properties.setProperty(prefix+"ortho_rms", this.ortho_rms +""); properties.setProperty(prefix+"ortho_half_length",this.ortho_half_length+""); properties.setProperty(prefix+"ortho_mix", this.ortho_mix +""); } } public void getProperties(String prefix,Properties properties){ public void getProperties(String prefix,Properties properties){ if (properties.getProperty(prefix+"transform_size")!=null) this.transform_size=Integer.parseInt(properties.getProperty(prefix+"transform_size")); if (properties.getProperty(prefix+"transform_size")!=null) this.transform_size=Integer.parseInt(properties.getProperty(prefix+"transform_size")); Loading Loading @@ -2233,11 +2254,20 @@ public class EyesisCorrectionParameters { if (properties.getProperty(prefix+"other_range")!=null) this.other_range=Double.parseDouble(properties.getProperty(prefix+"other_range")); if (properties.getProperty(prefix+"other_range")!=null) this.other_range=Double.parseDouble(properties.getProperty(prefix+"other_range")); if (properties.getProperty(prefix+"bgnd_sure")!=null) this.bgnd_sure=Double.parseDouble(properties.getProperty(prefix+"bgnd_sure")); if (properties.getProperty(prefix+"bgnd_sure")!=null) this.bgnd_sure=Double.parseDouble(properties.getProperty(prefix+"bgnd_sure")); if (properties.getProperty(prefix+"bgnd_maybe")!=null) this.bgnd_maybe=Double.parseDouble(properties.getProperty(prefix+"bgnd_maybe")); if (properties.getProperty(prefix+"bgnd_maybe")!=null) this.bgnd_maybe=Double.parseDouble(properties.getProperty(prefix+"bgnd_maybe")); if (properties.getProperty(prefix+"min_clstr_seed")!=null) this.min_clstr_seed=Integer.parseInt(properties.getProperty(prefix+"min_clstr_seed")); if (properties.getProperty(prefix+"min_clstr_seed")!=null) this.min_clstr_seed=Integer.parseInt(properties.getProperty(prefix+"min_clstr_seed")); if (properties.getProperty(prefix+"min_clstr_block")!=null) this.min_clstr_block=Integer.parseInt(properties.getProperty(prefix+"min_clstr_block")); if (properties.getProperty(prefix+"min_clstr_block")!=null) this.min_clstr_block=Integer.parseInt(properties.getProperty(prefix+"min_clstr_block")); if (properties.getProperty(prefix+"bgnd_grow")!=null) this.bgnd_grow=Integer.parseInt(properties.getProperty(prefix+"bgnd_grow")); if (properties.getProperty(prefix+"bgnd_grow")!=null) this.bgnd_grow=Integer.parseInt(properties.getProperty(prefix+"bgnd_grow")); if (properties.getProperty(prefix+"ortho_min_hor")!=null) this.ortho_min_hor=Double.parseDouble(properties.getProperty(prefix+"ortho_min_hor")); if (properties.getProperty(prefix+"ortho_min_vert")!=null) this.ortho_min_vert=Double.parseDouble(properties.getProperty(prefix+"ortho_min_vert")); if (properties.getProperty(prefix+"ortho_asym")!=null) this.ortho_asym=Double.parseDouble(properties.getProperty(prefix+"ortho_asym")); if (properties.getProperty(prefix+"ortho_sustain")!=null) this.ortho_sustain=Double.parseDouble(properties.getProperty(prefix+"ortho_sustain")); if (properties.getProperty(prefix+"ortho_run")!=null) this.ortho_run=Integer.parseInt(properties.getProperty(prefix+"ortho_run")); if (properties.getProperty(prefix+"ortho_minmax")!=null) this.ortho_minmax=Double.parseDouble(properties.getProperty(prefix+"ortho_minmax")); if (properties.getProperty(prefix+"ortho_bridge")!=null) this.ortho_bridge=Integer.parseInt(properties.getProperty(prefix+"ortho_bridge")); if (properties.getProperty(prefix+"ortho_rms")!=null) this.ortho_rms=Double.parseDouble(properties.getProperty(prefix+"ortho_rms")); if (properties.getProperty(prefix+"ortho_half_length")!=null) this.ortho_half_length=Integer.parseInt(properties.getProperty(prefix+"ortho_half_length")); if (properties.getProperty(prefix+"ortho_mix")!=null) this.ortho_mix=Double.parseDouble(properties.getProperty(prefix+"ortho_mix")); } } public boolean showDialog() { public boolean showDialog() { Loading Loading @@ -2355,6 +2385,18 @@ public class EyesisCorrectionParameters { gd.addNumericField("Number of tiles in a cluster to block (just non-background?)", this.min_clstr_block, 0); gd.addNumericField("Number of tiles in a cluster to block (just non-background?)", this.min_clstr_block, 0); gd.addNumericField("Number of tiles to grow tile selection (1 - hor/vert, 2 - hor/vert/diagonal)", this.bgnd_grow, 0); gd.addNumericField("Number of tiles to grow tile selection (1 - hor/vert, 2 - hor/vert/diagonal)", this.bgnd_grow, 0); gd.addNumericField("Minimal strength of hor correlation to be used instead of full 4-pair correlation", this.ortho_min_hor, 3); gd.addNumericField("Minimal strength of vert correlation to be used instead of full 4-pair correlation", this.ortho_min_vert, 3); gd.addNumericField("Vert/hor (or hor/vert) strength to be used instead of the full correlation", this.ortho_asym, 3); gd.addNumericField("Minimal strength of hor/vert to bridge over", this.ortho_sustain, 3); gd.addNumericField("minimal run of hor/vert tiles to be considered (at least from one side)", this.ortho_run, 0); gd.addNumericField("Minimal maximal strength in an ortho run (max. in run >=...)", this.ortho_minmax, 3); gd.addNumericField("Number of tiles to bridge over hor/vert gaps", this.ortho_bridge, 0); gd.addNumericField("Maximal disparity RMS in a run to replace by average)", this.ortho_rms, 3); gd.addNumericField("convolve hor/vert strength by 3*(2*l+1) kernels to detect multi-tile features",this.ortho_half_length, 0); gd.addNumericField("Fraction ovf convolved ortho in a mix with raw", this.ortho_mix, 3); WindowTools.addScrollBars(gd); WindowTools.addScrollBars(gd); gd.showDialog(); gd.showDialog(); Loading Loading @@ -2463,7 +2505,17 @@ public class EyesisCorrectionParameters { this.min_clstr_seed= (int) gd.getNextNumber(); this.min_clstr_seed= (int) gd.getNextNumber(); this.min_clstr_block= (int) gd.getNextNumber(); this.min_clstr_block= (int) gd.getNextNumber(); this.bgnd_grow= (int) gd.getNextNumber(); this.bgnd_grow= (int) gd.getNextNumber(); this.ortho_min_hor= gd.getNextNumber(); this.ortho_min_vert= gd.getNextNumber(); this.ortho_asym= gd.getNextNumber(); this.ortho_sustain= gd.getNextNumber(); this.ortho_run= (int) gd.getNextNumber(); this.ortho_minmax= gd.getNextNumber(); this.ortho_bridge= (int) gd.getNextNumber(); this.ortho_rms= gd.getNextNumber(); this.ortho_half_length=(int)gd.getNextNumber(); this.ortho_mix= gd.getNextNumber(); return true; return true; } } } } Loading
src/main/java/EyesisDCT.java +466 −27 File changed.Preview size limit exceeded, changes collapsed. Show changes
src/main/java/ImageDtt.java +33 −6 Original line number Original line Diff line number Diff line Loading @@ -1041,8 +1041,10 @@ public class ImageDtt { for (int i = 0; i < corr_size; i++){ for (int i = 0; i < corr_size; i++){ if ((i < (transform_size - enhortho_width)) || (i > (transform_size - 2 + enhortho_width))) enh_ortho_scale[i] = 1.0; if ((i < (transform_size - enhortho_width)) || (i > (transform_size - 2 + enhortho_width))) enh_ortho_scale[i] = 1.0; else enh_ortho_scale[i] = enhortho_scale; else enh_ortho_scale[i] = enhortho_scale; if (i == (transform_size-1)) enh_ortho_scale[i] = 0.0 ; // hardwired 0 in the center enh_ortho_scale[i] *= Math.sin(Math.PI*(i+1.0)/(2*transform_size)); } } if (globalDebugLevel > 0){ if (globalDebugLevel > -1){ System.out.println("enhortho_width="+ enhortho_width+" enhortho_scale="+ enhortho_scale); System.out.println("enhortho_width="+ enhortho_width+" enhortho_scale="+ enhortho_scale); for (int i = 0; i < corr_size; i++){ for (int i = 0; i < corr_size; i++){ System.out.println(" enh_ortho_scale["+i+"]="+ enh_ortho_scale[i]); System.out.println(" enh_ortho_scale["+i+"]="+ enh_ortho_scale[i]); Loading Loading @@ -1380,16 +1382,23 @@ public class ImageDtt { } // all pairs calculated } // all pairs calculated tcorr_combo = new double [TCORR_TITLES.length][corr_size * corr_size]; tcorr_combo = new double [TCORR_TITLES.length][corr_size * corr_size]; int numPairs = 0; int numPairs = 0, numPairsHor = 0, numPairsVert = 0; for (int pair = 0; pair < corr_pairs.length; pair++) if (((corr_mask >> pair) & 1) != 0){ for (int pair = 0; pair < corr_pairs.length; pair++) if (((corr_mask >> pair) & 1) != 0){ numPairs++; numPairs++; if (corr_pairs[pair][2] == 0) { // horizontal pair) numPairsHor++; } else { numPairsVert++; } } } double avScale = 0.0; double avScale = 0.0, avScaleHor = 0.0, avScaleVert = 0.0; if (numPairs > 0) { if (numPairs > 0) { boolean debugMax = (globalDebugLevel > 0) && (tileX == debug_tileX) && (tileY == debug_tileY); boolean debugMax = (globalDebugLevel > 0) && (tileX == debug_tileX) && (tileY == debug_tileY); avScale = 1.0/numPairs; avScale = 1.0/numPairs; if (numPairsHor > 0) avScaleHor = 1.0/numPairsHor; if (numPairsVert > 0) avScaleVert = 1.0/numPairsVert; if (debugMax) { if (debugMax) { System.out.println("avScale="+avScale+", corr_offset="+corr_offset); System.out.println("avScale = "+avScale+", avScaleHor = "+avScaleHor+", avScaleVert = "+avScaleVert+", corr_offset = "+corr_offset); } } if (corr_offset < 0) { // just add all partial correlations for composite color if (corr_offset < 0) { // just add all partial correlations for composite color for (int i = 0; i < tcorr_combo[TCORR_COMBO_RSLT].length; i++){ for (int i = 0; i < tcorr_combo[TCORR_COMBO_RSLT].length; i++){ Loading @@ -1399,9 +1408,9 @@ public class ImageDtt { for (int pair = 0; pair < corr_pairs.length; pair++) if (((corr_mask >> pair) & 1) != 0){ for (int pair = 0; pair < corr_pairs.length; pair++) if (((corr_mask >> pair) & 1) != 0){ tcorr_combo[TCORR_COMBO_RSLT][i] += avScale*tcorr_partial[pair][numcol][i]; // only composite color channel tcorr_combo[TCORR_COMBO_RSLT][i] += avScale*tcorr_partial[pair][numcol][i]; // only composite color channel if (corr_pairs[pair][2] == 0) { // horizontal pair if (corr_pairs[pair][2] == 0) { // horizontal pair tcorr_combo[TCORR_COMBO_HOR][i] += avScale*tcorr_partial[pair][numcol][i]; // only composite color channel tcorr_combo[TCORR_COMBO_HOR][i] += avScaleHor*tcorr_partial[pair][numcol][i]; // only composite color channel } else { //vertical pair } else { //vertical pair tcorr_combo[TCORR_COMBO_VERT][i] += avScale*tcorr_partial[pair][numcol][i]; // only composite color channel tcorr_combo[TCORR_COMBO_VERT][i] += avScaleVert*tcorr_partial[pair][numcol][i]; // only composite color channel } } if (debugMax) { if (debugMax) { System.out.println("tcorr_combo[TCORR_COMBO_RSLT]["+i+"]="+tcorr_combo[TCORR_COMBO_RSLT][i]+" tcorr_partial["+pair+"]["+numcol+"]["+i+"]="+tcorr_partial[pair][numcol][i]); System.out.println("tcorr_combo[TCORR_COMBO_RSLT]["+i+"]="+tcorr_combo[TCORR_COMBO_RSLT][i]+" tcorr_partial["+pair+"]["+numcol+"]["+i+"]="+tcorr_partial[pair][numcol][i]); Loading @@ -1428,7 +1437,25 @@ public class ImageDtt { } } // tcorr_combo[TCORR_COMBO_HOR][i] *= tcorr_combo[TCORR_COMBO_HOR][i]; // no have the same scale as tcorr_combo[TCORR_COMBO_RSLT] // tcorr_combo[TCORR_COMBO_HOR][i] *= tcorr_combo[TCORR_COMBO_HOR][i]; // no have the same scale as tcorr_combo[TCORR_COMBO_RSLT] // tcorr_combo[TCORR_COMBO_VERT][i] *= tcorr_combo[TCORR_COMBO_VERT][i]; // tcorr_combo[TCORR_COMBO_VERT][i] *= tcorr_combo[TCORR_COMBO_VERT][i]; if (corr_normalize) { if (tcorr_combo[TCORR_COMBO_RSLT][i] > 0.0){ tcorr_combo[TCORR_COMBO_RSLT][i] = Math.pow(tcorr_combo[TCORR_COMBO_RSLT][i],avScale) - corr_offset; } else { tcorr_combo[TCORR_COMBO_RSLT][i] = -corr_offset; } if (tcorr_combo[TCORR_COMBO_HOR][i] > 0.0){ tcorr_combo[TCORR_COMBO_HOR][i] = Math.pow(tcorr_combo[TCORR_COMBO_HOR][i],avScaleHor) - corr_offset; } else { tcorr_combo[TCORR_COMBO_HOR][i] = -corr_offset; } if (tcorr_combo[TCORR_COMBO_VERT][i] > 0.0){ tcorr_combo[TCORR_COMBO_VERT][i] = Math.pow(tcorr_combo[TCORR_COMBO_VERT][i],avScaleVert) - corr_offset; } else { tcorr_combo[TCORR_COMBO_VERT][i] = -corr_offset; } } } } } } // calculate sum also // calculate sum also Loading