Loading src/main/java/com/elphel/imagej/tileprocessor/Corr2dLMA.java +40 −7 Original line number Diff line number Diff line Loading @@ -2605,7 +2605,8 @@ public class Corr2dLMA { double lma_max_area, // maximal half-area (if > 0.0) double lma_str_scale, // convert lma-generated strength to match previous ones - scale double lma_str_offset, // convert lma-generated strength to match previous ones - add to result double lma_ac_offset // add to a,c coefficients for near-lines where A,C could become negative because of window double lma_ac_offset, // add to a,c coefficients for near-lines where A,C could become negative because of window double lma_relax_indiv_max // double relax_indiv_max ){ return lmaDisparityStrengths( bypass_tests, //boolean bypass_tests, // keep even weak for later analysis. Normally - only in test mode Loading @@ -2619,7 +2620,8 @@ public class Corr2dLMA { lma_str_scale, // convert lma-generated strength to match previous ones - scale lma_str_offset, // convert lma-generated strength to match previous ones - add to result false, // boolean dbg_mode lma_ac_offset // add to a,c coefficients for near-lines where A,C could become negative because of window lma_ac_offset, // add to a,c coefficients for near-lines where A,C could become negative because of window lma_relax_indiv_max // double relax_indiv_max )[0]; } Loading @@ -2636,12 +2638,19 @@ public class Corr2dLMA { double lma_str_scale, // convert lma-generated strength to match previous ones - scale double lma_str_offset, // convert lma-generated strength to match previous ones - add to result boolean dbg_mode, double lma_ac_offset // add to a,c coefficients for near-lines where A,C could become negative because of window double lma_ac_offset, // add to a,c coefficients for near-lines where A,C could become negative because of window double relax_indiv_max // = 2.0; // relax lma_max_rel_rms and lma_min_strength for individual maximum ){ // double relax_indiv_max = 2.0; // relax lma_max_rel_rms and lma_min_strength for individual maximum // from the best one double [][][] ds = new double[numMax][numTiles][dbg_mode? 14 : 3]; int reason_index = (dbg_mode && bypass_tests)? 13:-1; double [] rms = getRmsTile(); double [] avg_g = new double [numTiles]; // best avg among all maximums for (int tile = 0; tile < numTiles; tile++) { double [][] maxmaxmin_amp = getMaxMaxMinAmpTile(); avg_g[tile] = 0.50*(maxmaxmin_amp[tile][0]+maxmaxmin_amp[tile][1]); } for (int nmax = 0; nmax < numMax; nmax++) { double [][] maxmin_amp = getMaxMinAmpTile(nmax); // nmax double [][] abc = getABCTile(nmax); // nmax Loading Loading @@ -2673,7 +2682,10 @@ public class Corr2dLMA { } double avg = 0.50*(maxmin_amp[tile][0]+maxmin_amp[tile][1]); // max_min[1] can be negative - filter it out? double rrms = rms[tile]/avg; if ((lma_max_rel_rms > 0.00) && (rrms > lma_max_rel_rms)) { double rrms_g = rms[tile]/avg_g[tile]; if ((lma_max_rel_rms > 0.0) && ( (rrms > (lma_max_rel_rms * relax_indiv_max)) || // compare for this maximum (rrms_g > lma_max_rel_rms) )) { // compare for the best maximum if (bypass_tests) { if ((reason_index > 0) && (ds[nmax][tile][reason_index] == 0)) ds[nmax][tile][reason_index] = 1; } else { Loading Loading @@ -2713,8 +2725,10 @@ public class Corr2dLMA { } } double strength = Math.sqrt(avg/rrms); // double disparity = -all_pars[DISP_INDEX + offs]; if ((strength < lma_min_strength) || Double.isNaN(disparity)) { double strength_g = Math.sqrt(avg_g[tile]/rrms_g); if ( (strength < (lma_min_strength/relax_indiv_max)) || // compare for this maximum (strength_g < lma_min_strength) || // compare for the strongest maximum Double.isNaN(disparity)) { if (bypass_tests) { if ((reason_index > 0) && (ds[nmax][tile][reason_index] == 0)) ds[nmax][tile][reason_index] = 6; } else { Loading Loading @@ -2974,6 +2988,25 @@ public class Corr2dLMA { } return maxmins; } /** * Find maximal values for each element of maxmins among all maximums (currently 1 or 2) * @return */ public double [][] getMaxMaxMinAmpTile(){ double [][] maxmaxmins = getMaxMinAmpTile(0); for (int nmax = 1; nmax < numMax; nmax++) { // compare with all other maximums double [][] maxmins = getMaxMinAmpTile(nmax); for (int tile = 0; tile < numTiles; tile++) { maxmaxmins[tile][0] = Math.max(maxmaxmins[tile][0], maxmins[tile][0]); maxmaxmins[tile][1] = Math.max(maxmaxmins[tile][1], maxmins[tile][1]); } } return maxmaxmins; } /** * Get maximal/minimal (per pair) amplitudes and values for each tile * @return array [tile][{vmax, vmin}] Loading src/main/java/com/elphel/imagej/tileprocessor/Correlation2d.java +8 −10 Original line number Diff line number Diff line Loading @@ -3838,7 +3838,8 @@ public class Correlation2d { imgdtt_params.lma_max_area, //double lma_max_area, // maximal half-area (if > 0.0) imgdtt_params.lma_str_scale, // convert lma-generated strength to match previous ones - scale imgdtt_params.lma_str_offset, // convert lma-generated strength to match previous ones - add to result imgdtt_params.lma_ac_offset // Add to A, C coefficients for near-lines where A,C could become negative because of window imgdtt_params.lma_ac_offset, // Add to A, C coefficients for near-lines where A,C could become negative because of window imgdtt_params.lma_relax_indiv_max// double lma_relax_indiv_max // double relax_indiv_max ); if (debug_level > 0) lma.printStats(ds,clust_width); Loading Loading @@ -3943,7 +3944,8 @@ public class Correlation2d { imgdtt_params.lma_max_area, //double lma_max_area, // maximal half-area (if > 0.0) imgdtt_params.lma_str_scale, // convert lma-generated strength to match previous ones - scale imgdtt_params.lma_str_offset, // convert lma-generated strength to match previous ones - add to result imgdtt_params.lma_ac_offset // Add to A, C coefficients for near-lines where A,C could become negative because of window imgdtt_params.lma_ac_offset, // Add to A, C coefficients for near-lines where A,C could become negative because of window imgdtt_params.lma_relax_indiv_max// double lma_relax_indiv_max // double relax_indiv_max ); if (debug_level > 0) { // -2) { lma.printStats(ds,clust_width); Loading Loading @@ -4452,8 +4454,8 @@ public class Correlation2d { imgdtt_params.lmas_max_area, //double lma_max_area, // maximal half-area (if > 0.0) imgdtt_params.lma_str_scale, // convert lma-generated strength to match previous ones - scale imgdtt_params.lma_str_offset, // convert lma-generated strength to match previous ones - add to result imgdtt_params.lma_ac_offset // Add to A, C coefficients for near-lines where A,C could become negative because of window imgdtt_params.lma_ac_offset, // Add to A, C coefficients for near-lines where A,C could become negative because of window imgdtt_params.lma_relax_indiv_max// double lma_relax_indiv_max // double relax_indiv_max ); if (dispStr[0][1] <= 0) { lmaSuccess = false; Loading Loading @@ -4985,12 +4987,8 @@ public class Correlation2d { imgdtt_params.lma_str_scale, // convert lma-generated strength to match previous ones - scale imgdtt_params.lma_str_offset, // convert lma-generated strength to match previous ones - add to result false, // boolean dbg_mode imgdtt_params.lma_ac_offset // Add to A, C coefficients for near-lines where A,C could become negative because of window imgdtt_params.lma_ac_offset, // Add to A, C coefficients for near-lines where A,C could become negative because of window imgdtt_params.lma_relax_indiv_max// double lma_relax_indiv_max // double relax_indiv_max ); for (int nmax = 00; nmax < dispStrs.length; nmax++) if (dispStrs[nmax][0][1] <= 0) { lmaSuccess = false; Loading src/main/java/com/elphel/imagej/tileprocessor/ImageDtt.java +70 −7 Original line number Diff line number Diff line Loading @@ -2110,8 +2110,9 @@ public class ImageDtt extends ImageDttCPU { if (maxes.length == 1) { // normally should be just one. If 2 - OK, use old splitting (abnormal) maxes = split_far_max( maxes[0], // double [] max, far_fgbg[nTile][0], // double diff, far_fgbg[nTile][1], // double kfg, far_fgbg[nTile][0], // double fg_targ, far_fgbg[nTile][1], // double bg_targ, far_fgbg[nTile][2], // double kfg, imgdtt_params.mcorr_dual_fract); // 0.1); // double min_k); if (maxes == null) { continue; Loading Loading @@ -2202,7 +2203,8 @@ public class ImageDtt extends ImageDttCPU { imgdtt_params.lma_str_scale, // convert lma-generated strength to match previous ones - scale imgdtt_params.lma_str_offset, // convert lma-generated strength to match previous ones - add to result dbg_dispStrs, // false // boolean dbg_mode imgdtt_params.lma_ac_offset // Add to A, C coefficients for near-lines where A,C could become negative because of window imgdtt_params.lma_ac_offset, // Add to A, C coefficients for near-lines where A,C could become negative because of window imgdtt_params.lma_relax_indiv_max// double lma_relax_indiv_max // double relax_indiv_max ); disp_str_lma = new double [dispStrs.length][]; // order matching input ones for (int nmax = 0;nmax < dispStrs.length; nmax++) { Loading Loading @@ -2245,6 +2247,14 @@ public class ImageDtt extends ImageDttCPU { // set BG to DISPARITY_INDEX_CM/DISPARITY_INDEX_CM+1 disparity_map[DISPARITY_INDEX_CM ][nTile] = disp_str_lma[1-indx][0]; // disparity LMA disparity_map[DISPARITY_INDEX_CM + 1][nTile] = disp_str_lma[1-indx][2]; // strength LMA if (debugTile1) { // FIXME: remove debugTile1! System.out.println("clt_process_tl_correlations() disp_str_lma:"); for (int nmax = 0; nmax < disp_str_lma.length; nmax++) { System.out.println(String.format("disp_str_lma[%d][0]=%f, disp_str_lma[%d][1]=%f disp_str_lma[%d][2]=%f", nmax, disp_str_lma[nmax][0], nmax, disp_str_lma[nmax][1], nmax, disp_str_lma[nmax][2])); } } } } else { disparity_map[DISPARITY_INDEX_CM ][nTile] = disp_str_sel[0][0]; // disparity non-LMA Loading Loading @@ -2342,7 +2352,8 @@ public class ImageDtt extends ImageDttCPU { imgdtt_params.lmas_max_area, //double lma_max_area, // maximal half-area (if > 0.0) imgdtt_params.lma_str_scale, // convert lma-generated strength to match previous ones - scale imgdtt_params.lma_str_offset, // convert lma-generated strength to match previous ones - add to result imgdtt_params.lma_ac_offset // Add to A, C coefficients for near-lines where A,C could become negative because of window imgdtt_params.lma_ac_offset, // Add to A, C coefficients for near-lines where A,C could become negative because of window imgdtt_params.lma_relax_indiv_max// double lma_relax_indiv_max // double relax_indiv_max ); if (ds != null) { // always true // if (disparity_map!=null) { Loading Loading @@ -2499,6 +2510,56 @@ public class ImageDtt extends ImageDttCPU { return null; // too large difference between strong and weak; } return maxes; } /** * Providing initial 2-max for LMA using provided hints * There can be 3 cases: * 1 - initial run where target disparity is a combined (unresolved) maximum (trust only difference and kfg) * 2 - Refining FG - target_disparity is FG (found after initial run), so fg_targ==0, * bg_target defined from the first run * 3 - Refining BG - target_disparity is BG (found in initial run, nut during refining FG), bg_targ=0 * input max[] is accurate only when centered, can not be trusted when target_disparity was offset (either FG or BG) * * @param max disparity+strength of a single unresolved maximum using center-of-mass (or poly?) method * @param fg_targ FG disparity hint relative to target disparity * @param bg_targ BG disparity hint relative to target disparity * @param kfg strength fraction of the FG maximum (0.5 - equal FG/BG strength) * @param min_k do not try to process camel case if one maximum is much weaker than the other * @return a pair of d/s pairs, starting with a strongest one. Null on failure. */ public static double [][] split_far_max( double [] max, double fg_targ, double bg_targ, double kfg, double min_k){ if (((kfg < min_k) || ((1.0 - kfg) < min_k))) { return null; // one of the maximums is too weak with respect to the other } double [][] maxes = new double [2][2]; if (kfg <= 0) { return null; //diff and kfg can not be 0.0 simultaneously (or use this case for something?) } if ((fg_targ != 0.0) && (bg_targ != 0.0)) { // initial run that used average double diff = fg_targ - bg_targ; maxes[0][0] = max[0] + diff * (1.0 - kfg); // disparity(FG) maxes[1][0] = max[0] - diff * kfg; // disparity(BG) } else { // refinement run when target_disparity was either FG or BG, so either fg_targ or bg_targ is 0 maxes[0][0] = fg_targ; // disparity(FG) maxes[1][0] = bg_targ; // disparity(BG) } maxes[0][1] = max[1] * kfg; // strength(FG) maxes[1][1] = max[1] * (1.0 - kfg); // strength(BG) if (maxes[1][1] > maxes[0][1]) { double [] tmp = maxes[0]; maxes[0] = maxes[1]; maxes[1]= tmp; } if ((maxes[0][1] / maxes[1][1]) > (1.0 - min_k)/min_k) { return null; // too large difference between strong and weak; } return maxes; } Loading Loading @@ -3877,7 +3938,8 @@ public class ImageDtt extends ImageDttCPU { imgdtt_params.lmas_max_area, // double lma_max_area, // maximal half-area (if > 0.0) imgdtt_params.lma_str_scale, // convert lma-generated strength to match previous ones - scale imgdtt_params.lma_str_offset, // convert lma-generated strength to match previous ones - add to result imgdtt_params.lma_ac_offset // Add to A, C coefficients for near-lines where A,C could become negative because of window imgdtt_params.lma_ac_offset, // Add to A, C coefficients for near-lines where A,C could become negative because of window imgdtt_params.lma_relax_indiv_max// double lma_relax_indiv_max // double relax_indiv_max )[0]; if (tile_lma_debug_level > 0) { double [][] ds_dbg = {disp_str}; Loading Loading @@ -4176,7 +4238,8 @@ public class ImageDtt extends ImageDttCPU { imgdtt_params.lmas_max_area, // double lma_max_area, // maximal half-area (if > 0.0) imgdtt_params.lma_str_scale, // convert lma-generated strength to match previous ones - scale imgdtt_params.lma_str_offset, // convert lma-generated strength to match previous ones - add to result imgdtt_params.lma_ac_offset // Add to A, C coefficients for near-lines where A,C could become negative because of window imgdtt_params.lma_ac_offset, // Add to A, C coefficients for near-lines where A,C could become negative because of window imgdtt_params.lma_relax_indiv_max// double lma_relax_indiv_max // double relax_indiv_max )[0]; if (tile_lma_debug_level > 0) { double [][] ds_dbg = {disp_str}; Loading src/main/java/com/elphel/imagej/tileprocessor/ImageDttCPU.java +14 −12 Original line number Diff line number Diff line Loading @@ -2212,7 +2212,8 @@ public class ImageDttCPU { imgdtt_params.lmas_max_area, // double lma_max_area, // maximal half-area (if > 0.0) imgdtt_params.lma_str_scale, // convert lma-generated strength to match previous ones - scale imgdtt_params.lma_str_offset, // convert lma-generated strength to match previous ones - add to result imgdtt_params.lma_ac_offset // Add to A, C coefficients for near-lines where A,C could become negative because of window imgdtt_params.lma_ac_offset, // Add to A, C coefficients for near-lines where A,C could become negative because of window imgdtt_params.lma_relax_indiv_max// double lma_relax_indiv_max // double relax_indiv_max )[0]; if ((disp_str[cTile]!=null) && Double.isNaN(disp_str[cTile][1])) { System.out.println(); Loading Loading @@ -2397,7 +2398,8 @@ public class ImageDttCPU { imgdtt_params.lma_max_area, //double lma_max_area, // maximal half-area (if > 0.0) 1.0, // imgdtt_params.lma_str_scale, // convert lma-generated strength to match previous ones - scale 0.0, // convert lma-generated strength to match previous ones - add to result imgdtt_params.lma_ac_offset); // Add to A, C coefficients for near-lines where A,C could become negative because of window imgdtt_params.lma_ac_offset, // Add to A, C coefficients for near-lines where A,C could become negative because of window imgdtt_params.lma_relax_indiv_max);// double lma_relax_indiv_max // double relax_indiv_max // double [][] extra_stats = lma2.getTileStats(); if (debugCluster) { Loading Loading @@ -3134,8 +3136,8 @@ public class ImageDttCPU { imgdtt_params.lmas_max_area, //double lma_max_area, // maximal half-area (if > 0.0) imgdtt_params.lma_str_scale, // convert lma-generated strength to match previous ones - scale imgdtt_params.lma_str_offset, // convert lma-generated strength to match previous ones - add to result imgdtt_params.lma_ac_offset // Add to A, C coefficients for near-lines where A,C could become negative because of window ); imgdtt_params.lma_ac_offset, // Add to A, C coefficients for near-lines where A,C could become negative because of window imgdtt_params.lma_relax_indiv_max);// double lma_relax_indiv_max // double relax_indiv_max if (ds != null) { // always true disparity_map[DISPARITY_INDEX_POLY][tIndex] = ds[0][0]; disparity_map[DISPARITY_INDEX_POLY+1][tIndex] = ds[0][1]; Loading Loading @@ -4232,8 +4234,8 @@ public class ImageDttCPU { imgdtt_params.lmas_max_area, //double lma_max_area, // maximal half-area (if > 0.0) imgdtt_params.lma_str_scale, // convert lma-generated strength to match previous ones - scale imgdtt_params.lma_str_offset, // convert lma-generated strength to match previous ones - add to result imgdtt_params.lma_ac_offset // Add to A, C coefficients for near-lines where A,C could become negative because of window ); imgdtt_params.lma_ac_offset, // Add to A, C coefficients for near-lines where A,C could become negative because of window imgdtt_params.lma_relax_indiv_max);// double lma_relax_indiv_max // double relax_indiv_max if (ds != null) { // always true disp_lma[nTile] = ds[0][0]; str_lma[nTile] = ds[0][1]; Loading Loading @@ -5150,8 +5152,8 @@ public class ImageDttCPU { imgdtt_params.lmas_max_area, //double lma_max_area, // maximal half-area (if > 0.0) imgdtt_params.lma_str_scale, // convert lma-generated strength to match previous ones - scale imgdtt_params.lma_str_offset, // convert lma-generated strength to match previous ones - add to result imgdtt_params.lma_ac_offset // Add to A, C coefficients for near-lines where A,C could become negative because of window ); imgdtt_params.lma_ac_offset, // Add to A, C coefficients for near-lines where A,C could become negative because of window imgdtt_params.lma_relax_indiv_max);// double lma_relax_indiv_max // double relax_indiv_max if (ds != null) { // always true disparity_map[DISPARITY_INDEX_POLY][nTileC] = ds[0][0]; disparity_map[DISPARITY_INDEX_POLY+1][nTileC] = ds[0][1]; Loading Loading @@ -15540,8 +15542,8 @@ public class ImageDttCPU { imgdtt_params.lmas_max_area, //double lma_max_area, // maximal half-area (if > 0.0) imgdtt_params.lma_str_scale, // convert lma-generated strength to match previous ones - scale imgdtt_params.lma_str_offset, // convert lma-generated strength to match previous ones - add to result imgdtt_params.lma_ac_offset // Add to A, C coefficients for near-lines where A,C could become negative because of window ); imgdtt_params.lma_ac_offset, // Add to A, C coefficients for near-lines where A,C could become negative because of window imgdtt_params.lma_relax_indiv_max);// double lma_relax_indiv_max // double relax_indiv_max lma2.printStats(ds,1); } } Loading Loading @@ -16550,8 +16552,8 @@ public class ImageDttCPU { imgdtt_params.lmas_max_area, //double lma_max_area, // maximal half-area (if > 0.0) imgdtt_params.lma_str_scale, // convert lma-generated strength to match previous ones - scale imgdtt_params.lma_str_offset, // convert lma-generated strength to match previous ones - add to result imgdtt_params.lma_ac_offset // Add to A, C coefficients for near-lines where A,C could become negative because of window ); imgdtt_params.lma_ac_offset, // Add to A, C coefficients for near-lines where A,C could become negative because of window imgdtt_params.lma_relax_indiv_max);// double lma_relax_indiv_max // double relax_indiv_max if (ds != null) { // always true if (disparity_map!=null) { disparity_map[DISPARITY_INDEX_POLY ][nTile] = ds[0][0]; src/main/java/com/elphel/imagej/tileprocessor/ImageDttParameters.java +7 −1 Original line number Diff line number Diff line Loading @@ -268,8 +268,8 @@ public class ImageDttParameters { public double lma_max_rel_rms = 0.25; // maximal relative (to average max/min amplitude LMA RMS) // May be up to 0.3) public double lma_min_strength = 1.0; // minimal composite strength (sqrt(average amp squared over absolute RMS) public double lma_relax_indiv_max= 2.0; // relax lma_max_rel_rms and lma_min_strength for individual maximum public double lma_ac_offset = 0.015; // add to a,c coefficients for near-lines where A,C could become negative because of window public double lma_min_ac = 0.05; // minimal of a and C coefficients maximum (measures sharpest point/line) public double lma_min_min_ac = 0.015; // minimal of a and C coefficients minimum (measures sharpest point) public double lma_max_area = 30.0; //45.0; // maximal half-area (if > 0.0) Loading Loading @@ -828,6 +828,8 @@ public class ImageDttParameters { "Discard tile if ratio of RMS to average of min and max amplitude exceeds this value"); gd.addNumericField("Minimal composite strength", this.lma_min_strength, 6, 8, "", "Discard tile if composite strength (average amplitude over SQRT of RMS) is below"); gd.addNumericField("Relax individual maximum requirements (for camel case)", this.lma_relax_indiv_max, 6, 8, "", "Relax lma_max_rel_rms and lma_min_strength for individual maximum compared to that of the strongest one."); gd.addNumericField("Offset A,C coefficients", this.lma_ac_offset, 6, 8, "", "Add to A, C coefficients for near-lines where A,C could become negative because of window "); Loading Loading @@ -1107,6 +1109,7 @@ public class ImageDttParameters { this.lma_multi_cons = gd.getNextBoolean(); this.lma_max_rel_rms = gd.getNextNumber(); this.lma_min_strength = gd.getNextNumber(); this.lma_relax_indiv_max = gd.getNextNumber(); this.lma_ac_offset = gd.getNextNumber(); this.lma_min_ac = gd.getNextNumber(); Loading Loading @@ -1352,6 +1355,7 @@ public class ImageDttParameters { properties.setProperty(prefix+"lma_multi_cons", this.lma_multi_cons +""); properties.setProperty(prefix+"lma_max_rel_rms", this.lma_max_rel_rms +""); properties.setProperty(prefix+"lma_min_strength", this.lma_min_strength +""); properties.setProperty(prefix+"lma_relax_indiv_max", this.lma_relax_indiv_max +""); properties.setProperty(prefix+"lma_ac_offset", this.lma_ac_offset +""); Loading Loading @@ -1619,6 +1623,7 @@ public class ImageDttParameters { if (properties.getProperty(prefix+"lma_multi_cons")!=null) this.lma_multi_cons=Boolean.parseBoolean(properties.getProperty(prefix+"lma_multi_cons")); if (properties.getProperty(prefix+"lma_max_rel_rms")!=null) this.lma_max_rel_rms=Double.parseDouble(properties.getProperty(prefix+"lma_max_rel_rms")); if (properties.getProperty(prefix+"lma_min_strength")!=null) this.lma_min_strength=Double.parseDouble(properties.getProperty(prefix+"lma_min_strength")); if (properties.getProperty(prefix+"lma_relax_indiv_max")!=null) this.lma_relax_indiv_max=Double.parseDouble(properties.getProperty(prefix+"lma_relax_indiv_max")); if (properties.getProperty(prefix+"lma_ac_offset")!=null) this.lma_ac_offset=Double.parseDouble(properties.getProperty(prefix+"lma_ac_offset")); if (properties.getProperty(prefix+"lma_min_ac")!=null) this.lma_min_ac=Double.parseDouble(properties.getProperty(prefix+"lma_min_ac")); Loading Loading @@ -1860,6 +1865,7 @@ public class ImageDttParameters { idp.lma_multi_cons = this.lma_multi_cons; idp.lma_max_rel_rms= this.lma_max_rel_rms; idp.lma_min_strength= this.lma_min_strength; idp.lma_relax_indiv_max= this.lma_relax_indiv_max; idp.lma_ac_offset= this.lma_ac_offset; idp.lma_min_ac= this.lma_min_ac; Loading Loading
src/main/java/com/elphel/imagej/tileprocessor/Corr2dLMA.java +40 −7 Original line number Diff line number Diff line Loading @@ -2605,7 +2605,8 @@ public class Corr2dLMA { double lma_max_area, // maximal half-area (if > 0.0) double lma_str_scale, // convert lma-generated strength to match previous ones - scale double lma_str_offset, // convert lma-generated strength to match previous ones - add to result double lma_ac_offset // add to a,c coefficients for near-lines where A,C could become negative because of window double lma_ac_offset, // add to a,c coefficients for near-lines where A,C could become negative because of window double lma_relax_indiv_max // double relax_indiv_max ){ return lmaDisparityStrengths( bypass_tests, //boolean bypass_tests, // keep even weak for later analysis. Normally - only in test mode Loading @@ -2619,7 +2620,8 @@ public class Corr2dLMA { lma_str_scale, // convert lma-generated strength to match previous ones - scale lma_str_offset, // convert lma-generated strength to match previous ones - add to result false, // boolean dbg_mode lma_ac_offset // add to a,c coefficients for near-lines where A,C could become negative because of window lma_ac_offset, // add to a,c coefficients for near-lines where A,C could become negative because of window lma_relax_indiv_max // double relax_indiv_max )[0]; } Loading @@ -2636,12 +2638,19 @@ public class Corr2dLMA { double lma_str_scale, // convert lma-generated strength to match previous ones - scale double lma_str_offset, // convert lma-generated strength to match previous ones - add to result boolean dbg_mode, double lma_ac_offset // add to a,c coefficients for near-lines where A,C could become negative because of window double lma_ac_offset, // add to a,c coefficients for near-lines where A,C could become negative because of window double relax_indiv_max // = 2.0; // relax lma_max_rel_rms and lma_min_strength for individual maximum ){ // double relax_indiv_max = 2.0; // relax lma_max_rel_rms and lma_min_strength for individual maximum // from the best one double [][][] ds = new double[numMax][numTiles][dbg_mode? 14 : 3]; int reason_index = (dbg_mode && bypass_tests)? 13:-1; double [] rms = getRmsTile(); double [] avg_g = new double [numTiles]; // best avg among all maximums for (int tile = 0; tile < numTiles; tile++) { double [][] maxmaxmin_amp = getMaxMaxMinAmpTile(); avg_g[tile] = 0.50*(maxmaxmin_amp[tile][0]+maxmaxmin_amp[tile][1]); } for (int nmax = 0; nmax < numMax; nmax++) { double [][] maxmin_amp = getMaxMinAmpTile(nmax); // nmax double [][] abc = getABCTile(nmax); // nmax Loading Loading @@ -2673,7 +2682,10 @@ public class Corr2dLMA { } double avg = 0.50*(maxmin_amp[tile][0]+maxmin_amp[tile][1]); // max_min[1] can be negative - filter it out? double rrms = rms[tile]/avg; if ((lma_max_rel_rms > 0.00) && (rrms > lma_max_rel_rms)) { double rrms_g = rms[tile]/avg_g[tile]; if ((lma_max_rel_rms > 0.0) && ( (rrms > (lma_max_rel_rms * relax_indiv_max)) || // compare for this maximum (rrms_g > lma_max_rel_rms) )) { // compare for the best maximum if (bypass_tests) { if ((reason_index > 0) && (ds[nmax][tile][reason_index] == 0)) ds[nmax][tile][reason_index] = 1; } else { Loading Loading @@ -2713,8 +2725,10 @@ public class Corr2dLMA { } } double strength = Math.sqrt(avg/rrms); // double disparity = -all_pars[DISP_INDEX + offs]; if ((strength < lma_min_strength) || Double.isNaN(disparity)) { double strength_g = Math.sqrt(avg_g[tile]/rrms_g); if ( (strength < (lma_min_strength/relax_indiv_max)) || // compare for this maximum (strength_g < lma_min_strength) || // compare for the strongest maximum Double.isNaN(disparity)) { if (bypass_tests) { if ((reason_index > 0) && (ds[nmax][tile][reason_index] == 0)) ds[nmax][tile][reason_index] = 6; } else { Loading Loading @@ -2974,6 +2988,25 @@ public class Corr2dLMA { } return maxmins; } /** * Find maximal values for each element of maxmins among all maximums (currently 1 or 2) * @return */ public double [][] getMaxMaxMinAmpTile(){ double [][] maxmaxmins = getMaxMinAmpTile(0); for (int nmax = 1; nmax < numMax; nmax++) { // compare with all other maximums double [][] maxmins = getMaxMinAmpTile(nmax); for (int tile = 0; tile < numTiles; tile++) { maxmaxmins[tile][0] = Math.max(maxmaxmins[tile][0], maxmins[tile][0]); maxmaxmins[tile][1] = Math.max(maxmaxmins[tile][1], maxmins[tile][1]); } } return maxmaxmins; } /** * Get maximal/minimal (per pair) amplitudes and values for each tile * @return array [tile][{vmax, vmin}] Loading
src/main/java/com/elphel/imagej/tileprocessor/Correlation2d.java +8 −10 Original line number Diff line number Diff line Loading @@ -3838,7 +3838,8 @@ public class Correlation2d { imgdtt_params.lma_max_area, //double lma_max_area, // maximal half-area (if > 0.0) imgdtt_params.lma_str_scale, // convert lma-generated strength to match previous ones - scale imgdtt_params.lma_str_offset, // convert lma-generated strength to match previous ones - add to result imgdtt_params.lma_ac_offset // Add to A, C coefficients for near-lines where A,C could become negative because of window imgdtt_params.lma_ac_offset, // Add to A, C coefficients for near-lines where A,C could become negative because of window imgdtt_params.lma_relax_indiv_max// double lma_relax_indiv_max // double relax_indiv_max ); if (debug_level > 0) lma.printStats(ds,clust_width); Loading Loading @@ -3943,7 +3944,8 @@ public class Correlation2d { imgdtt_params.lma_max_area, //double lma_max_area, // maximal half-area (if > 0.0) imgdtt_params.lma_str_scale, // convert lma-generated strength to match previous ones - scale imgdtt_params.lma_str_offset, // convert lma-generated strength to match previous ones - add to result imgdtt_params.lma_ac_offset // Add to A, C coefficients for near-lines where A,C could become negative because of window imgdtt_params.lma_ac_offset, // Add to A, C coefficients for near-lines where A,C could become negative because of window imgdtt_params.lma_relax_indiv_max// double lma_relax_indiv_max // double relax_indiv_max ); if (debug_level > 0) { // -2) { lma.printStats(ds,clust_width); Loading Loading @@ -4452,8 +4454,8 @@ public class Correlation2d { imgdtt_params.lmas_max_area, //double lma_max_area, // maximal half-area (if > 0.0) imgdtt_params.lma_str_scale, // convert lma-generated strength to match previous ones - scale imgdtt_params.lma_str_offset, // convert lma-generated strength to match previous ones - add to result imgdtt_params.lma_ac_offset // Add to A, C coefficients for near-lines where A,C could become negative because of window imgdtt_params.lma_ac_offset, // Add to A, C coefficients for near-lines where A,C could become negative because of window imgdtt_params.lma_relax_indiv_max// double lma_relax_indiv_max // double relax_indiv_max ); if (dispStr[0][1] <= 0) { lmaSuccess = false; Loading Loading @@ -4985,12 +4987,8 @@ public class Correlation2d { imgdtt_params.lma_str_scale, // convert lma-generated strength to match previous ones - scale imgdtt_params.lma_str_offset, // convert lma-generated strength to match previous ones - add to result false, // boolean dbg_mode imgdtt_params.lma_ac_offset // Add to A, C coefficients for near-lines where A,C could become negative because of window imgdtt_params.lma_ac_offset, // Add to A, C coefficients for near-lines where A,C could become negative because of window imgdtt_params.lma_relax_indiv_max// double lma_relax_indiv_max // double relax_indiv_max ); for (int nmax = 00; nmax < dispStrs.length; nmax++) if (dispStrs[nmax][0][1] <= 0) { lmaSuccess = false; Loading
src/main/java/com/elphel/imagej/tileprocessor/ImageDtt.java +70 −7 Original line number Diff line number Diff line Loading @@ -2110,8 +2110,9 @@ public class ImageDtt extends ImageDttCPU { if (maxes.length == 1) { // normally should be just one. If 2 - OK, use old splitting (abnormal) maxes = split_far_max( maxes[0], // double [] max, far_fgbg[nTile][0], // double diff, far_fgbg[nTile][1], // double kfg, far_fgbg[nTile][0], // double fg_targ, far_fgbg[nTile][1], // double bg_targ, far_fgbg[nTile][2], // double kfg, imgdtt_params.mcorr_dual_fract); // 0.1); // double min_k); if (maxes == null) { continue; Loading Loading @@ -2202,7 +2203,8 @@ public class ImageDtt extends ImageDttCPU { imgdtt_params.lma_str_scale, // convert lma-generated strength to match previous ones - scale imgdtt_params.lma_str_offset, // convert lma-generated strength to match previous ones - add to result dbg_dispStrs, // false // boolean dbg_mode imgdtt_params.lma_ac_offset // Add to A, C coefficients for near-lines where A,C could become negative because of window imgdtt_params.lma_ac_offset, // Add to A, C coefficients for near-lines where A,C could become negative because of window imgdtt_params.lma_relax_indiv_max// double lma_relax_indiv_max // double relax_indiv_max ); disp_str_lma = new double [dispStrs.length][]; // order matching input ones for (int nmax = 0;nmax < dispStrs.length; nmax++) { Loading Loading @@ -2245,6 +2247,14 @@ public class ImageDtt extends ImageDttCPU { // set BG to DISPARITY_INDEX_CM/DISPARITY_INDEX_CM+1 disparity_map[DISPARITY_INDEX_CM ][nTile] = disp_str_lma[1-indx][0]; // disparity LMA disparity_map[DISPARITY_INDEX_CM + 1][nTile] = disp_str_lma[1-indx][2]; // strength LMA if (debugTile1) { // FIXME: remove debugTile1! System.out.println("clt_process_tl_correlations() disp_str_lma:"); for (int nmax = 0; nmax < disp_str_lma.length; nmax++) { System.out.println(String.format("disp_str_lma[%d][0]=%f, disp_str_lma[%d][1]=%f disp_str_lma[%d][2]=%f", nmax, disp_str_lma[nmax][0], nmax, disp_str_lma[nmax][1], nmax, disp_str_lma[nmax][2])); } } } } else { disparity_map[DISPARITY_INDEX_CM ][nTile] = disp_str_sel[0][0]; // disparity non-LMA Loading Loading @@ -2342,7 +2352,8 @@ public class ImageDtt extends ImageDttCPU { imgdtt_params.lmas_max_area, //double lma_max_area, // maximal half-area (if > 0.0) imgdtt_params.lma_str_scale, // convert lma-generated strength to match previous ones - scale imgdtt_params.lma_str_offset, // convert lma-generated strength to match previous ones - add to result imgdtt_params.lma_ac_offset // Add to A, C coefficients for near-lines where A,C could become negative because of window imgdtt_params.lma_ac_offset, // Add to A, C coefficients for near-lines where A,C could become negative because of window imgdtt_params.lma_relax_indiv_max// double lma_relax_indiv_max // double relax_indiv_max ); if (ds != null) { // always true // if (disparity_map!=null) { Loading Loading @@ -2499,6 +2510,56 @@ public class ImageDtt extends ImageDttCPU { return null; // too large difference between strong and weak; } return maxes; } /** * Providing initial 2-max for LMA using provided hints * There can be 3 cases: * 1 - initial run where target disparity is a combined (unresolved) maximum (trust only difference and kfg) * 2 - Refining FG - target_disparity is FG (found after initial run), so fg_targ==0, * bg_target defined from the first run * 3 - Refining BG - target_disparity is BG (found in initial run, nut during refining FG), bg_targ=0 * input max[] is accurate only when centered, can not be trusted when target_disparity was offset (either FG or BG) * * @param max disparity+strength of a single unresolved maximum using center-of-mass (or poly?) method * @param fg_targ FG disparity hint relative to target disparity * @param bg_targ BG disparity hint relative to target disparity * @param kfg strength fraction of the FG maximum (0.5 - equal FG/BG strength) * @param min_k do not try to process camel case if one maximum is much weaker than the other * @return a pair of d/s pairs, starting with a strongest one. Null on failure. */ public static double [][] split_far_max( double [] max, double fg_targ, double bg_targ, double kfg, double min_k){ if (((kfg < min_k) || ((1.0 - kfg) < min_k))) { return null; // one of the maximums is too weak with respect to the other } double [][] maxes = new double [2][2]; if (kfg <= 0) { return null; //diff and kfg can not be 0.0 simultaneously (or use this case for something?) } if ((fg_targ != 0.0) && (bg_targ != 0.0)) { // initial run that used average double diff = fg_targ - bg_targ; maxes[0][0] = max[0] + diff * (1.0 - kfg); // disparity(FG) maxes[1][0] = max[0] - diff * kfg; // disparity(BG) } else { // refinement run when target_disparity was either FG or BG, so either fg_targ or bg_targ is 0 maxes[0][0] = fg_targ; // disparity(FG) maxes[1][0] = bg_targ; // disparity(BG) } maxes[0][1] = max[1] * kfg; // strength(FG) maxes[1][1] = max[1] * (1.0 - kfg); // strength(BG) if (maxes[1][1] > maxes[0][1]) { double [] tmp = maxes[0]; maxes[0] = maxes[1]; maxes[1]= tmp; } if ((maxes[0][1] / maxes[1][1]) > (1.0 - min_k)/min_k) { return null; // too large difference between strong and weak; } return maxes; } Loading Loading @@ -3877,7 +3938,8 @@ public class ImageDtt extends ImageDttCPU { imgdtt_params.lmas_max_area, // double lma_max_area, // maximal half-area (if > 0.0) imgdtt_params.lma_str_scale, // convert lma-generated strength to match previous ones - scale imgdtt_params.lma_str_offset, // convert lma-generated strength to match previous ones - add to result imgdtt_params.lma_ac_offset // Add to A, C coefficients for near-lines where A,C could become negative because of window imgdtt_params.lma_ac_offset, // Add to A, C coefficients for near-lines where A,C could become negative because of window imgdtt_params.lma_relax_indiv_max// double lma_relax_indiv_max // double relax_indiv_max )[0]; if (tile_lma_debug_level > 0) { double [][] ds_dbg = {disp_str}; Loading Loading @@ -4176,7 +4238,8 @@ public class ImageDtt extends ImageDttCPU { imgdtt_params.lmas_max_area, // double lma_max_area, // maximal half-area (if > 0.0) imgdtt_params.lma_str_scale, // convert lma-generated strength to match previous ones - scale imgdtt_params.lma_str_offset, // convert lma-generated strength to match previous ones - add to result imgdtt_params.lma_ac_offset // Add to A, C coefficients for near-lines where A,C could become negative because of window imgdtt_params.lma_ac_offset, // Add to A, C coefficients for near-lines where A,C could become negative because of window imgdtt_params.lma_relax_indiv_max// double lma_relax_indiv_max // double relax_indiv_max )[0]; if (tile_lma_debug_level > 0) { double [][] ds_dbg = {disp_str}; Loading
src/main/java/com/elphel/imagej/tileprocessor/ImageDttCPU.java +14 −12 Original line number Diff line number Diff line Loading @@ -2212,7 +2212,8 @@ public class ImageDttCPU { imgdtt_params.lmas_max_area, // double lma_max_area, // maximal half-area (if > 0.0) imgdtt_params.lma_str_scale, // convert lma-generated strength to match previous ones - scale imgdtt_params.lma_str_offset, // convert lma-generated strength to match previous ones - add to result imgdtt_params.lma_ac_offset // Add to A, C coefficients for near-lines where A,C could become negative because of window imgdtt_params.lma_ac_offset, // Add to A, C coefficients for near-lines where A,C could become negative because of window imgdtt_params.lma_relax_indiv_max// double lma_relax_indiv_max // double relax_indiv_max )[0]; if ((disp_str[cTile]!=null) && Double.isNaN(disp_str[cTile][1])) { System.out.println(); Loading Loading @@ -2397,7 +2398,8 @@ public class ImageDttCPU { imgdtt_params.lma_max_area, //double lma_max_area, // maximal half-area (if > 0.0) 1.0, // imgdtt_params.lma_str_scale, // convert lma-generated strength to match previous ones - scale 0.0, // convert lma-generated strength to match previous ones - add to result imgdtt_params.lma_ac_offset); // Add to A, C coefficients for near-lines where A,C could become negative because of window imgdtt_params.lma_ac_offset, // Add to A, C coefficients for near-lines where A,C could become negative because of window imgdtt_params.lma_relax_indiv_max);// double lma_relax_indiv_max // double relax_indiv_max // double [][] extra_stats = lma2.getTileStats(); if (debugCluster) { Loading Loading @@ -3134,8 +3136,8 @@ public class ImageDttCPU { imgdtt_params.lmas_max_area, //double lma_max_area, // maximal half-area (if > 0.0) imgdtt_params.lma_str_scale, // convert lma-generated strength to match previous ones - scale imgdtt_params.lma_str_offset, // convert lma-generated strength to match previous ones - add to result imgdtt_params.lma_ac_offset // Add to A, C coefficients for near-lines where A,C could become negative because of window ); imgdtt_params.lma_ac_offset, // Add to A, C coefficients for near-lines where A,C could become negative because of window imgdtt_params.lma_relax_indiv_max);// double lma_relax_indiv_max // double relax_indiv_max if (ds != null) { // always true disparity_map[DISPARITY_INDEX_POLY][tIndex] = ds[0][0]; disparity_map[DISPARITY_INDEX_POLY+1][tIndex] = ds[0][1]; Loading Loading @@ -4232,8 +4234,8 @@ public class ImageDttCPU { imgdtt_params.lmas_max_area, //double lma_max_area, // maximal half-area (if > 0.0) imgdtt_params.lma_str_scale, // convert lma-generated strength to match previous ones - scale imgdtt_params.lma_str_offset, // convert lma-generated strength to match previous ones - add to result imgdtt_params.lma_ac_offset // Add to A, C coefficients for near-lines where A,C could become negative because of window ); imgdtt_params.lma_ac_offset, // Add to A, C coefficients for near-lines where A,C could become negative because of window imgdtt_params.lma_relax_indiv_max);// double lma_relax_indiv_max // double relax_indiv_max if (ds != null) { // always true disp_lma[nTile] = ds[0][0]; str_lma[nTile] = ds[0][1]; Loading Loading @@ -5150,8 +5152,8 @@ public class ImageDttCPU { imgdtt_params.lmas_max_area, //double lma_max_area, // maximal half-area (if > 0.0) imgdtt_params.lma_str_scale, // convert lma-generated strength to match previous ones - scale imgdtt_params.lma_str_offset, // convert lma-generated strength to match previous ones - add to result imgdtt_params.lma_ac_offset // Add to A, C coefficients for near-lines where A,C could become negative because of window ); imgdtt_params.lma_ac_offset, // Add to A, C coefficients for near-lines where A,C could become negative because of window imgdtt_params.lma_relax_indiv_max);// double lma_relax_indiv_max // double relax_indiv_max if (ds != null) { // always true disparity_map[DISPARITY_INDEX_POLY][nTileC] = ds[0][0]; disparity_map[DISPARITY_INDEX_POLY+1][nTileC] = ds[0][1]; Loading Loading @@ -15540,8 +15542,8 @@ public class ImageDttCPU { imgdtt_params.lmas_max_area, //double lma_max_area, // maximal half-area (if > 0.0) imgdtt_params.lma_str_scale, // convert lma-generated strength to match previous ones - scale imgdtt_params.lma_str_offset, // convert lma-generated strength to match previous ones - add to result imgdtt_params.lma_ac_offset // Add to A, C coefficients for near-lines where A,C could become negative because of window ); imgdtt_params.lma_ac_offset, // Add to A, C coefficients for near-lines where A,C could become negative because of window imgdtt_params.lma_relax_indiv_max);// double lma_relax_indiv_max // double relax_indiv_max lma2.printStats(ds,1); } } Loading Loading @@ -16550,8 +16552,8 @@ public class ImageDttCPU { imgdtt_params.lmas_max_area, //double lma_max_area, // maximal half-area (if > 0.0) imgdtt_params.lma_str_scale, // convert lma-generated strength to match previous ones - scale imgdtt_params.lma_str_offset, // convert lma-generated strength to match previous ones - add to result imgdtt_params.lma_ac_offset // Add to A, C coefficients for near-lines where A,C could become negative because of window ); imgdtt_params.lma_ac_offset, // Add to A, C coefficients for near-lines where A,C could become negative because of window imgdtt_params.lma_relax_indiv_max);// double lma_relax_indiv_max // double relax_indiv_max if (ds != null) { // always true if (disparity_map!=null) { disparity_map[DISPARITY_INDEX_POLY ][nTile] = ds[0][0];
src/main/java/com/elphel/imagej/tileprocessor/ImageDttParameters.java +7 −1 Original line number Diff line number Diff line Loading @@ -268,8 +268,8 @@ public class ImageDttParameters { public double lma_max_rel_rms = 0.25; // maximal relative (to average max/min amplitude LMA RMS) // May be up to 0.3) public double lma_min_strength = 1.0; // minimal composite strength (sqrt(average amp squared over absolute RMS) public double lma_relax_indiv_max= 2.0; // relax lma_max_rel_rms and lma_min_strength for individual maximum public double lma_ac_offset = 0.015; // add to a,c coefficients for near-lines where A,C could become negative because of window public double lma_min_ac = 0.05; // minimal of a and C coefficients maximum (measures sharpest point/line) public double lma_min_min_ac = 0.015; // minimal of a and C coefficients minimum (measures sharpest point) public double lma_max_area = 30.0; //45.0; // maximal half-area (if > 0.0) Loading Loading @@ -828,6 +828,8 @@ public class ImageDttParameters { "Discard tile if ratio of RMS to average of min and max amplitude exceeds this value"); gd.addNumericField("Minimal composite strength", this.lma_min_strength, 6, 8, "", "Discard tile if composite strength (average amplitude over SQRT of RMS) is below"); gd.addNumericField("Relax individual maximum requirements (for camel case)", this.lma_relax_indiv_max, 6, 8, "", "Relax lma_max_rel_rms and lma_min_strength for individual maximum compared to that of the strongest one."); gd.addNumericField("Offset A,C coefficients", this.lma_ac_offset, 6, 8, "", "Add to A, C coefficients for near-lines where A,C could become negative because of window "); Loading Loading @@ -1107,6 +1109,7 @@ public class ImageDttParameters { this.lma_multi_cons = gd.getNextBoolean(); this.lma_max_rel_rms = gd.getNextNumber(); this.lma_min_strength = gd.getNextNumber(); this.lma_relax_indiv_max = gd.getNextNumber(); this.lma_ac_offset = gd.getNextNumber(); this.lma_min_ac = gd.getNextNumber(); Loading Loading @@ -1352,6 +1355,7 @@ public class ImageDttParameters { properties.setProperty(prefix+"lma_multi_cons", this.lma_multi_cons +""); properties.setProperty(prefix+"lma_max_rel_rms", this.lma_max_rel_rms +""); properties.setProperty(prefix+"lma_min_strength", this.lma_min_strength +""); properties.setProperty(prefix+"lma_relax_indiv_max", this.lma_relax_indiv_max +""); properties.setProperty(prefix+"lma_ac_offset", this.lma_ac_offset +""); Loading Loading @@ -1619,6 +1623,7 @@ public class ImageDttParameters { if (properties.getProperty(prefix+"lma_multi_cons")!=null) this.lma_multi_cons=Boolean.parseBoolean(properties.getProperty(prefix+"lma_multi_cons")); if (properties.getProperty(prefix+"lma_max_rel_rms")!=null) this.lma_max_rel_rms=Double.parseDouble(properties.getProperty(prefix+"lma_max_rel_rms")); if (properties.getProperty(prefix+"lma_min_strength")!=null) this.lma_min_strength=Double.parseDouble(properties.getProperty(prefix+"lma_min_strength")); if (properties.getProperty(prefix+"lma_relax_indiv_max")!=null) this.lma_relax_indiv_max=Double.parseDouble(properties.getProperty(prefix+"lma_relax_indiv_max")); if (properties.getProperty(prefix+"lma_ac_offset")!=null) this.lma_ac_offset=Double.parseDouble(properties.getProperty(prefix+"lma_ac_offset")); if (properties.getProperty(prefix+"lma_min_ac")!=null) this.lma_min_ac=Double.parseDouble(properties.getProperty(prefix+"lma_min_ac")); Loading Loading @@ -1860,6 +1865,7 @@ public class ImageDttParameters { idp.lma_multi_cons = this.lma_multi_cons; idp.lma_max_rel_rms= this.lma_max_rel_rms; idp.lma_min_strength= this.lma_min_strength; idp.lma_relax_indiv_max= this.lma_relax_indiv_max; idp.lma_ac_offset= this.lma_ac_offset; idp.lma_min_ac= this.lma_min_ac; Loading