Commit be2cbd56 authored by Andrey Filippov's avatar Andrey Filippov

Fixed bug - twice correcting because two disparity arrays were equal

(not clones), so they were modified twice
parent fa75f981
...@@ -848,9 +848,9 @@ public class EstimateSceneRange { ...@@ -848,9 +848,9 @@ public class EstimateSceneRange {
} }
// Set both DSI_DISPARITY_AUX/MAIN and DSI_DISPARITY_AUX/MAIN_LMA to the one adjusted // Set both DSI_DISPARITY_AUX/MAIN and DSI_DISPARITY_AUX/MAIN_LMA to the one adjusted
final double [] disparity_sfm = quadCLTs[cent_index].getDLS()[clt_parameters.imp.use_lma_dsi?1:0]; final double [] disparity_sfm = quadCLTs[cent_index].getDLS()[clt_parameters.imp.use_lma_dsi?1:0];
quadCLTs[cent_index].setDisparityDSI (disparity_sfm); quadCLTs[cent_index].setDisparityDSI (disparity_sfm.clone());
quadCLTs[cent_index].setDisparityLmaDSI(disparity_sfm); quadCLTs[cent_index].setDisparityLmaDSI(disparity_sfm.clone());
quadCLTs[cent_index].setStrengthDSI (sfm_confidence); quadCLTs[cent_index].setStrengthDSI (sfm_confidence.clone());
// TODO: Maintain (similar to sfm_gain2) and set strength?? // TODO: Maintain (similar to sfm_gain2) and set strength??
// Do not yet set combo dsi - copy after disparity correction from IMS // Do not yet set combo dsi - copy after disparity correction from IMS
quadCLTs[cent_index].setSFMGain2(sfm_gain2); quadCLTs[cent_index].setSFMGain2(sfm_gain2);
...@@ -862,7 +862,9 @@ public class EstimateSceneRange { ...@@ -862,7 +862,9 @@ public class EstimateSceneRange {
double scale_img = OpticalFlow.getImgImsScale( // correctInfinityFromIMS( double scale_img = OpticalFlow.getImgImsScale( // correctInfinityFromIMS(
quadCLTs, // QuadCLT [] quadCLTs, quadCLTs, // QuadCLT [] quadCLTs,
quadCLTs[cent_index], // QuadCLT master_CLT) quadCLTs[cent_index], // QuadCLT master_CLT)
earliest); // estimateSceneRange.earliest_prescan); // int earliest_scene) earliest, // estimateSceneRange.earliest_prescan); // int earliest_scene)
latest); // int latest_scene) { // -1 will use quadCLTs.length -1;
double inf_disp = OpticalFlow.getImsDisparityCorrection( double inf_disp = OpticalFlow.getImsDisparityCorrection(
scale_img, // double scale_img, scale_img, // double scale_img,
...@@ -875,7 +877,7 @@ public class EstimateSceneRange { ...@@ -875,7 +877,7 @@ public class EstimateSceneRange {
if (apply_disparity_ims) { // make sure - which DSI it adjusts when using SFM if (apply_disparity_ims) { // make sure - which DSI it adjusts when using SFM
// Update DSI_MAIN with disparity at infinity. Store it somewhere in quadCLTs[ref_index] // Update DSI_MAIN with disparity at infinity. Store it somewhere in quadCLTs[ref_index]
quadCLTs[cent_index].offsetDSI( // applies to all disparity slices quadCLTs[cent_index].offsetDSI( // applies to all disparity slices INCREMENTS twice?
inf_disp); // double inf_disp) inf_disp); // double inf_disp)
quadCLTs[cent_index].setDispInfinityRef( // may use incDispInfinityRef() - was 0 before quadCLTs[cent_index].setDispInfinityRef( // may use incDispInfinityRef() - was 0 before
inf_disp); // double disp) inf_disp); // double disp)
...@@ -902,6 +904,7 @@ public class EstimateSceneRange { ...@@ -902,6 +904,7 @@ public class EstimateSceneRange {
} }
} }
double [][] combo_dsn = quadCLTs[cent_index].comboFromMainFgBg(); // set FG/BG layers to avoid null pointers double [][] combo_dsn = quadCLTs[cent_index].comboFromMainFgBg(); // set FG/BG layers to avoid null pointers
QuadCLTCPU.cloneInner(combo_dsn); // separate data array from its source
quadCLTs[cent_index].saveDoubleArrayInModelDirectory( quadCLTs[cent_index].saveDoubleArrayInModelDirectory(
QuadCLTCPU.DSI_SUFFIXES[0], // String suffix, always with LMA QuadCLTCPU.DSI_SUFFIXES[0], // String suffix, always with LMA
......
...@@ -1717,7 +1717,9 @@ public class Interscene { ...@@ -1717,7 +1717,9 @@ public class Interscene {
double scale_img = OpticalFlow.getImgImsScale( // correctInfinityFromIMS( double scale_img = OpticalFlow.getImgImsScale( // correctInfinityFromIMS(
quadCLTs, // QuadCLT [] quadCLTs, quadCLTs, // QuadCLT [] quadCLTs,
quadCLTs[ref_index], // QuadCLT master_CLT) quadCLTs[ref_index], // QuadCLT master_CLT)
earliest_scene); // int earliest_scene) earliest_scene, // int earliest_scene)
-1); // int latest_scene) { // -1 will use quadCLTs.length -1;
double inf_disp = OpticalFlow.getImsDisparityCorrection( double inf_disp = OpticalFlow.getImsDisparityCorrection(
scale_img, // double scale_img, scale_img, // double scale_img,
......
...@@ -5894,7 +5894,8 @@ public class OpticalFlow { ...@@ -5894,7 +5894,8 @@ public class OpticalFlow {
double scale_img = OpticalFlow.getImgImsScale( // correctInfinityFromIMS( double scale_img = OpticalFlow.getImgImsScale( // correctInfinityFromIMS(
quadCLTs, // QuadCLT [] quadCLTs, quadCLTs, // QuadCLT [] quadCLTs,
quadCLTs[ref_index], // QuadCLT master_CLT) quadCLTs[ref_index], // QuadCLT master_CLT)
earliest_scene); // int earliest_scene) earliest_scene, // int earliest_scene)
-1); // int latest_scene) { // -1 will use quadCLTs.length -1;
double inf_disp = OpticalFlow.getImsDisparityCorrection( double inf_disp = OpticalFlow.getImsDisparityCorrection(
scale_img, // double scale_img, scale_img, // double scale_img,
quadCLTs[ref_index], // QuadCLT master_CLT, quadCLTs[ref_index], // QuadCLT master_CLT,
...@@ -7634,7 +7635,9 @@ public class OpticalFlow { ...@@ -7634,7 +7635,9 @@ public class OpticalFlow {
double scale_img = getImgImsScale( // correctInfinityFromIMS( double scale_img = getImgImsScale( // correctInfinityFromIMS(
quadCLTs, // QuadCLT [] quadCLTs, quadCLTs, // QuadCLT [] quadCLTs,
master_CLT, // QuadCLT master_CLT) master_CLT, // QuadCLT master_CLT)
earliest_scene); // int earliest_scene) earliest_scene, // int earliest_scene)
-1); // int latest_scene) { // -1 will use quadCLTs.length -1;
double [] disparity_dsi = master_CLT.getDLS()[1]; // null double [] disparity_dsi = master_CLT.getDLS()[1]; // null
double [] strength = master_CLT.getDLS()[2]; double [] strength = master_CLT.getDLS()[2];
double sw=0,swd=0; // old, new-old double sw=0,swd=0; // old, new-old
...@@ -7687,7 +7690,8 @@ public class OpticalFlow { ...@@ -7687,7 +7690,8 @@ public class OpticalFlow {
double scale_img = getImgImsScale( // correctInfinityFromIMS( double scale_img = getImgImsScale( // correctInfinityFromIMS(
quadCLTs, // QuadCLT [] quadCLTs, quadCLTs, // QuadCLT [] quadCLTs,
master_CLT, // QuadCLT master_CLT) master_CLT, // QuadCLT master_CLT)
earliest_scene); // int earliest_scene) earliest_scene, // int earliest_scene)
-1); // int latest_scene) { // -1 will use quadCLTs.length -1;
double [] disparity_dsi = master_CLT.getDLS()[1]; // null double [] disparity_dsi = master_CLT.getDLS()[1]; // null
double [] strength = master_CLT.getDLS()[2]; double [] strength = master_CLT.getDLS()[2];
double sw=0,swd=0; // old, new-old double sw=0,swd=0; // old, new-old
...@@ -7740,7 +7744,11 @@ public class OpticalFlow { ...@@ -7740,7 +7744,11 @@ public class OpticalFlow {
public static double getImgImsScale( // correctInfinityFromIMS( public static double getImgImsScale( // correctInfinityFromIMS(
QuadCLT [] quadCLTs, QuadCLT [] quadCLTs,
QuadCLT master_CLT, QuadCLT master_CLT,
int earliest_scene) { int earliest_scene,
int latest_scene) { // -1 will use quadCLTs.length -1;
if (latest_scene < 0) {
latest_scene += quadCLTs.length;
}
ErsCorrection ers_reference = master_CLT.getErsCorrection(); ErsCorrection ers_reference = master_CLT.getErsCorrection();
// find first and last initialized scenes, assuming approximate moving in the same direction // find first and last initialized scenes, assuming approximate moving in the same direction
double [] xyz0 = null, xyz1 = null; double [] xyz0 = null, xyz1 = null;
...@@ -8001,7 +8009,9 @@ public class OpticalFlow { ...@@ -8001,7 +8009,9 @@ public class OpticalFlow {
double scale_img = getImgImsScale( // correctInfinityFromIMS( double scale_img = getImgImsScale( // correctInfinityFromIMS(
quadCLTs, // QuadCLT [] quadCLTs, quadCLTs, // QuadCLT [] quadCLTs,
ref_scene, // QuadCLT master_CLT) ref_scene, // QuadCLT master_CLT)
0); // earliest_scene); // int earliest_scene) 0, // earliest_scene); // int earliest_scene)
-1); // int latest_scene) { // -1 will use quadCLTs.length -1;
inf_disp_ref = disp_avg * (1.0 - scale_img); inf_disp_ref = disp_avg * (1.0 - scale_img);
System.out.println("inf_disp_ref="+inf_disp_ref); System.out.println("inf_disp_ref="+inf_disp_ref);
......
...@@ -3183,9 +3183,20 @@ public class QuadCLTCPU { ...@@ -3183,9 +3183,20 @@ public class QuadCLTCPU {
return disparity; return disparity;
} }
public static void cloneInner(double [][] data){
if (data != null) {
for (int i = 0; i < data.length; i++) {
if (data[i] != null) {
data[i] = data[i].clone();
}
}
}
}
public double [][] getDLS(){ // get disparity, disparity_lma, strength, sfm_gain public double [][] getDLS(){ // get disparity, disparity_lma, strength, sfm_gain
return getDLS(this.dsi); return getDLS(this.dsi);
} }
public double [][] getDLS(double [][] dsi){ // get disparity, disparity_lma, strength, sfm_gain public double [][] getDLS(double [][] dsi){ // get disparity, disparity_lma, strength, sfm_gain
if (dsi == null) { if (dsi == null) {
// System.out.println("dsi== null, use spawnQuadCLT(), restoreFromModel(), ... to set it"); // System.out.println("dsi== null, use spawnQuadCLT(), restoreFromModel(), ... to set it");
...@@ -3201,12 +3212,12 @@ public class QuadCLTCPU { ...@@ -3201,12 +3212,12 @@ public class QuadCLTCPU {
dls[5] = dsi[isAux()? TwoQuadCLT.DSI_TERRAIN_AUX : TwoQuadCLT.DSI_TERRAIN_MAIN]; dls[5] = dsi[isAux()? TwoQuadCLT.DSI_TERRAIN_AUX : TwoQuadCLT.DSI_TERRAIN_MAIN];
return dls; return dls;
} }
public double [][] comboFromMain(){ public double [][] comboFromMain(){ // may want to run cloneInner() to separate data from its source
return comboFromMain(this.dsi); return comboFromMain(this.dsi);
} }
public double [][] comboFromMain(double [][] dsi){ public double [][] comboFromMain(double [][] dsi){ // may want to run cloneInner() to separate data from its source
if (dsi == null) { if (dsi == null) {
return null; return null;
} }
...@@ -3221,17 +3232,19 @@ public class QuadCLTCPU { ...@@ -3221,17 +3232,19 @@ public class QuadCLTCPU {
return combo_dsi; return combo_dsi;
} }
// Duplicate disparity to FG/BG to make OpticalFLow happy // Duplicate disparity to FG/BG to make OpticalFLow happy
/* /*
// BG mode // BG mode
double [] bg_lma = combo_dsn_final[COMBO_DSN_INDX_DISP_BG_ALL].clone(); double [] bg_lma = combo_dsn_final[COMBO_DSN_INDX_DISP_BG_ALL].clone();
double [] bg_str = combo_dsn_final[COMBO_DSN_INDX_STRENGTH].clone(); double [] bg_str = combo_dsn_final[COMBO_DSN_INDX_STRENGTH].clone();
*/ */
public double [][] comboFromMainFgBg(){ public double [][] comboFromMainFgBg(){ // may want to run cloneInner() to separate data from its source
return comboFromMainFgBg(this.dsi); return comboFromMainFgBg(this.dsi);
} }
public double [][] comboFromMainFgBg(double [][] dsi){ public double [][] comboFromMainFgBg(double [][] dsi){ // may want to run cloneInner() to separate data from its source
double [][] combo_dsi = comboFromMain(dsi); double [][] combo_dsi = comboFromMain(dsi);
combo_dsi[OpticalFlow.COMBO_DSN_INDX_DISP_BG] = combo_dsi[OpticalFlow.COMBO_DSN_INDX_DISP]; combo_dsi[OpticalFlow.COMBO_DSN_INDX_DISP_BG] = combo_dsi[OpticalFlow.COMBO_DSN_INDX_DISP];
combo_dsi[OpticalFlow.COMBO_DSN_INDX_STRENGTH_BG] = combo_dsi[OpticalFlow.COMBO_DSN_INDX_STRENGTH]; combo_dsi[OpticalFlow.COMBO_DSN_INDX_STRENGTH_BG] = combo_dsi[OpticalFlow.COMBO_DSN_INDX_STRENGTH];
......
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