Loading src/main/java/com/elphel/imagej/cameras/InterNoiseParameters.java +56 −25 Original line number Diff line number Diff line Loading @@ -28,64 +28,95 @@ package com.elphel.imagej.cameras; import java.util.Properties; import com.elphel.imagej.common.GenericJTabbedDialog; import com.elphel.imagej.tileprocessor.NoiseParameters; public class InterNoiseParameters { public double noise_sigma = 1.5; public double noise_scale = 0.01; public double initial_offset = 1.0; public NoiseParameters noise = new NoiseParameters (0.1, 0.0, 1.5, 1.0, 16); // public double noise_sigma = 1.5; // public double noise_scale = 0.01; // public double initial_offset = 1.0; public boolean ref_only = false; // also see imgdtt_params.dbg_pair_mask to switch between all pairs (63) and binocular only (1) public boolean show_final_2d = true; // show 2d correlations during last interation step public int noise_debug_level = -1; // Noise testing debug level public void dialogQuestions(GenericJTabbedDialog gd) { gd.addMessage("Additive noise parameters"); gd.addMessage("LMA other parameters"); gd.addNumericField("Noise Gaussian sigma", this.noise_sigma, 3,5,"pix", gd.addNumericField("Noise Gaussian sigma", this.noise.sigma, 3,5,"pix", "Blur noise with 2D Gaussian"); gd.addNumericField("Scale noise", this.noise_scale, 6,8,"", gd.addNumericField("Scale noise random (each scene indepemdent)", this.noise.scale_random, 6,8,"", "Scale noise relative to the average value of the color component"); gd.addNumericField("Scale noise FPN (same for each scene)", this.noise.scale_fpn, 6,8,"", "Scale noise relative to the average value of the color component."); gd.addNumericField("Offset target disparity", this.initial_offset, 3,5,"pix", gd.addNumericField("Offset target disparity", this.noise.initial_offset, 3,5,"pix", "Offset target disparity before attempting to correlate and refine."); gd.addNumericField("Subset number of sensors (2/4/8/16)", this.noise.used_sensors, 0,3,"", "Performance comparison - use only some of 16 sensors"); gd.addCheckbox ("Reference scene only", this.ref_only, "Process only reference scene (intra-scene, no inter-scene accumulation)."); gd.addCheckbox ("Show 2d correlations for the last iteration", this.show_final_2d, "Show single-scene and interframe 2d correlations for the last iteration"); gd.addNumericField("Debug level", this.noise_debug_level, 0,3,"", "Debug level of interscene noise testing."); } public void dialogAnswers(GenericJTabbedDialog gd) { this.noise_sigma = gd.getNextNumber(); this.noise_scale = gd.getNextNumber(); this.initial_offset = gd.getNextNumber(); this.noise.sigma = gd.getNextNumber(); this.noise.scale_random = gd.getNextNumber(); this.noise.scale_fpn = gd.getNextNumber(); this.noise.initial_offset = gd.getNextNumber(); this.noise.used_sensors = (int) gd.getNextNumber(); this.ref_only = gd.getNextBoolean(); this.show_final_2d = gd.getNextBoolean(); this.noise_debug_level = (int) gd.getNextNumber(); } public void setProperties(String prefix,Properties properties){ properties.setProperty(prefix+"noise_sigma", this.noise_sigma+""); properties.setProperty(prefix+"noise_scale", this.noise_scale+""); properties.setProperty(prefix+"initial_offset", this.initial_offset+""); properties.setProperty(prefix+"noise.sigma", this.noise.sigma+""); properties.setProperty(prefix+"noise.scale_random", this.noise.scale_random+""); properties.setProperty(prefix+"noise.scale_fpn", this.noise.scale_fpn+""); properties.setProperty(prefix+"noise.initial_offset", this.noise.initial_offset+""); properties.setProperty(prefix+"noise.used_sensors", this.noise.used_sensors+""); properties.setProperty(prefix+"ref_only", this.ref_only+""); properties.setProperty(prefix+"show_final_2d", this.show_final_2d+""); properties.setProperty(prefix+"noise_debug_level", this.noise_debug_level+""); } public void getProperties(String prefix,Properties properties){ if (properties.getProperty(prefix+"noise_sigma")!=null) this.noise_sigma=Double.parseDouble(properties.getProperty(prefix+"noise_sigma")); if (properties.getProperty(prefix+"noise_scale")!=null) this.noise_scale=Double.parseDouble(properties.getProperty(prefix+"noise_scale")); if (properties.getProperty(prefix+"initial_offset")!=null) this.initial_offset=Double.parseDouble(properties.getProperty(prefix+"initial_offset")); if (properties.getProperty(prefix+"noise.sigma")!=null) { this.noise.sigma=Double.parseDouble(properties.getProperty(prefix+"noise.sigma")); } else if (properties.getProperty(prefix+"noise_sigma")!=null) { // old format this.noise.sigma=Double.parseDouble(properties.getProperty(prefix+"noise_sigma")); } if (properties.getProperty(prefix+"noise.scale_random")!=null) { this.noise.scale_random=Double.parseDouble(properties.getProperty(prefix+"noise.scale_random")); } else if (properties.getProperty(prefix+"noise_scale")!=null) { this.noise.scale_random=Double.parseDouble(properties.getProperty(prefix+"noise_scale")); } if (properties.getProperty(prefix+"noise.scale_fpn")!=null) this.noise.scale_fpn=Double.parseDouble(properties.getProperty(prefix+"noise.scale_fpn")); if (properties.getProperty(prefix+"noise.initial_offset")!=null) { this.noise.initial_offset=Double.parseDouble(properties.getProperty(prefix+"noise.initial_offset")); } else if (properties.getProperty(prefix+"initial_offset")!=null) { this.noise.initial_offset=Double.parseDouble(properties.getProperty(prefix+"initial_offset")); } if (properties.getProperty(prefix+"noise.used_sensors")!=null) this.noise.used_sensors=Integer.parseInt(properties.getProperty(prefix+"noise.used_sensors")); if (properties.getProperty(prefix+"ref_only")!=null) this.ref_only=Boolean.parseBoolean(properties.getProperty(prefix+"ref_only")); if (properties.getProperty(prefix+"show_final_2d")!=null) this.show_final_2d=Boolean.parseBoolean(properties.getProperty(prefix+"show_final_2d")); if (properties.getProperty(prefix+"noise_debug_level")!=null) this.noise_debug_level=Integer.parseInt(properties.getProperty(prefix+"noise_debug_level")); } @Override public InterNoiseParameters clone() throws CloneNotSupportedException { InterNoiseParameters inp = new InterNoiseParameters(); inp.noise_sigma = this.noise_sigma; inp.noise_scale = this.noise_scale; inp.initial_offset = this.initial_offset; inp.noise = this.noise.clone(); inp.ref_only = this.ref_only; inp.show_final_2d = this.show_final_2d; inp.noise_debug_level = this.noise_debug_level; return inp; } } src/main/java/com/elphel/imagej/tileprocessor/NoiseParameters.java 0 → 100644 +34 −0 Original line number Diff line number Diff line package com.elphel.imagej.tileprocessor; import com.elphel.imagej.cameras.InterNoiseParameters; public class NoiseParameters { public double scale_random = 0.1; public double scale_fpn = 0.0; public double sigma = 1.5; public double initial_offset = 1.0; public int used_sensors = 16; // 2/4/8/16 public NoiseParameters ( double scale_random, double scale_fpn, double sigma, double initial_offset, int used_sensors) { this.scale_random = scale_random; this.scale_fpn = scale_fpn; this.sigma = sigma; this.initial_offset= initial_offset; this.used_sensors = used_sensors; } @Override public NoiseParameters clone() throws CloneNotSupportedException { return new NoiseParameters( scale_random, scale_fpn, sigma, initial_offset, used_sensors); } } src/main/java/com/elphel/imagej/tileprocessor/OpticalFlow.java +90 −50 Original line number Diff line number Diff line Loading @@ -3163,7 +3163,8 @@ public class OpticalFlow { ColorProcParameters colorProcParameters, QuadCLT.SetChannels [] set_channels, QuadCLT ref_scene, // ordered by increasing timestamps double [] noise_sigma_level, // double [] NoiseParameters noise_sigma_level, int debug_level ) { Loading Loading @@ -3192,6 +3193,7 @@ public class OpticalFlow { clt_parameters, colorProcParameters, // noise_sigma_level, // double [] noise_sigma_level, ref_scene, // QuadCLTCPU ref_scene, // may be null if scale_fpn <= 0 threadsMax, -1); // debug_level); scenes[i].setDSRBG( Loading Loading @@ -3276,6 +3278,7 @@ public class OpticalFlow { combo_dsn_change[0], // final double [] disparity_ref, // disparity in the reference view tiles (Double.NaN - invalid) margin, // final int margin, nrefine, // final int nrefine, // just for debug title clt_parameters.inp.show_final_2d, // final boolean show_2d_corr, debug_level-5); // final int debug_level) Runtime.getRuntime().gc(); Loading Loading @@ -3386,7 +3389,8 @@ public class OpticalFlow { boolean ref_only, // process only reference frame (false - inter-scene) ColorProcParameters colorProcParameters, QuadCLT ref_scene, // ordered by increasing timestamps double [] noise_sigma_level, // double [] NoiseParameters noise_sigma_level, int debug_level ) { Loading @@ -3405,6 +3409,7 @@ public class OpticalFlow { clt_parameters, colorProcParameters, // noise_sigma_level, // double [] noise_sigma_level, ref_scene, // QuadCLTCPU ref_scene, // may be null if scale_fpn <= 0 threadsMax, -1); // debug_level); scenes[i].setDSRBG( Loading Loading @@ -3475,7 +3480,7 @@ public class OpticalFlow { } if (noise_sigma_level != null) { // add initial offset to the expected disparity for (int i = 0; i < combo_dsn_change[0].length; i++) { combo_dsn_change[0][i] += noise_sigma_level[2]; combo_dsn_change[0][i] += noise_sigma_level.initial_offset; // [2]; } } for (int nrefine = 0; nrefine < max_refines; nrefine++) { Loading Loading @@ -3543,13 +3548,20 @@ public class OpticalFlow { //noise_sigma_level String rslt_suffix = "-results-nonoise"; if (noise_sigma_level != null) { rslt_suffix = "-results-lev_"+noise_sigma_level[0]+"-sigma_"+noise_sigma_level[1]+"-offset"+noise_sigma_level[2]; // rslt_suffix = "-results-lev_"+noise_sigma_level[0]+"-sigma_"+noise_sigma_level[1]+"-offset"+noise_sigma_level[2]; rslt_suffix = "-results-rnd_"+noise_sigma_level.scale_random+ "-fpn_"+ noise_sigma_level.scale_fpn+ "-sigma_"+ noise_sigma_level.sigma+ // [1]+ "-offset"+ noise_sigma_level.initial_offset+ // [2]; "-sensors"+ noise_sigma_level.used_sensors; if (ref_only) { rslt_suffix +="-nointer"; } else { rslt_suffix +="-inter"; } rslt_suffix +="-mask"+clt_parameters.img_dtt.dbg_pair_mask; // rslt_suffix +="-mask"+clt_parameters.img_dtt.dbg_pair_mask; } ref_scene.saveDoubleArrayInModelDirectory( rslt_suffix, // String suffix, Loading Loading @@ -3597,7 +3609,8 @@ public class OpticalFlow { boolean ref_only, // process only reference frame (false - inter-scene) ColorProcParameters colorProcParameters, QuadCLT ref_scene, // ordered by increasing timestamps double [] noise_sigma_level, // double [] NoiseParameters noise_sigma_level, int debug_level ) { Loading @@ -3616,6 +3629,7 @@ public class OpticalFlow { clt_parameters, colorProcParameters, // noise_sigma_level, // double [] noise_sigma_level, ref_scene, // QuadCLTCPU ref_scene, // may be null if scale_fpn <= 0 threadsMax, -1); // debug_level); scenes[i].setDSRBG( Loading @@ -3624,31 +3638,44 @@ public class OpticalFlow { updateStatus, // boolean updateStatus, -1); // debug_level); // int debugLevel) } // String [] combo_dsn_titles = {"disp", "strength", "num_valid","change"}; String [] combo_dsn_titles = {"disp", "strength","disp_lma","num_valid","change"}; // final String [] iter_titles = {"disp", "diff", "strength","disp_lma"}; final int [] iter_indices = {0,1,2,4}; // which to save for each iteration: {"disp", "strength","disp_lma","change"}; final int [] initial_indices = {0,1,3}; // initial: "disp", "strength","num_valid" double [][] combo_dsn = null; if (noise_sigma_level == null) { combo_dsn = prepareInitialComboDS( double[][] combo_dsn0 = prepareInitialComboDS( // 3 clt_parameters, // final CLTParameters clt_parameters, scenes, // final QuadCLT [] scenes, indx_ref, // final int indx_ref, debug_level-2); // final int debug_level); combo_dsn = new double[combo_dsn_titles.length - 1][]; for (int i = 0; i < combo_dsn0.length; i++) { combo_dsn[initial_indices[i]] = combo_dsn0[i]; // "disp", "strength", <null>, "num_valid" } } else { combo_dsn = ref_scene. readDoubleArrayFromModelDirectory( combo_dsn = ref_scene. readDoubleArrayFromModelDirectory( //"disp", "strength","disp_lma","num_valid" "-results-nonoise", // String suffix, 3, // int num_slices, // (0 - all) combo_dsn_titles.length - 1, // 4 null); // int [] wh); } final double [][] combo_dsn_change = new double [combo_dsn.length+1][]; for (int i = 0; i < combo_dsn.length; i++) { combo_dsn_change[i] = combo_dsn[i]; } // final double [][] combo_dsn_change = new double [combo_dsn.length+1][]; final int margin = 8; final int tilesX = ref_scene.getTileProcessor().getTilesX(); final int tilesY = ref_scene.getTileProcessor().getTilesY(); String [] combo_dsn_titles = {"disp", "strength", "num_valid","change"}; final double [][] combo_dsn_change = new double [combo_dsn_titles.length] [tilesX*tilesY]; for (int i = 0; i < combo_dsn.length; i++) { // 4 elements: "disp", "strength","disp_lma","num_valid" if (combo_dsn[i] != null) combo_dsn_change[i] = combo_dsn[i]; // all but change } if (noise_sigma_level != null) { // add initial offset to the expected disparity for (int i = 0; i < combo_dsn_change[0].length; i++) { combo_dsn_change[0][i] += noise_sigma_level.initial_offset; // [2]; } } // combo_dsn_change[combo_dsn_change.length - 1] = new double [tilesX*tilesY]; if (debug_level > 0) { (new ShowDoubleFloatArrays()).showArrays( combo_dsn_change, Loading @@ -3660,35 +3687,30 @@ public class OpticalFlow { } final int max_refines = 10; final String [] iter_titles = {"disp", "diff", "strength"}; final int [] iter_indices = {0,1,3}; // final String [] iter_titles = {"disp", "diff", "strength"}; final int last_slices = combo_dsn_titles.length; final int last_initial_slices = last_slices + iter_titles.length; final int last_initial_slices = last_slices + initial_indices.length; final double [][] refine_results = new double [last_slices + 3 * (max_refines + 1)][]; // final double [][] refine_results = new double [last_slices + 3 * (max_refines + 1)][]; final double [][] refine_results = new double [last_slices + 4 * (max_refines + 1)][]; String [] refine_titles = new String [refine_results.length]; for (int i = 0; i < combo_dsn_titles.length; i++) { refine_results[i] = combo_dsn_change[i]; refine_titles[i] = combo_dsn_titles[i]+"-last"; refine_results[i] = combo_dsn_change[i]; // first 5 - references to 5-element combo_dsn_change refine_titles[i] = combo_dsn_titles[i]+"-last"; // "disp", "strength","disp_lma","num_valid","change" } for (int i = 0; i < iter_titles.length; i++) { refine_titles[last_slices + i] = iter_titles[i]+"-initial"; if (combo_dsn_change[iter_indices[i]] != null) { refine_results[last_slices + i] = combo_dsn_change[iter_indices[i]].clone(); for (int i = 0; i < initial_indices.length; i++) { refine_titles[last_slices + i] = combo_dsn_titles[initial_indices[i]]+"-initial"; // "disp", "strength","num_valid" if (combo_dsn_change[initial_indices[i]] != null) { refine_results[last_slices + i] = combo_dsn_change[initial_indices[i]].clone(); } else { refine_results[last_slices + i] = new double [tilesX * tilesY]; } } for (int nrefine = 0; nrefine < max_refines; nrefine++) { for (int i = 0; i < iter_titles.length; i++) { for (int i = 0; i < iter_indices.length; i++) { refine_titles[last_initial_slices + i * max_refines + nrefine ] = combo_dsn_titles[iter_indices[i]]+"-"+nrefine; } } if (noise_sigma_level != null) { // add initial offset to the expected disparity for (int i = 0; i < combo_dsn_change[0].length; i++) { combo_dsn_change[0][i] += noise_sigma_level[2]; } } for (int nrefine = 0; nrefine < max_refines; nrefine++) { Runtime.getRuntime().gc(); System.out.println("--- Free memory="+Runtime.getRuntime().freeMemory()+" (of "+Runtime.getRuntime().totalMemory()+")"); Loading @@ -3702,10 +3724,12 @@ public class OpticalFlow { combo_dsn_change[0], // final double [] disparity_ref, // disparity in the reference view tiles (Double.NaN - invalid) margin, // final int margin, nrefine, // final int nrefine, // just for debug title ( nrefine == (max_refines - 1)) && clt_parameters.inp.show_final_2d, // final boolean show_2d_corr, debug_level-5); // final int debug_level) Runtime.getRuntime().gc(); System.out.println("--- Free memory="+Runtime.getRuntime().freeMemory()+" (of "+Runtime.getRuntime().totalMemory()+")"); if (debug_level > 0) { (new ShowDoubleFloatArrays()).showArrays( disparity_map, Loading @@ -3725,12 +3749,24 @@ public class OpticalFlow { combo_dsn_change[1][nTile] = disparity_map[strength_index][nTile]; } } combo_dsn_change[combo_dsn_change.length -1] = disparity_map[disparity_index]; System.arraycopy(combo_dsn_change[0], 0, combo_dsn_change[2], 0, combo_dsn_change[0].length); // lma // combo_dsn_change[2] = combo_dsn_change[0].clone(); // lma double [] disp_lma = disparity_map[ImageDtt.DISPARITY_INDEX_POLY]; if (disp_lma != null) { for (int i = 0; i < disp_lma.length; i++) { if (Double.isNaN(disp_lma[i])) { combo_dsn_change[2][i] = Double.NaN; } } } for (int i = 0; i < iter_titles.length; i++) { // combo_dsn_change[combo_dsn_change.length -1] = disparity_map[disparity_index]; System.arraycopy(disparity_map[disparity_index], 0, combo_dsn_change[combo_dsn_change.length -1], 0, combo_dsn_change[0].length); // lma for (int i = 0; i < iter_indices.length; i++) { refine_results[last_initial_slices + (i * max_refines) + nrefine] = combo_dsn_change[iter_indices[i]].clone(); } // clt_parameters.inp.show_final_2d, // final boolean show_2d_corr, if (debug_level >0) { (new ShowDoubleFloatArrays()).showArrays( combo_dsn_change, Loading @@ -3754,13 +3790,19 @@ public class OpticalFlow { //noise_sigma_level String rslt_suffix = "-results-nonoise"; if (noise_sigma_level != null) { rslt_suffix = "-results-lev_"+noise_sigma_level[0]+"-sigma_"+noise_sigma_level[1]+"-offset"+noise_sigma_level[2]; rslt_suffix = // "-results-lev_"+noise_sigma_level[0]+ "-results-rnd_"+noise_sigma_level.scale_random+ "-fpn_"+ noise_sigma_level.scale_fpn+ "-sigma_"+ noise_sigma_level.sigma+ // [1]+ "-offset"+ noise_sigma_level.initial_offset+ // [2]; "-sensors"+ noise_sigma_level.used_sensors; if (ref_only) { rslt_suffix +="-nointer"; } else { rslt_suffix +="-inter"; } rslt_suffix +="-mask"+clt_parameters.img_dtt.dbg_pair_mask; //rslt_suffix +="-mask"+clt_parameters.img_dtt.dbg_pair_mask; } ref_scene.saveDoubleArrayInModelDirectory( rslt_suffix, // String suffix, Loading Loading @@ -4002,9 +4044,9 @@ public double[][] correlateIntersceneDebug( // only uses GPU and quad final double disparity_corr = debug_disparity_bias; // 0.0; // (z_correction == 0) ? 0.0 : geometryCorrection.getDisparityFromZ(1.0/z_correction); for (int nscene = 0; nscene < num_scenes; nscene++) { if (nscene == indx_ref) { System.out.println("\nCorrelating reference scene\n"); System.out.println("\nCorrelating reference scene, nrefine = "+nrefine+"\n"); } else { System.out.println("\nCorrelating scene "+nscene+"\n"); System.out.println("\nCorrelating scene "+nrefine+":"+nscene+"\n"); } String ts = scenes[nscene].getImageName(); double [][] scene_pXpYD; Loading Loading @@ -4936,9 +4978,9 @@ public double[][] correlateIntersceneDebug( // only uses GPU and quad TpTask[] tp_tasks_ref = null; for (int nscene = 0; nscene < num_scenes; nscene++) { if (nscene == indx_ref) { System.out.println("\nCorrelating reference scene\n"); System.out.println("\nCorrelating reference scene, nrefine = "+nrefine+"\n"); } else { System.out.println("\nCorrelating scene "+nscene+"\n"); System.out.println("\nCorrelating scene "+nrefine+":"+nscene+"\n"); } String ts = scenes[nscene].getImageName(); double [][] scene_pXpYD; Loading Loading @@ -5479,6 +5521,7 @@ public double[][] correlateIntersceneDebug( // only uses GPU and quad final double [] disparity_ref, // disparity in the reference view tiles (Double.NaN - invalid) final int margin, final int nrefine, // just for debug title final boolean show_2d_corr, final int debug_level ) { Loading @@ -5494,12 +5537,9 @@ public double[][] correlateIntersceneDebug( // only uses GPU and quad double fat_zero_single = clt_parameters.getGpuFatZero(ref_scene.isMonochrome()); // for single scene // TODO: make per-tile variable double scaled_fat_zero = fat_zero_single / (scenes.length); boolean show_accumulated_correlations =debug_level > -5; boolean show_reference_correlations =debug_level > -5; boolean show_accumulated_correlations = show_2d_corr || debug_level > -5; boolean show_reference_correlations = show_2d_corr || debug_level > -5; final float [][][] fclt_corr = (show_accumulated_correlations || show_reference_correlations) ? (new float [tilesX * tilesY][][]) : null; // not all used ImageDtt image_dtt; image_dtt = new ImageDtt( numSens, Loading @@ -5523,9 +5563,9 @@ public double[][] correlateIntersceneDebug( // only uses GPU and quad TpTask[] tp_tasks_ref = null; for (int nscene = 0; nscene < num_scenes; nscene++) { if (nscene == indx_ref) { System.out.println("\nCorrelating reference scene\n"); System.out.println("\nCorrelating reference scene, nrefine = "+nrefine+"\n"); } else { System.out.println("\nCorrelating scene "+nscene+"\n"); System.out.println("\nCorrelating scene "+nrefine+":"+nscene+"\n"); } String ts = scenes[nscene].getImageName(); double [][] scene_pXpYD; Loading src/main/java/com/elphel/imagej/tileprocessor/QuadCLTCPU.java +117 −45 File changed.Preview size limit exceeded, changes collapsed. Show changes src/main/java/com/elphel/imagej/tileprocessor/TwoQuadCLT.java +22 −8 Original line number Diff line number Diff line Loading @@ -8619,6 +8619,7 @@ if (debugLevel > -100) return true; // temporarily ! clt_parameters, colorProcParameters, // null, // noise_sigma_level, // double [] noise_sigma_level, null, // final QuadCLTCPU ref_scene, // may be null if scale_fpn <= 0 threadsMax, debugLevel); // temporarily fix wrong sign: Loading Loading @@ -8664,12 +8665,16 @@ if (debugLevel > -100) return true; // temporarily ! // double [] noise_sigma_level = {1.0, 1.5, 1.0}; // amount, sigma, offset // double [] noise_sigma_level = {3.0, 1.5, 1.0}; // amount, sigma, offset // double [] noise_sigma_level = {5.0, 1.5, 1.0}; // amount, sigma, offset double [] noise_sigma_level = null; if (clt_parameters.inp.noise_scale > 0.0) { noise_sigma_level = new double[] { // double [] noise_sigma_level = null; NoiseParameters noise_sigma_level = null; if ((clt_parameters.inp.noise.scale_random > 0.0) || (clt_parameters.inp.noise.scale_fpn > 0.0)){ noise_sigma_level = clt_parameters.inp.noise.clone(); /* new double[] { clt_parameters.inp.noise_scale, clt_parameters.inp.noise_sigma, clt_parameters.inp.initial_offset}; // amount, sigma, offset */ } boolean ref_only = clt_parameters.inp.ref_only; // true; // process only reference frame (false - inter-scene) Loading @@ -8692,6 +8697,7 @@ if (debugLevel > -100) return true; // temporarily ! clt_parameters, colorProcParameters, // noise_sigma_level, // double [] noise_sigma_level, null, // QuadCLTCPU ref_scene, // may be null if scale_fpn <= 0 threadsMax, clt_parameters.inp.noise_debug_level); // debugLevel); /**/ Loading Loading @@ -8722,12 +8728,16 @@ if (debugLevel > -100) return true; // temporarily ! // double [] noise_sigma_level = {1.0, 1.5, 1.0}; // amount, sigma, offset // double [] noise_sigma_level = {3.0, 1.5, 1.0}; // amount, sigma, offset // double [] noise_sigma_level = {5.0, 1.5, 1.0}; // amount, sigma, offset double [] noise_sigma_level = null; if (clt_parameters.inp.noise_scale >= 0.0) {// <0 - will generate no-noise data // double [] noise_sigma_level = null; NoiseParameters noise_sigma_level = null; if ((clt_parameters.inp.noise.scale_random >= 0.0) || (clt_parameters.inp.noise.scale_fpn >= 0.0)) {// <0 - will generate no-noise data noise_sigma_level = clt_parameters.inp.noise.clone(); /* noise_sigma_level = new double[] { clt_parameters.inp.noise_scale, clt_parameters.inp.noise_sigma, clt_parameters.inp.initial_offset}; // amount, sigma, offset clt_parameters.inp.initial_offset}; // amount, sigma, offset\ */ } boolean ref_only = clt_parameters.inp.ref_only; // true; // process only reference frame (false - inter-scene) Loading @@ -8750,6 +8760,7 @@ if (debugLevel > -100) return true; // temporarily ! clt_parameters, colorProcParameters, // noise_sigma_level, // double [] noise_sigma_level, null, // final QuadCLTCPU ref_scene, // may be null if scale_fpn <= 0 threadsMax, clt_parameters.inp.noise_debug_level); // debugLevel); /* Loading @@ -8760,7 +8771,10 @@ if (debugLevel > -100) return true; // temporarily ! */ // Create 4-slice image with noise from the current data if (noise_sigma_level != null) { String noisy_4slice_suffix = "-noise-level_"+ noise_sigma_level[0]+"-sigma_"+noise_sigma_level[1]; String noisy_4slice_suffix = "-noise-random_"+ noise_sigma_level.scale_random+ "-noise-fpn_"+ noise_sigma_level.scale_fpn+ "-sigma_"+noise_sigma_level.sigma; ref_quadCLT.genSave4sliceImage( clt_parameters, // CLTParameters clt_parameters, noisy_4slice_suffix, // String suffix, Loading
src/main/java/com/elphel/imagej/cameras/InterNoiseParameters.java +56 −25 Original line number Diff line number Diff line Loading @@ -28,64 +28,95 @@ package com.elphel.imagej.cameras; import java.util.Properties; import com.elphel.imagej.common.GenericJTabbedDialog; import com.elphel.imagej.tileprocessor.NoiseParameters; public class InterNoiseParameters { public double noise_sigma = 1.5; public double noise_scale = 0.01; public double initial_offset = 1.0; public NoiseParameters noise = new NoiseParameters (0.1, 0.0, 1.5, 1.0, 16); // public double noise_sigma = 1.5; // public double noise_scale = 0.01; // public double initial_offset = 1.0; public boolean ref_only = false; // also see imgdtt_params.dbg_pair_mask to switch between all pairs (63) and binocular only (1) public boolean show_final_2d = true; // show 2d correlations during last interation step public int noise_debug_level = -1; // Noise testing debug level public void dialogQuestions(GenericJTabbedDialog gd) { gd.addMessage("Additive noise parameters"); gd.addMessage("LMA other parameters"); gd.addNumericField("Noise Gaussian sigma", this.noise_sigma, 3,5,"pix", gd.addNumericField("Noise Gaussian sigma", this.noise.sigma, 3,5,"pix", "Blur noise with 2D Gaussian"); gd.addNumericField("Scale noise", this.noise_scale, 6,8,"", gd.addNumericField("Scale noise random (each scene indepemdent)", this.noise.scale_random, 6,8,"", "Scale noise relative to the average value of the color component"); gd.addNumericField("Scale noise FPN (same for each scene)", this.noise.scale_fpn, 6,8,"", "Scale noise relative to the average value of the color component."); gd.addNumericField("Offset target disparity", this.initial_offset, 3,5,"pix", gd.addNumericField("Offset target disparity", this.noise.initial_offset, 3,5,"pix", "Offset target disparity before attempting to correlate and refine."); gd.addNumericField("Subset number of sensors (2/4/8/16)", this.noise.used_sensors, 0,3,"", "Performance comparison - use only some of 16 sensors"); gd.addCheckbox ("Reference scene only", this.ref_only, "Process only reference scene (intra-scene, no inter-scene accumulation)."); gd.addCheckbox ("Show 2d correlations for the last iteration", this.show_final_2d, "Show single-scene and interframe 2d correlations for the last iteration"); gd.addNumericField("Debug level", this.noise_debug_level, 0,3,"", "Debug level of interscene noise testing."); } public void dialogAnswers(GenericJTabbedDialog gd) { this.noise_sigma = gd.getNextNumber(); this.noise_scale = gd.getNextNumber(); this.initial_offset = gd.getNextNumber(); this.noise.sigma = gd.getNextNumber(); this.noise.scale_random = gd.getNextNumber(); this.noise.scale_fpn = gd.getNextNumber(); this.noise.initial_offset = gd.getNextNumber(); this.noise.used_sensors = (int) gd.getNextNumber(); this.ref_only = gd.getNextBoolean(); this.show_final_2d = gd.getNextBoolean(); this.noise_debug_level = (int) gd.getNextNumber(); } public void setProperties(String prefix,Properties properties){ properties.setProperty(prefix+"noise_sigma", this.noise_sigma+""); properties.setProperty(prefix+"noise_scale", this.noise_scale+""); properties.setProperty(prefix+"initial_offset", this.initial_offset+""); properties.setProperty(prefix+"noise.sigma", this.noise.sigma+""); properties.setProperty(prefix+"noise.scale_random", this.noise.scale_random+""); properties.setProperty(prefix+"noise.scale_fpn", this.noise.scale_fpn+""); properties.setProperty(prefix+"noise.initial_offset", this.noise.initial_offset+""); properties.setProperty(prefix+"noise.used_sensors", this.noise.used_sensors+""); properties.setProperty(prefix+"ref_only", this.ref_only+""); properties.setProperty(prefix+"show_final_2d", this.show_final_2d+""); properties.setProperty(prefix+"noise_debug_level", this.noise_debug_level+""); } public void getProperties(String prefix,Properties properties){ if (properties.getProperty(prefix+"noise_sigma")!=null) this.noise_sigma=Double.parseDouble(properties.getProperty(prefix+"noise_sigma")); if (properties.getProperty(prefix+"noise_scale")!=null) this.noise_scale=Double.parseDouble(properties.getProperty(prefix+"noise_scale")); if (properties.getProperty(prefix+"initial_offset")!=null) this.initial_offset=Double.parseDouble(properties.getProperty(prefix+"initial_offset")); if (properties.getProperty(prefix+"noise.sigma")!=null) { this.noise.sigma=Double.parseDouble(properties.getProperty(prefix+"noise.sigma")); } else if (properties.getProperty(prefix+"noise_sigma")!=null) { // old format this.noise.sigma=Double.parseDouble(properties.getProperty(prefix+"noise_sigma")); } if (properties.getProperty(prefix+"noise.scale_random")!=null) { this.noise.scale_random=Double.parseDouble(properties.getProperty(prefix+"noise.scale_random")); } else if (properties.getProperty(prefix+"noise_scale")!=null) { this.noise.scale_random=Double.parseDouble(properties.getProperty(prefix+"noise_scale")); } if (properties.getProperty(prefix+"noise.scale_fpn")!=null) this.noise.scale_fpn=Double.parseDouble(properties.getProperty(prefix+"noise.scale_fpn")); if (properties.getProperty(prefix+"noise.initial_offset")!=null) { this.noise.initial_offset=Double.parseDouble(properties.getProperty(prefix+"noise.initial_offset")); } else if (properties.getProperty(prefix+"initial_offset")!=null) { this.noise.initial_offset=Double.parseDouble(properties.getProperty(prefix+"initial_offset")); } if (properties.getProperty(prefix+"noise.used_sensors")!=null) this.noise.used_sensors=Integer.parseInt(properties.getProperty(prefix+"noise.used_sensors")); if (properties.getProperty(prefix+"ref_only")!=null) this.ref_only=Boolean.parseBoolean(properties.getProperty(prefix+"ref_only")); if (properties.getProperty(prefix+"show_final_2d")!=null) this.show_final_2d=Boolean.parseBoolean(properties.getProperty(prefix+"show_final_2d")); if (properties.getProperty(prefix+"noise_debug_level")!=null) this.noise_debug_level=Integer.parseInt(properties.getProperty(prefix+"noise_debug_level")); } @Override public InterNoiseParameters clone() throws CloneNotSupportedException { InterNoiseParameters inp = new InterNoiseParameters(); inp.noise_sigma = this.noise_sigma; inp.noise_scale = this.noise_scale; inp.initial_offset = this.initial_offset; inp.noise = this.noise.clone(); inp.ref_only = this.ref_only; inp.show_final_2d = this.show_final_2d; inp.noise_debug_level = this.noise_debug_level; return inp; } }
src/main/java/com/elphel/imagej/tileprocessor/NoiseParameters.java 0 → 100644 +34 −0 Original line number Diff line number Diff line package com.elphel.imagej.tileprocessor; import com.elphel.imagej.cameras.InterNoiseParameters; public class NoiseParameters { public double scale_random = 0.1; public double scale_fpn = 0.0; public double sigma = 1.5; public double initial_offset = 1.0; public int used_sensors = 16; // 2/4/8/16 public NoiseParameters ( double scale_random, double scale_fpn, double sigma, double initial_offset, int used_sensors) { this.scale_random = scale_random; this.scale_fpn = scale_fpn; this.sigma = sigma; this.initial_offset= initial_offset; this.used_sensors = used_sensors; } @Override public NoiseParameters clone() throws CloneNotSupportedException { return new NoiseParameters( scale_random, scale_fpn, sigma, initial_offset, used_sensors); } }
src/main/java/com/elphel/imagej/tileprocessor/OpticalFlow.java +90 −50 Original line number Diff line number Diff line Loading @@ -3163,7 +3163,8 @@ public class OpticalFlow { ColorProcParameters colorProcParameters, QuadCLT.SetChannels [] set_channels, QuadCLT ref_scene, // ordered by increasing timestamps double [] noise_sigma_level, // double [] NoiseParameters noise_sigma_level, int debug_level ) { Loading Loading @@ -3192,6 +3193,7 @@ public class OpticalFlow { clt_parameters, colorProcParameters, // noise_sigma_level, // double [] noise_sigma_level, ref_scene, // QuadCLTCPU ref_scene, // may be null if scale_fpn <= 0 threadsMax, -1); // debug_level); scenes[i].setDSRBG( Loading Loading @@ -3276,6 +3278,7 @@ public class OpticalFlow { combo_dsn_change[0], // final double [] disparity_ref, // disparity in the reference view tiles (Double.NaN - invalid) margin, // final int margin, nrefine, // final int nrefine, // just for debug title clt_parameters.inp.show_final_2d, // final boolean show_2d_corr, debug_level-5); // final int debug_level) Runtime.getRuntime().gc(); Loading Loading @@ -3386,7 +3389,8 @@ public class OpticalFlow { boolean ref_only, // process only reference frame (false - inter-scene) ColorProcParameters colorProcParameters, QuadCLT ref_scene, // ordered by increasing timestamps double [] noise_sigma_level, // double [] NoiseParameters noise_sigma_level, int debug_level ) { Loading @@ -3405,6 +3409,7 @@ public class OpticalFlow { clt_parameters, colorProcParameters, // noise_sigma_level, // double [] noise_sigma_level, ref_scene, // QuadCLTCPU ref_scene, // may be null if scale_fpn <= 0 threadsMax, -1); // debug_level); scenes[i].setDSRBG( Loading Loading @@ -3475,7 +3480,7 @@ public class OpticalFlow { } if (noise_sigma_level != null) { // add initial offset to the expected disparity for (int i = 0; i < combo_dsn_change[0].length; i++) { combo_dsn_change[0][i] += noise_sigma_level[2]; combo_dsn_change[0][i] += noise_sigma_level.initial_offset; // [2]; } } for (int nrefine = 0; nrefine < max_refines; nrefine++) { Loading Loading @@ -3543,13 +3548,20 @@ public class OpticalFlow { //noise_sigma_level String rslt_suffix = "-results-nonoise"; if (noise_sigma_level != null) { rslt_suffix = "-results-lev_"+noise_sigma_level[0]+"-sigma_"+noise_sigma_level[1]+"-offset"+noise_sigma_level[2]; // rslt_suffix = "-results-lev_"+noise_sigma_level[0]+"-sigma_"+noise_sigma_level[1]+"-offset"+noise_sigma_level[2]; rslt_suffix = "-results-rnd_"+noise_sigma_level.scale_random+ "-fpn_"+ noise_sigma_level.scale_fpn+ "-sigma_"+ noise_sigma_level.sigma+ // [1]+ "-offset"+ noise_sigma_level.initial_offset+ // [2]; "-sensors"+ noise_sigma_level.used_sensors; if (ref_only) { rslt_suffix +="-nointer"; } else { rslt_suffix +="-inter"; } rslt_suffix +="-mask"+clt_parameters.img_dtt.dbg_pair_mask; // rslt_suffix +="-mask"+clt_parameters.img_dtt.dbg_pair_mask; } ref_scene.saveDoubleArrayInModelDirectory( rslt_suffix, // String suffix, Loading Loading @@ -3597,7 +3609,8 @@ public class OpticalFlow { boolean ref_only, // process only reference frame (false - inter-scene) ColorProcParameters colorProcParameters, QuadCLT ref_scene, // ordered by increasing timestamps double [] noise_sigma_level, // double [] NoiseParameters noise_sigma_level, int debug_level ) { Loading @@ -3616,6 +3629,7 @@ public class OpticalFlow { clt_parameters, colorProcParameters, // noise_sigma_level, // double [] noise_sigma_level, ref_scene, // QuadCLTCPU ref_scene, // may be null if scale_fpn <= 0 threadsMax, -1); // debug_level); scenes[i].setDSRBG( Loading @@ -3624,31 +3638,44 @@ public class OpticalFlow { updateStatus, // boolean updateStatus, -1); // debug_level); // int debugLevel) } // String [] combo_dsn_titles = {"disp", "strength", "num_valid","change"}; String [] combo_dsn_titles = {"disp", "strength","disp_lma","num_valid","change"}; // final String [] iter_titles = {"disp", "diff", "strength","disp_lma"}; final int [] iter_indices = {0,1,2,4}; // which to save for each iteration: {"disp", "strength","disp_lma","change"}; final int [] initial_indices = {0,1,3}; // initial: "disp", "strength","num_valid" double [][] combo_dsn = null; if (noise_sigma_level == null) { combo_dsn = prepareInitialComboDS( double[][] combo_dsn0 = prepareInitialComboDS( // 3 clt_parameters, // final CLTParameters clt_parameters, scenes, // final QuadCLT [] scenes, indx_ref, // final int indx_ref, debug_level-2); // final int debug_level); combo_dsn = new double[combo_dsn_titles.length - 1][]; for (int i = 0; i < combo_dsn0.length; i++) { combo_dsn[initial_indices[i]] = combo_dsn0[i]; // "disp", "strength", <null>, "num_valid" } } else { combo_dsn = ref_scene. readDoubleArrayFromModelDirectory( combo_dsn = ref_scene. readDoubleArrayFromModelDirectory( //"disp", "strength","disp_lma","num_valid" "-results-nonoise", // String suffix, 3, // int num_slices, // (0 - all) combo_dsn_titles.length - 1, // 4 null); // int [] wh); } final double [][] combo_dsn_change = new double [combo_dsn.length+1][]; for (int i = 0; i < combo_dsn.length; i++) { combo_dsn_change[i] = combo_dsn[i]; } // final double [][] combo_dsn_change = new double [combo_dsn.length+1][]; final int margin = 8; final int tilesX = ref_scene.getTileProcessor().getTilesX(); final int tilesY = ref_scene.getTileProcessor().getTilesY(); String [] combo_dsn_titles = {"disp", "strength", "num_valid","change"}; final double [][] combo_dsn_change = new double [combo_dsn_titles.length] [tilesX*tilesY]; for (int i = 0; i < combo_dsn.length; i++) { // 4 elements: "disp", "strength","disp_lma","num_valid" if (combo_dsn[i] != null) combo_dsn_change[i] = combo_dsn[i]; // all but change } if (noise_sigma_level != null) { // add initial offset to the expected disparity for (int i = 0; i < combo_dsn_change[0].length; i++) { combo_dsn_change[0][i] += noise_sigma_level.initial_offset; // [2]; } } // combo_dsn_change[combo_dsn_change.length - 1] = new double [tilesX*tilesY]; if (debug_level > 0) { (new ShowDoubleFloatArrays()).showArrays( combo_dsn_change, Loading @@ -3660,35 +3687,30 @@ public class OpticalFlow { } final int max_refines = 10; final String [] iter_titles = {"disp", "diff", "strength"}; final int [] iter_indices = {0,1,3}; // final String [] iter_titles = {"disp", "diff", "strength"}; final int last_slices = combo_dsn_titles.length; final int last_initial_slices = last_slices + iter_titles.length; final int last_initial_slices = last_slices + initial_indices.length; final double [][] refine_results = new double [last_slices + 3 * (max_refines + 1)][]; // final double [][] refine_results = new double [last_slices + 3 * (max_refines + 1)][]; final double [][] refine_results = new double [last_slices + 4 * (max_refines + 1)][]; String [] refine_titles = new String [refine_results.length]; for (int i = 0; i < combo_dsn_titles.length; i++) { refine_results[i] = combo_dsn_change[i]; refine_titles[i] = combo_dsn_titles[i]+"-last"; refine_results[i] = combo_dsn_change[i]; // first 5 - references to 5-element combo_dsn_change refine_titles[i] = combo_dsn_titles[i]+"-last"; // "disp", "strength","disp_lma","num_valid","change" } for (int i = 0; i < iter_titles.length; i++) { refine_titles[last_slices + i] = iter_titles[i]+"-initial"; if (combo_dsn_change[iter_indices[i]] != null) { refine_results[last_slices + i] = combo_dsn_change[iter_indices[i]].clone(); for (int i = 0; i < initial_indices.length; i++) { refine_titles[last_slices + i] = combo_dsn_titles[initial_indices[i]]+"-initial"; // "disp", "strength","num_valid" if (combo_dsn_change[initial_indices[i]] != null) { refine_results[last_slices + i] = combo_dsn_change[initial_indices[i]].clone(); } else { refine_results[last_slices + i] = new double [tilesX * tilesY]; } } for (int nrefine = 0; nrefine < max_refines; nrefine++) { for (int i = 0; i < iter_titles.length; i++) { for (int i = 0; i < iter_indices.length; i++) { refine_titles[last_initial_slices + i * max_refines + nrefine ] = combo_dsn_titles[iter_indices[i]]+"-"+nrefine; } } if (noise_sigma_level != null) { // add initial offset to the expected disparity for (int i = 0; i < combo_dsn_change[0].length; i++) { combo_dsn_change[0][i] += noise_sigma_level[2]; } } for (int nrefine = 0; nrefine < max_refines; nrefine++) { Runtime.getRuntime().gc(); System.out.println("--- Free memory="+Runtime.getRuntime().freeMemory()+" (of "+Runtime.getRuntime().totalMemory()+")"); Loading @@ -3702,10 +3724,12 @@ public class OpticalFlow { combo_dsn_change[0], // final double [] disparity_ref, // disparity in the reference view tiles (Double.NaN - invalid) margin, // final int margin, nrefine, // final int nrefine, // just for debug title ( nrefine == (max_refines - 1)) && clt_parameters.inp.show_final_2d, // final boolean show_2d_corr, debug_level-5); // final int debug_level) Runtime.getRuntime().gc(); System.out.println("--- Free memory="+Runtime.getRuntime().freeMemory()+" (of "+Runtime.getRuntime().totalMemory()+")"); if (debug_level > 0) { (new ShowDoubleFloatArrays()).showArrays( disparity_map, Loading @@ -3725,12 +3749,24 @@ public class OpticalFlow { combo_dsn_change[1][nTile] = disparity_map[strength_index][nTile]; } } combo_dsn_change[combo_dsn_change.length -1] = disparity_map[disparity_index]; System.arraycopy(combo_dsn_change[0], 0, combo_dsn_change[2], 0, combo_dsn_change[0].length); // lma // combo_dsn_change[2] = combo_dsn_change[0].clone(); // lma double [] disp_lma = disparity_map[ImageDtt.DISPARITY_INDEX_POLY]; if (disp_lma != null) { for (int i = 0; i < disp_lma.length; i++) { if (Double.isNaN(disp_lma[i])) { combo_dsn_change[2][i] = Double.NaN; } } } for (int i = 0; i < iter_titles.length; i++) { // combo_dsn_change[combo_dsn_change.length -1] = disparity_map[disparity_index]; System.arraycopy(disparity_map[disparity_index], 0, combo_dsn_change[combo_dsn_change.length -1], 0, combo_dsn_change[0].length); // lma for (int i = 0; i < iter_indices.length; i++) { refine_results[last_initial_slices + (i * max_refines) + nrefine] = combo_dsn_change[iter_indices[i]].clone(); } // clt_parameters.inp.show_final_2d, // final boolean show_2d_corr, if (debug_level >0) { (new ShowDoubleFloatArrays()).showArrays( combo_dsn_change, Loading @@ -3754,13 +3790,19 @@ public class OpticalFlow { //noise_sigma_level String rslt_suffix = "-results-nonoise"; if (noise_sigma_level != null) { rslt_suffix = "-results-lev_"+noise_sigma_level[0]+"-sigma_"+noise_sigma_level[1]+"-offset"+noise_sigma_level[2]; rslt_suffix = // "-results-lev_"+noise_sigma_level[0]+ "-results-rnd_"+noise_sigma_level.scale_random+ "-fpn_"+ noise_sigma_level.scale_fpn+ "-sigma_"+ noise_sigma_level.sigma+ // [1]+ "-offset"+ noise_sigma_level.initial_offset+ // [2]; "-sensors"+ noise_sigma_level.used_sensors; if (ref_only) { rslt_suffix +="-nointer"; } else { rslt_suffix +="-inter"; } rslt_suffix +="-mask"+clt_parameters.img_dtt.dbg_pair_mask; //rslt_suffix +="-mask"+clt_parameters.img_dtt.dbg_pair_mask; } ref_scene.saveDoubleArrayInModelDirectory( rslt_suffix, // String suffix, Loading Loading @@ -4002,9 +4044,9 @@ public double[][] correlateIntersceneDebug( // only uses GPU and quad final double disparity_corr = debug_disparity_bias; // 0.0; // (z_correction == 0) ? 0.0 : geometryCorrection.getDisparityFromZ(1.0/z_correction); for (int nscene = 0; nscene < num_scenes; nscene++) { if (nscene == indx_ref) { System.out.println("\nCorrelating reference scene\n"); System.out.println("\nCorrelating reference scene, nrefine = "+nrefine+"\n"); } else { System.out.println("\nCorrelating scene "+nscene+"\n"); System.out.println("\nCorrelating scene "+nrefine+":"+nscene+"\n"); } String ts = scenes[nscene].getImageName(); double [][] scene_pXpYD; Loading Loading @@ -4936,9 +4978,9 @@ public double[][] correlateIntersceneDebug( // only uses GPU and quad TpTask[] tp_tasks_ref = null; for (int nscene = 0; nscene < num_scenes; nscene++) { if (nscene == indx_ref) { System.out.println("\nCorrelating reference scene\n"); System.out.println("\nCorrelating reference scene, nrefine = "+nrefine+"\n"); } else { System.out.println("\nCorrelating scene "+nscene+"\n"); System.out.println("\nCorrelating scene "+nrefine+":"+nscene+"\n"); } String ts = scenes[nscene].getImageName(); double [][] scene_pXpYD; Loading Loading @@ -5479,6 +5521,7 @@ public double[][] correlateIntersceneDebug( // only uses GPU and quad final double [] disparity_ref, // disparity in the reference view tiles (Double.NaN - invalid) final int margin, final int nrefine, // just for debug title final boolean show_2d_corr, final int debug_level ) { Loading @@ -5494,12 +5537,9 @@ public double[][] correlateIntersceneDebug( // only uses GPU and quad double fat_zero_single = clt_parameters.getGpuFatZero(ref_scene.isMonochrome()); // for single scene // TODO: make per-tile variable double scaled_fat_zero = fat_zero_single / (scenes.length); boolean show_accumulated_correlations =debug_level > -5; boolean show_reference_correlations =debug_level > -5; boolean show_accumulated_correlations = show_2d_corr || debug_level > -5; boolean show_reference_correlations = show_2d_corr || debug_level > -5; final float [][][] fclt_corr = (show_accumulated_correlations || show_reference_correlations) ? (new float [tilesX * tilesY][][]) : null; // not all used ImageDtt image_dtt; image_dtt = new ImageDtt( numSens, Loading @@ -5523,9 +5563,9 @@ public double[][] correlateIntersceneDebug( // only uses GPU and quad TpTask[] tp_tasks_ref = null; for (int nscene = 0; nscene < num_scenes; nscene++) { if (nscene == indx_ref) { System.out.println("\nCorrelating reference scene\n"); System.out.println("\nCorrelating reference scene, nrefine = "+nrefine+"\n"); } else { System.out.println("\nCorrelating scene "+nscene+"\n"); System.out.println("\nCorrelating scene "+nrefine+":"+nscene+"\n"); } String ts = scenes[nscene].getImageName(); double [][] scene_pXpYD; Loading
src/main/java/com/elphel/imagej/tileprocessor/QuadCLTCPU.java +117 −45 File changed.Preview size limit exceeded, changes collapsed. Show changes
src/main/java/com/elphel/imagej/tileprocessor/TwoQuadCLT.java +22 −8 Original line number Diff line number Diff line Loading @@ -8619,6 +8619,7 @@ if (debugLevel > -100) return true; // temporarily ! clt_parameters, colorProcParameters, // null, // noise_sigma_level, // double [] noise_sigma_level, null, // final QuadCLTCPU ref_scene, // may be null if scale_fpn <= 0 threadsMax, debugLevel); // temporarily fix wrong sign: Loading Loading @@ -8664,12 +8665,16 @@ if (debugLevel > -100) return true; // temporarily ! // double [] noise_sigma_level = {1.0, 1.5, 1.0}; // amount, sigma, offset // double [] noise_sigma_level = {3.0, 1.5, 1.0}; // amount, sigma, offset // double [] noise_sigma_level = {5.0, 1.5, 1.0}; // amount, sigma, offset double [] noise_sigma_level = null; if (clt_parameters.inp.noise_scale > 0.0) { noise_sigma_level = new double[] { // double [] noise_sigma_level = null; NoiseParameters noise_sigma_level = null; if ((clt_parameters.inp.noise.scale_random > 0.0) || (clt_parameters.inp.noise.scale_fpn > 0.0)){ noise_sigma_level = clt_parameters.inp.noise.clone(); /* new double[] { clt_parameters.inp.noise_scale, clt_parameters.inp.noise_sigma, clt_parameters.inp.initial_offset}; // amount, sigma, offset */ } boolean ref_only = clt_parameters.inp.ref_only; // true; // process only reference frame (false - inter-scene) Loading @@ -8692,6 +8697,7 @@ if (debugLevel > -100) return true; // temporarily ! clt_parameters, colorProcParameters, // noise_sigma_level, // double [] noise_sigma_level, null, // QuadCLTCPU ref_scene, // may be null if scale_fpn <= 0 threadsMax, clt_parameters.inp.noise_debug_level); // debugLevel); /**/ Loading Loading @@ -8722,12 +8728,16 @@ if (debugLevel > -100) return true; // temporarily ! // double [] noise_sigma_level = {1.0, 1.5, 1.0}; // amount, sigma, offset // double [] noise_sigma_level = {3.0, 1.5, 1.0}; // amount, sigma, offset // double [] noise_sigma_level = {5.0, 1.5, 1.0}; // amount, sigma, offset double [] noise_sigma_level = null; if (clt_parameters.inp.noise_scale >= 0.0) {// <0 - will generate no-noise data // double [] noise_sigma_level = null; NoiseParameters noise_sigma_level = null; if ((clt_parameters.inp.noise.scale_random >= 0.0) || (clt_parameters.inp.noise.scale_fpn >= 0.0)) {// <0 - will generate no-noise data noise_sigma_level = clt_parameters.inp.noise.clone(); /* noise_sigma_level = new double[] { clt_parameters.inp.noise_scale, clt_parameters.inp.noise_sigma, clt_parameters.inp.initial_offset}; // amount, sigma, offset clt_parameters.inp.initial_offset}; // amount, sigma, offset\ */ } boolean ref_only = clt_parameters.inp.ref_only; // true; // process only reference frame (false - inter-scene) Loading @@ -8750,6 +8760,7 @@ if (debugLevel > -100) return true; // temporarily ! clt_parameters, colorProcParameters, // noise_sigma_level, // double [] noise_sigma_level, null, // final QuadCLTCPU ref_scene, // may be null if scale_fpn <= 0 threadsMax, clt_parameters.inp.noise_debug_level); // debugLevel); /* Loading @@ -8760,7 +8771,10 @@ if (debugLevel > -100) return true; // temporarily ! */ // Create 4-slice image with noise from the current data if (noise_sigma_level != null) { String noisy_4slice_suffix = "-noise-level_"+ noise_sigma_level[0]+"-sigma_"+noise_sigma_level[1]; String noisy_4slice_suffix = "-noise-random_"+ noise_sigma_level.scale_random+ "-noise-fpn_"+ noise_sigma_level.scale_fpn+ "-sigma_"+noise_sigma_level.sigma; ref_quadCLT.genSave4sliceImage( clt_parameters, // CLTParameters clt_parameters, noisy_4slice_suffix, // String suffix,