Commit ee1f0069 authored by Andrey Filippov's avatar Andrey Filippov

Improving preExpandCLTQuad3d

parent 3901557b
...@@ -161,8 +161,9 @@ public class EyesisCorrectionParameters { ...@@ -161,8 +161,9 @@ public class EyesisCorrectionParameters {
public boolean clt_batch_dbg1 = true; // Generate debug images if a single set is selected public boolean clt_batch_dbg1 = true; // Generate debug images if a single set is selected
public boolean clt_batch_dsi = true; // Create and save DSI combo image with the model public boolean clt_batch_dsi = true; // Create and save DSI combo image with the model
public boolean clt_batch_dsi_aux = false; // Calculate and save aux camera DSI (currently it is offset from the main/rig data public boolean clt_batch_dsi_aux = false; // Calculate and save aux camera DSI (currently it is offset from the main/rig data
public boolean clt_batch_dsi_cm_strength = true; // Use CM strength (no switch between LMA/no-LMA) for DSI export
public boolean clt_batch_dsi_aux_full=false; // more than just preExpandCLTQuad3d() (same as for Lazy Eye public boolean clt_batch_dsi_aux_full=false; // more than just preExpandCLTQuad3d() (same as for Lazy Eye
public boolean clt_batch_save_extrinsics = true; // Save cameras extrinsic parameters with the model public boolean clt_batch_save_extrinsics = true; // Save cameras extrinsic parameters with the model
public boolean clt_batch_save_all = true; // Save all parameters with the model public boolean clt_batch_save_all = true; // Save all parameters with the model
public boolean clt_batch_skip_scenes = false; // Skip all per-scene processing, go directly to processing sequences public boolean clt_batch_skip_scenes = false; // Skip all per-scene processing, go directly to processing sequences
...@@ -320,6 +321,7 @@ public class EyesisCorrectionParameters { ...@@ -320,6 +321,7 @@ public class EyesisCorrectionParameters {
cp.clt_batch_dsi= this.clt_batch_dsi; cp.clt_batch_dsi= this.clt_batch_dsi;
cp.clt_batch_dsi_aux= this.clt_batch_dsi_aux; cp.clt_batch_dsi_aux= this.clt_batch_dsi_aux;
cp.clt_batch_dsi_cm_strength= this.clt_batch_dsi_cm_strength;
cp.clt_batch_dsi_aux_full= this.clt_batch_dsi_aux_full; cp.clt_batch_dsi_aux_full= this.clt_batch_dsi_aux_full;
cp.clt_batch_save_extrinsics= this.clt_batch_save_extrinsics; cp.clt_batch_save_extrinsics= this.clt_batch_save_extrinsics;
cp.clt_batch_save_all= this.clt_batch_save_all; cp.clt_batch_save_all= this.clt_batch_save_all;
...@@ -521,6 +523,7 @@ public class EyesisCorrectionParameters { ...@@ -521,6 +523,7 @@ public class EyesisCorrectionParameters {
properties.setProperty(prefix+"clt_batch_dsi", this.clt_batch_dsi+""); properties.setProperty(prefix+"clt_batch_dsi", this.clt_batch_dsi+"");
properties.setProperty(prefix+"clt_batch_dsi_aux", this.clt_batch_dsi_aux+""); properties.setProperty(prefix+"clt_batch_dsi_aux", this.clt_batch_dsi_aux+"");
properties.setProperty(prefix+"clt_batch_dsi_cm_strength", this.clt_batch_dsi_cm_strength+"");
properties.setProperty(prefix+"clt_batch_dsi_aux_full", this.clt_batch_dsi_aux_full+""); properties.setProperty(prefix+"clt_batch_dsi_aux_full", this.clt_batch_dsi_aux_full+"");
properties.setProperty(prefix+"clt_batch_save_extrinsics", this.clt_batch_save_extrinsics+""); properties.setProperty(prefix+"clt_batch_save_extrinsics", this.clt_batch_save_extrinsics+"");
properties.setProperty(prefix+"clt_batch_save_all", this.clt_batch_save_all+""); properties.setProperty(prefix+"clt_batch_save_all", this.clt_batch_save_all+"");
...@@ -700,6 +703,8 @@ public class EyesisCorrectionParameters { ...@@ -700,6 +703,8 @@ public class EyesisCorrectionParameters {
if (properties.getProperty(prefix+"clt_batch_dsi")!= null) this.clt_batch_dsi=Boolean.parseBoolean(properties.getProperty(prefix+"clt_batch_dsi")); if (properties.getProperty(prefix+"clt_batch_dsi")!= null) this.clt_batch_dsi=Boolean.parseBoolean(properties.getProperty(prefix+"clt_batch_dsi"));
if (properties.getProperty(prefix+"clt_batch_dsi_aux")!= null) this.clt_batch_dsi_aux=Boolean.parseBoolean(properties.getProperty(prefix+"clt_batch_dsi_aux")); if (properties.getProperty(prefix+"clt_batch_dsi_aux")!= null) this.clt_batch_dsi_aux=Boolean.parseBoolean(properties.getProperty(prefix+"clt_batch_dsi_aux"));
if (properties.getProperty(prefix+"clt_batch_dsi_cm_strength")!= null) this.clt_batch_dsi_cm_strength=Boolean.parseBoolean(properties.getProperty(prefix+"clt_batch_dsi_cm_strength"));
if (properties.getProperty(prefix+"clt_batch_dsi_aux_full")!= null) this.clt_batch_dsi_aux_full=Boolean.parseBoolean(properties.getProperty(prefix+"clt_batch_dsi_aux_full")); if (properties.getProperty(prefix+"clt_batch_dsi_aux_full")!= null) this.clt_batch_dsi_aux_full=Boolean.parseBoolean(properties.getProperty(prefix+"clt_batch_dsi_aux_full"));
if (properties.getProperty(prefix+"clt_batch_save_extrinsics")!= null) this.clt_batch_save_extrinsics=Boolean.parseBoolean(properties.getProperty(prefix+"clt_batch_save_extrinsics")); if (properties.getProperty(prefix+"clt_batch_save_extrinsics")!= null) this.clt_batch_save_extrinsics=Boolean.parseBoolean(properties.getProperty(prefix+"clt_batch_save_extrinsics"));
if (properties.getProperty(prefix+"clt_batch_save_all")!= null) this.clt_batch_save_all=Boolean.parseBoolean(properties.getProperty(prefix+"clt_batch_save_all")); if (properties.getProperty(prefix+"clt_batch_save_all")!= null) this.clt_batch_save_all=Boolean.parseBoolean(properties.getProperty(prefix+"clt_batch_save_all"));
...@@ -1094,10 +1099,11 @@ public class EyesisCorrectionParameters { ...@@ -1094,10 +1099,11 @@ public class EyesisCorrectionParameters {
gd.addCheckbox ("Include/genarate separate aux camera DSI data in the combo DSI", this.clt_batch_dsi_aux, gd.addCheckbox ("Include/genarate separate aux camera DSI data in the combo DSI", this.clt_batch_dsi_aux,
"8-rig: DSI for the AUX camera is offset (by the rig baseline) from the main and rig DSI. Aux DSI requires extra processing time."+ "8-rig: DSI for the AUX camera is offset (by the rig baseline) from the main and rig DSI. Aux DSI requires extra processing time."+
"EO+LWIR - generate a separate GT+AUX file"); "EO+LWIR - generate a separate GT+AUX file");
gd.addCheckbox ("Use CM strength (no switch between LMA/no-LMA) for DSI", this.clt_batch_dsi_cm_strength,
"Generate CM-only, single-tile strength for each tile keeping disparity and LMA-disparity from multi-tile"+
"to use as a layer for interscene matching");
gd.addCheckbox ("Additional steps to calculate Aux DSI (more than for LY adjustment)", this.clt_batch_dsi_aux_full, gd.addCheckbox ("Additional steps to calculate Aux DSI (more than for LY adjustment)", this.clt_batch_dsi_aux_full,
"(Not yet tested)"); "(Not yet tested)");
gd.addCheckbox ("Save field adjustment data with the model", this.clt_batch_save_extrinsics, gd.addCheckbox ("Save field adjustment data with the model", this.clt_batch_save_extrinsics,
"This data can be used to restore specific filed-adjusted cameras extrinsics used when the model was generated"); "This data can be used to restore specific filed-adjusted cameras extrinsics used when the model was generated");
gd.addCheckbox ("Save all parameters with the model", this.clt_batch_save_all, gd.addCheckbox ("Save all parameters with the model", this.clt_batch_save_all,
...@@ -1225,7 +1231,8 @@ public class EyesisCorrectionParameters { ...@@ -1225,7 +1231,8 @@ public class EyesisCorrectionParameters {
this.clt_batch_dbg1= gd.getNextBoolean(); // 29 this.clt_batch_dbg1= gd.getNextBoolean(); // 29
this.clt_batch_dsi= gd.getNextBoolean(); this.clt_batch_dsi= gd.getNextBoolean();
this.clt_batch_dsi_aux= gd.getNextBoolean(); this.clt_batch_dsi_aux= gd.getNextBoolean();
this.clt_batch_dsi_aux_full= gd.getNextBoolean(); this.clt_batch_dsi_cm_strength= gd.getNextBoolean();
this.clt_batch_dsi_aux_full= gd.getNextBoolean();
this.clt_batch_save_extrinsics= gd.getNextBoolean(); this.clt_batch_save_extrinsics= gd.getNextBoolean();
this.clt_batch_save_all= gd.getNextBoolean(); this.clt_batch_save_all= gd.getNextBoolean();
......
...@@ -978,6 +978,16 @@ public class CLTPass3d{ ...@@ -978,6 +978,16 @@ public class CLTPass3d{
restoreTileOpDisparity(); restoreTileOpDisparity();
saveTileOpDisparity(); saveTileOpDisparity();
} }
public int setTileOpDisparity(
double [] disparity) {
boolean [] selection = new boolean [disparity.length];
for (int i = 0; i < disparity.length; i++) {
selection[i] = !Double.isNaN(disparity[i]);
}
return setTileOpDisparity(
selection, // boolean [] selection,
disparity); // double [] disparity)
}
public int setTileOpDisparity( public int setTileOpDisparity(
boolean [] selection, boolean [] selection,
......
...@@ -2429,7 +2429,7 @@ public class Correlation2d { ...@@ -2429,7 +2429,7 @@ public class Correlation2d {
int [] imx = new int[2]; int [] imx = new int[2];
for (int i = center_x - transform_size + 2; i < center_x + transform_size - 1; i++) { for (int i = center_x - transform_size + 2; i < center_x + transform_size - 1; i++) {
double c = combo_corrs[i]; double c = combo_corrs[i];
if ((c > combo_corrs[i - 1]) && (c > combo_corrs[i + 1])) { if ((c > combo_corrs[i - 1]) && (c > combo_corrs[i + 1]) && (c > 0.0)) {
if ((imx[0] == 0) || (c > combo_corrs[imx[0]])) { if ((imx[0] == 0) || (c > combo_corrs[imx[0]])) {
imx[1] = imx[0]; imx[1] = imx[0];
imx[0] = i; imx[0] = i;
...@@ -2439,7 +2439,9 @@ public class Correlation2d { ...@@ -2439,7 +2439,9 @@ public class Correlation2d {
i++; // skip next after max i++; // skip next after max
} }
} }
if (imx[0] == 0) return new double[0][]; if (imx[0] == 0) {
return new double[0][];
}
int nm = 1; int nm = 1;
if ((imx[1] > 0) && (combo_corrs[imx[1]]/combo_corrs[imx[0]] > min_fraction)) { if ((imx[1] > 0) && (combo_corrs[imx[1]]/combo_corrs[imx[0]] > min_fraction)) {
nm++; nm++;
...@@ -4621,61 +4623,6 @@ public class Correlation2d { ...@@ -4621,61 +4623,6 @@ public class Correlation2d {
own_masks = new double [][][] {own_masks0 [sel_max]}; own_masks = new double [][][] {own_masks0 [sel_max]};
common_scale = new boolean[] {(sel_max == fg_max) ? imgdtt_params.bimax_common_fg : imgdtt_params.bimax_common_bg}; common_scale = new boolean[] {(sel_max == fg_max) ? imgdtt_params.bimax_common_fg : imgdtt_params.bimax_common_bg};
} }
/*
int nearest_max = (Math.abs(disp_str_dual[0][0]) < Math.abs(disp_str_dual[1][0]))? 0 : 1;
int fg_max = (disp_str_dual[0][0] > disp_str_dual[1][0]) ? 0 : 1;
switch (combine_mode) {
case 0: // keep both
pair_offsets = pair_offsets0;
lma_corr_weights = lma_corr_weights0;
disp_str_all = disp_str_dual;
own_masks = own_masks0;
common_scale = new boolean[disp_str_dual.length];
for (int i = 0; i < common_scale.length; i++) {
common_scale[i] = (i == fg_max) ? imgdtt_params.bimax_common_fg : imgdtt_params.bimax_common_bg;
}
break;
case 1: // keep strongest
pair_offsets = new double [][][] {pair_offsets0 [0]};
lma_corr_weights = new double [][][] {lma_corr_weights0[0]};
disp_str_all = new double [][] {disp_str_dual [0]};
own_masks = new double [][][] {own_masks0 [0]};
common_scale = new boolean[] {(0 == fg_max) ? imgdtt_params.bimax_common_fg : imgdtt_params.bimax_common_bg};
break;
case 2: // keep nearest
pair_offsets = new double [][][] {pair_offsets0 [nearest_max]};
lma_corr_weights = new double [][][] {lma_corr_weights0[nearest_max]};
disp_str_all = new double [][] {disp_str_dual [nearest_max]};
own_masks = new double [][][] {own_masks0 [nearest_max]};
common_scale = new boolean[] {(nearest_max == fg_max) ? imgdtt_params.bimax_common_fg : imgdtt_params.bimax_common_bg};
break;
case 3: // keep foreground
pair_offsets = new double [][][] {pair_offsets0 [fg_max]};
lma_corr_weights = new double [][][] {lma_corr_weights0[fg_max]};
disp_str_all = new double [][] {disp_str_dual [fg_max]};
own_masks = new double [][][] {own_masks0 [fg_max]};
common_scale = new boolean[] {imgdtt_params.bimax_common_fg};
break;
case 4: // keep background
pair_offsets = new double [][][] {pair_offsets0 [1-fg_max]};
lma_corr_weights = new double [][][] {lma_corr_weights0[1-fg_max]};
disp_str_all = new double [][] {disp_str_dual [1-fg_max]};
own_masks = new double [][][] {own_masks0 [1-fg_max]};
common_scale = new boolean[] {imgdtt_params.bimax_common_bg};
break;
default: // keep both
pair_offsets = pair_offsets0;
lma_corr_weights = lma_corr_weights0;
disp_str_all = disp_str_dual;
own_masks = own_masks0;
common_scale = new boolean[disp_str_dual.length];
for (int i = 0; i < common_scale.length; i++) {
common_scale[i] = (i == fg_max) ? imgdtt_params.bimax_common_fg : imgdtt_params.bimax_common_bg;
}
}
*/
} }
double [][][] filtWeight = new double [lma_corr_weights.length][corrs.length][]; double [][][] filtWeight = new double [lma_corr_weights.length][corrs.length][];
......
...@@ -769,7 +769,7 @@ public class ErsCorrection extends GeometryCorrection { ...@@ -769,7 +769,7 @@ public class ErsCorrection extends GeometryCorrection {
} }
// setup from extrinsics vector // setup from extrinsics vector
public void setupERSfromExtrinsics() public void setupERSfromExtrinsics()
{ {
double BUGS = 1.0; double BUGS = 1.0;
if (line_time == OLD_LINE_TIME) { if (line_time == OLD_LINE_TIME) {
......
...@@ -16587,12 +16587,13 @@ public class ImageDttCPU { ...@@ -16587,12 +16587,13 @@ public class ImageDttCPU {
startAndJoin(threads); startAndJoin(threads);
return texture_tiles; return texture_tiles;
} }
private double [][][] prepareNeibs( private static double [][][] prepareNeibs(
int nTileC, int nTileC,
boolean float_center, // false - center around provided value: target_disparity[center] or dcenter[0] if dcenter != null boolean float_center, // false - center around provided value: target_disparity[center] or dcenter[0] if dcenter != null
// dcenter[0] - center offset, dcenter[1] - tiltX, dcenter[2] - tiltY // dcenter[0] - center offset, dcenter[1] - tiltX, dcenter[2] - tiltY
double [] target_disparity, // = new double [tilesY * tilesX]; double [] target_disparity, // = new double [tilesY * tilesX];
TileNeibs tn, TileNeibs tn,
TileNeibs tn_clust,
int clustRadius, int clustRadius,
double [] wnd_neib, double [] wnd_neib,
int [][] dtx_dty, // null or int [][] dtx_dty = new int [wnd_neib.length][]; int [][] dtx_dty, // null or int [][] dtx_dty = new int [wnd_neib.length][];
...@@ -16608,6 +16609,7 @@ public class ImageDttCPU { ...@@ -16608,6 +16609,7 @@ public class ImageDttCPU {
disparity_center = dcenter[0]; // disparity_center = dcenter[0]; //
} }
double disparity_range = 2*(arange + rrange * Math.abs(disparity_center)); double disparity_range = 2*(arange + rrange * Math.abs(disparity_center));
boolean [] left_pix = new boolean[clustDiameter*clustDiameter];
if (float_center) { if (float_center) {
final double [] disp = new double [wnd_neib.length]; final double [] disp = new double [wnd_neib.length];
Arrays.fill(disp, Double.NaN); Arrays.fill(disp, Double.NaN);
...@@ -16625,6 +16627,7 @@ public class ImageDttCPU { ...@@ -16625,6 +16627,7 @@ public class ImageDttCPU {
double w = wnd_neib[indx]; double w = wnd_neib[indx];
swd += w * d; swd += w * d;
sw += w; sw += w;
left_pix[indx] = true;
} }
} }
indx++; indx++;
...@@ -16637,21 +16640,25 @@ public class ImageDttCPU { ...@@ -16637,21 +16640,25 @@ public class ImageDttCPU {
} }
}); });
// Remove "worst" of min and max disparity tiles, until difference is smaller than the specified range // Remove "worst" of min and max disparity tiles, until difference is smaller than the specified range
boolean [] update_mm = {true,true}; // do not recalculate the min/max end if it was not removed boolean [] update_mm = {true,true}; // do not recalculate the min/max end if it was not removed
double [] mm_diffs = new double[2];
while ((disp[tileList.get(tileList.size()-1)] - disp[tileList.get(0)]) > disparity_range) { while ((disp[tileList.get(tileList.size()-1)] - disp[tileList.get(0)]) > disparity_range) {
int [] min_max_indices = {tileList.get(0), tileList.get(tileList.size()-1)}; int [] min_max_indices = {tileList.get(0), tileList.get(tileList.size()-1)};
double [] mm_diffs = new double[2]; // double [] mm_diffs = new double[2];
boolean both_with_neib = true; boolean both_with_neib = true;
for (int imm = 0; imm < 2; imm++) if (update_mm[imm]){ // do not recalc same for (int imm = 0; imm < 2; imm++) if (update_mm[imm]){ // do not recalc same
update_mm[imm] = false; update_mm[imm] = false;
int idy = (min_max_indices[imm] / clustDiameter) - clustRadius + 1; int idy = (min_max_indices[imm] / clustDiameter) - clustRadius + 1;
int idx = (min_max_indices[imm] % clustDiameter) - clustRadius + 1; int idx = (min_max_indices[imm] % clustDiameter) - clustRadius + 1;
int tileMM = tn.getNeibIndex(nTileC, idx, idy); // full tile index int tileMM = tn.getNeibIndex(nTileC, idx, idy); // full tile index
int tile_clust = tn_clust.getNeibIndex(center_indx, idx, idy); // local tile index
double snw = 0.0, snwd = 0.0; double snw = 0.0, snwd = 0.0;
int nn = 0; int nn = 0;
for (int dir = 0; dir < 8; dir++) { for (int dir = 0; dir < 8; dir++) {
int nTile1 = tn.getNeibIndex(tileMM, dir); int nTile1 = tn.getNeibIndex(tileMM, dir);
if ((nTile1 >= 0) && !Double.isNaN(target_disparity[nTile1])){ int tile_clust1 = tn_clust.getNeibIndex(tile_clust, dir);
// if ((nTile1 >= 0) && !Double.isNaN(target_disparity[nTile1])){
if ((nTile1 >= 0) && !Double.isNaN(target_disparity[nTile1]) && ((tile_clust1 < 0) || left_pix[tile_clust1] )){
double w = ((dir & 1) != 0) ? 1.0:1.5; double w = ((dir & 1) != 0) ? 1.0:1.5;
snw += w; snw += w;
snwd += w * target_disparity[nTile1]; snwd += w * target_disparity[nTile1];
...@@ -16677,7 +16684,7 @@ public class ImageDttCPU { ...@@ -16677,7 +16684,7 @@ public class ImageDttCPU {
double w = wnd_neib[ri]; double w = wnd_neib[ri];
sw -= w; sw -= w;
swd -= w * disp[ri]; swd -= w * disp[ri];
left_pix[ri] = false;
} else { } else {
break; break;
} }
...@@ -16879,7 +16886,9 @@ public class ImageDttCPU { ...@@ -16879,7 +16886,9 @@ public class ImageDttCPU {
@Override @Override
public void run() { public void run() {
int tileXC, tileYC, nTileC; int tileXC, tileYC, nTileC;
TileNeibs tn = new TileNeibs(tilesX,tilesY); TileNeibs tn = new TileNeibs(tilesX,tilesY);
TileNeibs tn_clust = new TileNeibs(2*clustRadius-1, 2*clustRadius-1);
TileNeibs tn_clust_tilt = new TileNeibs(2*clustRadiusTilt-1,2*clustRadiusTilt-1);
double [] dcenter = new double[3]; double [] dcenter = new double[3];
PolynomialApproximation pa = new PolynomialApproximation(); PolynomialApproximation pa = new PolynomialApproximation();
for (int iTileC = ai.getAndIncrement(); iTileC < tp_tasks.length; iTileC = ai.getAndIncrement()) if (tp_tasks[iTileC].getTask() != 0) { for (int iTileC = ai.getAndIncrement(); iTileC < tp_tasks.length; iTileC = ai.getAndIncrement()) if (tp_tasks[iTileC].getTask() != 0) {
...@@ -16901,6 +16910,7 @@ public class ImageDttCPU { ...@@ -16901,6 +16910,7 @@ public class ImageDttCPU {
float_center, // boolean float_center, // false - center around provided value float_center, // boolean float_center, // false - center around provided value
target_disparity, //double [] target_disparity, // = new double [tilesY * tilesX]; target_disparity, //double [] target_disparity, // = new double [tilesY * tilesX];
tn, // TileNeibs tn, tn, // TileNeibs tn,
tn_clust_tilt, // TileNeibs tn_clust,
clustRadiusTilt , // int clustRadius, clustRadiusTilt , // int clustRadius,
wnd_neib_tilt, // double [] wnd_neib, wnd_neib_tilt, // double [] wnd_neib,
null, // int [][] dtx_dty, // null or int [][] dtx_dty = new int [wnd_neib.length][]; null, // int [][] dtx_dty, // null or int [][] dtx_dty = new int [wnd_neib.length][];
...@@ -16943,6 +16953,7 @@ public class ImageDttCPU { ...@@ -16943,6 +16953,7 @@ public class ImageDttCPU {
false, // float_center, // boolean float_center, // false - center around provided value false, // float_center, // boolean float_center, // false - center around provided value
target_disparity, //double [] target_disparity, // = new double [tilesY * tilesX]; target_disparity, //double [] target_disparity, // = new double [tilesY * tilesX];
tn, // TileNeibs tn, tn, // TileNeibs tn,
tn_clust, // TileNeibs tn_clust,
clustRadius , // int clustRadius, clustRadius , // int clustRadius,
wnd_neib, // double [] wnd_neib, wnd_neib, // double [] wnd_neib,
dtx_dty, // int [][] dtx_dty, // null or int [][] dtx_dty = new int [wnd_neib.length][]; dtx_dty, // int [][] dtx_dty, // null or int [][] dtx_dty = new int [wnd_neib.length][];
......
...@@ -496,9 +496,10 @@ public class ImageDttParameters { ...@@ -496,9 +496,10 @@ public class ImageDttParameters {
"When dual max, LMA with two maximums, then select. If false,select before LMA"); "When dual max, LMA with two maximums, then select. If false,select before LMA");
gd. addChoice("Multiple maximums select mode", COMBINE_MODES, COMBINE_MODES[bimax_combine_mode], gd. addChoice("Multiple maximums select mode", COMBINE_MODES, COMBINE_MODES[bimax_combine_mode],
"Which maximum to keep after LMA"); "Which maximum to keep after LMA");
gd.addCheckbox ("Use updated LMA capable of FG/BG", this.bimax_dual_LMA, gd.addCheckbox ("Use updated LMA capable of FG/BG, force CM strength for strength",this.bimax_dual_LMA,
"When dual max, LMA with two maximums, then select. If false,select before LMA"); "Use LMA capable of FG/BG. Use CM strength (now 3) as DISPARITY_STRENGTH_INDEX (now 10)."+
gd.addCheckbox ("Process only tiles with dual maximums (requires bimax_dual_LMA)", this.bimax_dual_only, "When false (old) use LMA (DISPARITY_INDEX_POLY+1 now 9) as DISPARITY_STRENGTH_INDEX");
gd.addCheckbox ("Process only tiles with dual maximums (requires bimax_dual_LMA)", this.bimax_dual_only,
"May be used to determine BG after refining FG. First refine with false and mode = 3 (FG), then with true and mode = 4 (BG)"); "May be used to determine BG after refining FG. First refine with false and mode = 3 (FG), then with true and mode = 4 (BG)");
gd.addMessage("LMA samples filter based on estimated disparity"); gd.addMessage("LMA samples filter based on estimated disparity");
......
...@@ -38,8 +38,7 @@ public class OpticalFlowParameters { ...@@ -38,8 +38,7 @@ public class OpticalFlowParameters {
public double change_laplassian = 0.005 ; public double change_laplassian = 0.005 ;
public double tolerance_absolute_inter = 0.25; // absolute disparity half-range in each tile public double tolerance_absolute_inter = 0.25; // absolute disparity half-range in each tile
public double tolerance_relative_inter = 0.2; // relative disparity half-range in each tile public double tolerance_relative_inter = 0.2; // relative disparity half-range in each tile
public double occupancy_inter = 0.25; // fraction of remaining tiles in the center 8x8 area (<1.0) public double occupancy_inter = 0.25; // fraction of remaining tiles in the center 8x8 area (<1.0)
public double nsigma = 1.5; // Remove outliers by more that this scaled sigma public double nsigma = 1.5; // Remove outliers by more that this scaled sigma
public double nsigma2 = 2.0; // Second time outlier filter (<0 - disable) public double nsigma2 = 2.0; // Second time outlier filter (<0 - disable)
public double [] chn_weights = {1.0,1.0,1.0,1.0}; // strength, r,b,g public double [] chn_weights = {1.0,1.0,1.0,1.0}; // strength, r,b,g
...@@ -50,23 +49,20 @@ public class OpticalFlowParameters { ...@@ -50,23 +49,20 @@ public class OpticalFlowParameters {
public double frac_radius = 0.9; // add to integer radius for window calculation public double frac_radius = 0.9; // add to integer radius for window calculation
public double tolerance_absolute_macro = 0.25; // absolute disparity half-range to consolidate macro tiles public double tolerance_absolute_macro = 0.25; // absolute disparity half-range to consolidate macro tiles
public double tolerance_relative_macro = 0.2; // relative disparity half-range to consolidate macro tiles public double tolerance_relative_macro = 0.2; // relative disparity half-range to consolidate macro tiles
public int iradius_cm = 3; // half-size of the square to process public int iradius_cm = 3; // half-size of the square to process
public double dradius_cm = 1.5; // weight calculation (1/(r/dradius)^2 + 1) public double dradius_cm = 1.5; // weight calculation (1/(r/dradius)^2 + 1)
public int refine_num_cm = 5; // number of iterations to apply weights around new center public int refine_num_cm = 5; // number of iterations to apply weights around new center
public double magic_scale = 0.85; // 2.0 * 0.85; public double magic_scale = 0.85; // 2.0 * 0.85;
public int max_refines = 50; public int max_refines = 50;
public int num_refine_all = 3; public int num_refine_all = 3;
public double min_change = 0.1; // 01;// sqrt (dx*dx + dy*dy) for correction (int tiles) in pixels public double min_change = 0.1; // 01;// sqrt (dx*dx + dy*dy) for correction (int tiles) in pixels
public int best_neibs_num = 4; // use 4 best neighbors to calculate std deviation public int best_neibs_num = 4; // use 4 best neighbors to calculate std deviation
public double ref_stdev = 5.0; // strength 0.5 if standard deviation of best neighbors to tile difference is this. public double ref_stdev = 5.0; // strength 0.5 if standard deviation of best neighbors to tile difference is this.
public boolean ignore_ers = false; // ignore velocities from individual ERS (LWIR - ignore, RGB - do not ignore
public double lpf_pairs = 5.0; // velocities LPF during pairwise fitting
public double lpf_series = 5.0; // velocities LPF during all-to-reference fitting
public boolean combine_empty_only = true; // false; public boolean combine_empty_only = true; // false;
public boolean late_normalize_iterate = true; public boolean late_normalize_iterate = true;
public int test_corr_rad_max = 3; public int test_corr_rad_max = 3;
// for recalculateFlowXY() // for recalculateFlowXY()
...@@ -150,6 +146,14 @@ public class OpticalFlowParameters { ...@@ -150,6 +146,14 @@ public class OpticalFlowParameters {
"Use this number of the neighbors (of total 8) that are most similar to the current tile to calculate confidence. Zero confidence if there are not enough neighbors."); "Use this number of the neighbors (of total 8) that are most similar to the current tile to calculate confidence. Zero confidence if there are not enough neighbors.");
gd.addNumericField("Expected standard deviation of the Optical Flow", this.ref_stdev, 3,6,"pix", gd.addNumericField("Expected standard deviation of the Optical Flow", this.ref_stdev, 3,6,"pix",
"Calculate for the best neighbors around the current tile: confidence= (ref_stdev ^ 2)/(ref_stdev ^2 + stdev^2)"); "Calculate for the best neighbors around the current tile: confidence= (ref_stdev ^ 2)/(ref_stdev ^2 + stdev^2)");
gd.addMessage("Linear and Rotational Velocities");
gd.addCheckbox ("Ignore velocities from individual ERS", this.ignore_ers,
"Ignore relative pose from individa-scene ERS when calculating relative poses");
gd.addNumericField("Velocities LPF during pairwise fitting", this.lpf_pairs, 3,6,"samples",
"Half of the full width LPF to smooth ERS velocities during consecutive pairs pose fitting");
gd.addNumericField("Velocities LPF during all-to-reference fitting", this.lpf_series, 3,6,"samples",
"Half of the full width LPF to smooth ERS velocities during all scenes to reference pose fitting");
gd.addMessage("Testing and Debug"); gd.addMessage("Testing and Debug");
gd.addCheckbox ("Consolidate correlation macrotiles only if the current macrotile is null", this.combine_empty_only, gd.addCheckbox ("Consolidate correlation macrotiles only if the current macrotile is null", this.combine_empty_only,
...@@ -203,9 +207,13 @@ public class OpticalFlowParameters { ...@@ -203,9 +207,13 @@ public class OpticalFlowParameters {
this.best_neibs_num = (int) gd.getNextNumber(); this.best_neibs_num = (int) gd.getNextNumber();
this.ref_stdev = gd.getNextNumber(); this.ref_stdev = gd.getNextNumber();
this.ignore_ers = gd.getNextBoolean();
this.lpf_pairs = gd.getNextNumber();
this.lpf_series = gd.getNextNumber();
this.combine_empty_only = gd.getNextBoolean(); this.combine_empty_only = gd.getNextBoolean();
this.late_normalize_iterate = gd.getNextBoolean(); this.late_normalize_iterate = gd.getNextBoolean();
this.test_corr_rad_max = (int) gd.getNextNumber(); this.test_corr_rad_max = (int) gd.getNextNumber();
this.debug_level_optical = (int) gd.getNextNumber(); this.debug_level_optical = (int) gd.getNextNumber();
this.debug_level_iterate = (int) gd.getNextNumber(); this.debug_level_iterate = (int) gd.getNextNumber();
this.enable_debug_images = gd.getNextBoolean(); this.enable_debug_images = gd.getNextBoolean();
...@@ -245,6 +253,10 @@ public class OpticalFlowParameters { ...@@ -245,6 +253,10 @@ public class OpticalFlowParameters {
properties.setProperty(prefix+"best_neibs_num", this.best_neibs_num+""); properties.setProperty(prefix+"best_neibs_num", this.best_neibs_num+"");
properties.setProperty(prefix+"ref_stdev", this.ref_stdev+""); properties.setProperty(prefix+"ref_stdev", this.ref_stdev+"");
properties.setProperty(prefix+"ignore_ers", this.ignore_ers+"");
properties.setProperty(prefix+"lpf_pairs", this.lpf_pairs+"");
properties.setProperty(prefix+"lpf_series", this.lpf_series+"");
properties.setProperty(prefix+"combine_empty_only", this.combine_empty_only+""); properties.setProperty(prefix+"combine_empty_only", this.combine_empty_only+"");
properties.setProperty(prefix+"late_normalize_iterate", this.late_normalize_iterate+""); properties.setProperty(prefix+"late_normalize_iterate", this.late_normalize_iterate+"");
...@@ -289,6 +301,11 @@ public class OpticalFlowParameters { ...@@ -289,6 +301,11 @@ public class OpticalFlowParameters {
if (properties.getProperty(prefix+"best_neibs_num")!=null) this.best_neibs_num=Integer.parseInt(properties.getProperty(prefix+"best_neibs_num")); if (properties.getProperty(prefix+"best_neibs_num")!=null) this.best_neibs_num=Integer.parseInt(properties.getProperty(prefix+"best_neibs_num"));
if (properties.getProperty(prefix+"ref_stdev")!=null) this.ref_stdev=Double.parseDouble(properties.getProperty(prefix+"ref_stdev")); if (properties.getProperty(prefix+"ref_stdev")!=null) this.ref_stdev=Double.parseDouble(properties.getProperty(prefix+"ref_stdev"));
if (properties.getProperty(prefix+"ignore_ers")!=null) this.ignore_ers=Boolean.parseBoolean(properties.getProperty(prefix+"ignore_ers"));
if (properties.getProperty(prefix+"lpf_pairs")!=null) this.lpf_pairs=Double.parseDouble(properties.getProperty(prefix+"lpf_pairs"));
if (properties.getProperty(prefix+"lpf_series")!=null) this.lpf_series=Double.parseDouble(properties.getProperty(prefix+"lpf_series"));
if (properties.getProperty(prefix+"combine_empty_only")!=null) this.combine_empty_only=Boolean.parseBoolean(properties.getProperty(prefix+"combine_empty_only")); if (properties.getProperty(prefix+"combine_empty_only")!=null) this.combine_empty_only=Boolean.parseBoolean(properties.getProperty(prefix+"combine_empty_only"));
if (properties.getProperty(prefix+"late_normalize_iterate")!=null) this.late_normalize_iterate=Boolean.parseBoolean(properties.getProperty(prefix+"late_normalize_iterate")); if (properties.getProperty(prefix+"late_normalize_iterate")!=null) this.late_normalize_iterate=Boolean.parseBoolean(properties.getProperty(prefix+"late_normalize_iterate"));
if (properties.getProperty(prefix+"test_corr_rad_max")!=null) this.test_corr_rad_max=Integer.parseInt(properties.getProperty(prefix+"test_corr_rad_max")); if (properties.getProperty(prefix+"test_corr_rad_max")!=null) this.test_corr_rad_max=Integer.parseInt(properties.getProperty(prefix+"test_corr_rad_max"));
...@@ -331,6 +348,10 @@ public class OpticalFlowParameters { ...@@ -331,6 +348,10 @@ public class OpticalFlowParameters {
ofp.best_neibs_num = this.best_neibs_num; ofp.best_neibs_num = this.best_neibs_num;
ofp.ref_stdev = this.ref_stdev; ofp.ref_stdev = this.ref_stdev;
ofp.ignore_ers = this.ignore_ers;
ofp.lpf_pairs = this.lpf_pairs;
ofp.lpf_series = this.lpf_series;
ofp.combine_empty_only = this.combine_empty_only; ofp.combine_empty_only = this.combine_empty_only;
ofp.late_normalize_iterate = this.late_normalize_iterate; ofp.late_normalize_iterate = this.late_normalize_iterate;
ofp.test_corr_rad_max = this.test_corr_rad_max; ofp.test_corr_rad_max = this.test_corr_rad_max;
......
...@@ -3573,7 +3573,7 @@ ImageDtt.startAndJoin(threads); ...@@ -3573,7 +3573,7 @@ ImageDtt.startAndJoin(threads);
} }
return ds; return ds;
} }
public double [][] getDSLMA( public static double [][] getDSLMA(
CLTPass3d scan, CLTPass3d scan,
boolean use_final) boolean use_final)
{ {
......
...@@ -8233,7 +8233,7 @@ if (debugLevel > -100) return true; // temporarily ! ...@@ -8233,7 +8233,7 @@ if (debugLevel > -100) return true; // temporarily !
EyesisCorrectionParameters.RGBParameters rgbParameters, EyesisCorrectionParameters.RGBParameters rgbParameters,
EyesisCorrectionParameters.EquirectangularParameters equirectangularParameters, EyesisCorrectionParameters.EquirectangularParameters equirectangularParameters,
Properties properties, Properties properties,
boolean reset_from_extrinsics, boolean reset_from_extrinsics, // true
final int threadsMax, // maximal number of threads to launch final int threadsMax, // maximal number of threads to launch
final boolean updateStatus, final boolean updateStatus,
final int debugLevel) throws Exception final int debugLevel) throws Exception
...@@ -8291,7 +8291,7 @@ if (debugLevel > -100) return true; // temporarily ! ...@@ -8291,7 +8291,7 @@ if (debugLevel > -100) return true; // temporarily !
// QuadCLT qPrev = (i > 0) ? quadCLTs[i - 1] : null; // QuadCLT qPrev = (i > 0) ? quadCLTs[i - 1] : null;
QuadCLTCPU qPrev = (i > 0) ? quadCLTs[i - 1] : null; QuadCLTCPU qPrev = (i > 0) ? quadCLTs[i - 1] : null;
// double [][][] pair_sets = // double [][][] pair_sets =
double [][] pose = opticalFlow.getPoseFromErs( double [][] pose = OpticalFlow.getPoseFromErs(
// FIXME: *********** update getPoseFromErs to use QUADCLTCPU ! ********** // FIXME: *********** update getPoseFromErs to use QUADCLTCPU ! **********
clt_parameters.ofp.k_prev, // k_prev, clt_parameters.ofp.k_prev, // k_prev,
(QuadCLT) quadCLTs[i], (QuadCLT) quadCLTs[i],
...@@ -8324,7 +8324,6 @@ if (debugLevel > -100) return true; // temporarily ! ...@@ -8324,7 +8324,6 @@ if (debugLevel > -100) return true; // temporarily !
CLTParameters clt_parameters, CLTParameters clt_parameters,
EyesisCorrectionParameters.DebayerParameters debayerParameters, EyesisCorrectionParameters.DebayerParameters debayerParameters,
ColorProcParameters colorProcParameters, ColorProcParameters colorProcParameters,
// ColorProcParameters colorProcParameters_aux,
CorrectionColorProc.ColorGainsParameters channelGainParameters, CorrectionColorProc.ColorGainsParameters channelGainParameters,
EyesisCorrectionParameters.RGBParameters rgbParameters, EyesisCorrectionParameters.RGBParameters rgbParameters,
EyesisCorrectionParameters.EquirectangularParameters equirectangularParameters, EyesisCorrectionParameters.EquirectangularParameters equirectangularParameters,
...@@ -8347,12 +8346,8 @@ if (debugLevel > -100) return true; // temporarily ! ...@@ -8347,12 +8346,8 @@ if (debugLevel > -100) return true; // temporarily !
return; return;
} }
QuadCLT.SetChannels [] set_channels=quadCLT_main.setChannels(debugLevel); QuadCLT.SetChannels [] set_channels=quadCLT_main.setChannels(debugLevel);
// String set_name = set_channels[0].set_name;
// QuadCLT [] quadCLTs = new QuadCLT [set_channels.length];
// QuadCLTCPU [] quadCLTs = new QuadCLTCPU [set_channels.length];
QuadCLT [] quadCLTs = new QuadCLT [set_channels.length]; QuadCLT [] quadCLTs = new QuadCLT [set_channels.length];
for (int i = 0; i < quadCLTs.length; i++) { for (int i = 00; i < quadCLTs.length; i++) {
quadCLTs[i] = (QuadCLT) quadCLT_main.spawnQuadCLT( quadCLTs[i] = (QuadCLT) quadCLT_main.spawnQuadCLT(
set_channels[i].set_name, set_channels[i].set_name,
clt_parameters, clt_parameters,
...@@ -8361,8 +8356,8 @@ if (debugLevel > -100) return true; // temporarily ! ...@@ -8361,8 +8356,8 @@ if (debugLevel > -100) return true; // temporarily !
debugLevel); debugLevel);
// temporarily fix wrong sign: // temporarily fix wrong sign:
ErsCorrection ers = (ErsCorrection) (quadCLTs[i].getGeometryCorrection()); ErsCorrection ers = (ErsCorrection) (quadCLTs[i].getGeometryCorrection());
if (reset_from_extrinsics) { if (reset_from_extrinsics) { // extrinsics vector "IMU" parameters
System.out.println("Reset ERS parameters from intraframe extrinsics"); System.out.println("Reset ERS parameters from intraframe extrinsics");
ers.setupERSfromExtrinsics(); ers.setupERSfromExtrinsics();
} }
quadCLTs[i].setDSRBG( quadCLTs[i].setDSRBG(
...@@ -8394,71 +8389,6 @@ if (debugLevel > -100) return true; // temporarily ! ...@@ -8394,71 +8389,6 @@ if (debugLevel > -100) return true; // temporarily !
} }
/*
public void interSeriesLMA(
QuadCLT quadCLT_main, // tiles should be set
CLTParameters clt_parameters,
EyesisCorrectionParameters.DebayerParameters debayerParameters,
ColorProcParameters colorProcParameters,
// ColorProcParameters colorProcParameters_aux,
CorrectionColorProc.ColorGainsParameters channelGainParameters,
EyesisCorrectionParameters.RGBParameters rgbParameters,
EyesisCorrectionParameters.EquirectangularParameters equirectangularParameters,
Properties properties,
boolean reset_from_extrinsics,
final int threadsMax, // maximal number of threads to launch
final boolean updateStatus,
final int debugLevel) throws Exception
{
if ((quadCLT_main != null) && (quadCLT_main.getGPU() != null)) {
quadCLT_main.getGPU().resetGeometryCorrection();
quadCLT_main.gpuResetCorrVector(); // .getGPU().resetGeometryCorrectionVector();
}
// final boolean batch_mode = clt_parameters.batch_run;
this.startTime=System.nanoTime();
String [] sourceFiles0=quadCLT_main.correctionsParameters.getSourcePaths();
QuadCLT.SetChannels [] set_channels_main = quadCLT_main.setChannels(debugLevel);
if ((set_channels_main == null) || (set_channels_main.length==0)) {
System.out.println("No files to process (of "+sourceFiles0.length+")");
return;
}
QuadCLT.SetChannels [] set_channels=quadCLT_main.setChannels(debugLevel);
QuadCLT [] quadCLTs = new QuadCLT [set_channels.length];
// QuadCLTCPU [] quadCLTs = new QuadCLTCPU [set_channels.length];
for (int i = 0; i < quadCLTs.length; i++) {
quadCLTs[i] = (QuadCLT) quadCLT_main.spawnQuadCLT(
set_channels[i].set_name,
clt_parameters,
colorProcParameters, //
threadsMax,
debugLevel);
// temporarily fix wrong sign:
// ErsCorrection ers = (ErsCorrection) (quadCLTs[i].getGeometryCorrection());
quadCLTs[i].setDSRBG(
clt_parameters, // CLTParameters clt_parameters,
threadsMax, // int threadsMax, // maximal number of threads to launch
updateStatus, // boolean updateStatus,
debugLevel); // int debugLevel)
}
OpticalFlow opticalFlow = new OpticalFlow(
quadCLT_main.getNumSensors(),
clt_parameters.ofp.scale_no_lma_disparity, // double scale_no_lma_disparity,
threadsMax, // int threadsMax, // maximal number of threads to launch
updateStatus); // boolean updateStatus);
opticalFlow.adjustSeries(
clt_parameters, // CLTParameters clt_parameters,
clt_parameters.ofp.k_prev, // k_prev,\
// FIXME: *********** update adjustSeries to use QUADCLTCPU ! **********
// (QuadCLT [])
quadCLTs, // QuadCLT [] scenes, // ordered by increasing timestamps
clt_parameters.ofp.debug_level_optical); // 1); // -1); // int debug_level);
System.out.println("End of interSeriesLMA()");
}
*/
public void interSeriesLMA( public void interSeriesLMA(
QuadCLT quadCLT_main, // tiles should be set QuadCLT quadCLT_main, // tiles should be set
...@@ -8491,7 +8421,6 @@ if (debugLevel > -100) return true; // temporarily ! ...@@ -8491,7 +8421,6 @@ if (debugLevel > -100) return true; // temporarily !
QuadCLT.SetChannels [] set_channels=quadCLT_main.setChannels(debugLevel); QuadCLT.SetChannels [] set_channels=quadCLT_main.setChannels(debugLevel);
QuadCLT [] quadCLTs = new QuadCLT [set_channels.length]; QuadCLT [] quadCLTs = new QuadCLT [set_channels.length];
// QuadCLTCPU [] quadCLTs = new QuadCLTCPU [set_channels.length];
for (int i = 0; i < quadCLTs.length; i++) { for (int i = 0; i < quadCLTs.length; i++) {
quadCLTs[i] = (QuadCLT) quadCLT_main.spawnQuadCLT( quadCLTs[i] = (QuadCLT) quadCLT_main.spawnQuadCLT(
set_channels[i].set_name, set_channels[i].set_name,
...@@ -8499,8 +8428,6 @@ if (debugLevel > -100) return true; // temporarily ! ...@@ -8499,8 +8428,6 @@ if (debugLevel > -100) return true; // temporarily !
colorProcParameters, // colorProcParameters, //
threadsMax, threadsMax,
debugLevel); debugLevel);
// temporarily fix wrong sign:
// ErsCorrection ers = (ErsCorrection) (quadCLTs[i].getGeometryCorrection());
quadCLTs[i].setDSRBG( quadCLTs[i].setDSRBG(
clt_parameters, // CLTParameters clt_parameters, clt_parameters, // CLTParameters clt_parameters,
threadsMax, // int threadsMax, // maximal number of threads to launch threadsMax, // int threadsMax, // maximal number of threads to launch
...@@ -11786,15 +11713,48 @@ if (debugLevel > -100) return true; // temporarily ! ...@@ -11786,15 +11713,48 @@ if (debugLevel > -100) return true; // temporarily !
updateStatus, updateStatus,
debugLevel); debugLevel);
} }
if (debugLevel > -2) { // && clt_parameters.show_first_bg) {
quadCLT_aux.tp.showScan(
quadCLT_aux.tp.clt_3d_passes.get( quadCLT_aux.tp.clt_3d_passes.size() -1), //last
"last_data-"+quadCLT_aux.tp.clt_3d_passes.size());
}
// double [][] aux_last_scan = quadCLT_aux.tp.getShowDS( // double [][] aux_last_scan = quadCLT_aux.tp.getShowDS(
// quadCLT_aux.tp.clt_3d_passes.get( quadCLT_aux.tp.clt_3d_passes.size() -1), // quadCLT_aux.tp.clt_3d_passes.get( quadCLT_aux.tp.clt_3d_passes.size() -1),
// false); // boolean force_final); // false); // boolean force_final);
double [][] aux_last_scan = quadCLT_aux.tp.getDSLMA( double [][] aux_last_scan = TileProcessor.getDSLMA(
quadCLT_aux.tp.clt_3d_passes.get( quadCLT_aux.tp.clt_3d_passes.size() -1), quadCLT_aux.tp.clt_3d_passes.get( quadCLT_aux.tp.clt_3d_passes.size() -1),
false); // boolean force_final); false); // boolean force_final);
//measure w/o LMA just to get strength w/o any averaging
dsi[DSI_DISPARITY_AUX] = aux_last_scan[0]; dsi[DSI_DISPARITY_AUX] = aux_last_scan[0];
dsi[DSI_STRENGTH_AUX] = aux_last_scan[1]; dsi[DSI_STRENGTH_AUX] = aux_last_scan[1];
dsi[DSI_DISPARITY_AUX_LMA] = aux_last_scan[2]; dsi[DSI_DISPARITY_AUX_LMA] = aux_last_scan[2];
if (quadCLT_main.correctionsParameters.clt_batch_dsi_cm_strength) {
CLTPass3d scan = new CLTPass3d(quadCLT_aux.tp);
scan.setTileOpDisparity(aux_last_scan[0]); // measure w/o LMA, use just strength
quadCLT_aux.CLTMeas( // perform single pass according to prepared tiles operations and disparity
clt_parameters, // EyesisCorrectionParameters.CLTParameters clt_parameters,
scan, // final CLTPass3d scan,
false, // final boolean save_textures,
false, // final boolean need_diffs, // calculate diffs even if textures are not needed
0, // final int clust_radius,
true, // final boolean save_corr,
false, // final boolean run_lma, // = true;
threadsMax, // final int threadsMax, // maximal number of threads to launch
updateStatus, // final boolean updateStatus,
debugLevel); // final int debugLevel);
dsi[DSI_STRENGTH_AUX] = scan.getStrength();
if (debugLevel > 1) {
quadCLT_aux.tp.showScan(
scan, // CLTPass3d scan,
"test-strength");
}
} else {
dsi[DSI_STRENGTH_AUX] = aux_last_scan[1];
}
// quadCLT_main.saveDSIMain (dsi); // quadCLT_main.saveDSIMain (dsi);
quadCLT_aux.saveDSIAll ( quadCLT_aux.saveDSIAll (
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment