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 {
}
// 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];
quadCLTs[cent_index].setDisparityDSI (disparity_sfm);
quadCLTs[cent_index].setDisparityLmaDSI(disparity_sfm);
quadCLTs[cent_index].setStrengthDSI (sfm_confidence);
quadCLTs[cent_index].setDisparityDSI (disparity_sfm.clone());
quadCLTs[cent_index].setDisparityLmaDSI(disparity_sfm.clone());
quadCLTs[cent_index].setStrengthDSI (sfm_confidence.clone());
// TODO: Maintain (similar to sfm_gain2) and set strength??
// Do not yet set combo dsi - copy after disparity correction from IMS
quadCLTs[cent_index].setSFMGain2(sfm_gain2);
......@@ -862,7 +862,9 @@ public class EstimateSceneRange {
double scale_img = OpticalFlow.getImgImsScale( // correctInfinityFromIMS(
quadCLTs, // QuadCLT [] quadCLTs,
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(
scale_img, // double scale_img,
......@@ -875,7 +877,7 @@ public class EstimateSceneRange {
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]
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)
quadCLTs[cent_index].setDispInfinityRef( // may use incDispInfinityRef() - was 0 before
inf_disp); // double disp)
......@@ -902,6 +904,7 @@ public class EstimateSceneRange {
}
}
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(
QuadCLTCPU.DSI_SUFFIXES[0], // String suffix, always with LMA
......
......@@ -1715,9 +1715,11 @@ public class Interscene {
boolean apply_disparity_ims = clt_parameters.imp.air_disp_corr;
if (adjust_disparity_ims) {
double scale_img = OpticalFlow.getImgImsScale( // correctInfinityFromIMS(
quadCLTs, // QuadCLT [] quadCLTs,
quadCLTs, // QuadCLT [] quadCLTs,
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(
scale_img, // double scale_img,
......
......@@ -5894,7 +5894,8 @@ public class OpticalFlow {
double scale_img = OpticalFlow.getImgImsScale( // correctInfinityFromIMS(
quadCLTs, // QuadCLT [] quadCLTs,
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(
scale_img, // double scale_img,
quadCLTs[ref_index], // QuadCLT master_CLT,
......@@ -7634,7 +7635,9 @@ public class OpticalFlow {
double scale_img = getImgImsScale( // correctInfinityFromIMS(
quadCLTs, // QuadCLT [] quadCLTs,
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 [] strength = master_CLT.getDLS()[2];
double sw=0,swd=0; // old, new-old
......@@ -7687,7 +7690,8 @@ public class OpticalFlow {
double scale_img = getImgImsScale( // correctInfinityFromIMS(
quadCLTs, // QuadCLT [] quadCLTs,
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 [] strength = master_CLT.getDLS()[2];
double sw=0,swd=0; // old, new-old
......@@ -7740,7 +7744,11 @@ public class OpticalFlow {
public static double getImgImsScale( // correctInfinityFromIMS(
QuadCLT [] quadCLTs,
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();
// find first and last initialized scenes, assuming approximate moving in the same direction
double [] xyz0 = null, xyz1 = null;
......@@ -8001,7 +8009,9 @@ public class OpticalFlow {
double scale_img = getImgImsScale( // correctInfinityFromIMS(
quadCLTs, // QuadCLT [] quadCLTs,
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);
System.out.println("inf_disp_ref="+inf_disp_ref);
......
......@@ -3183,9 +3183,20 @@ public class QuadCLTCPU {
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
return getDLS(this.dsi);
}
public double [][] getDLS(double [][] dsi){ // get disparity, disparity_lma, strength, sfm_gain
if (dsi == null) {
// System.out.println("dsi== null, use spawnQuadCLT(), restoreFromModel(), ... to set it");
......@@ -3201,12 +3212,12 @@ public class QuadCLTCPU {
dls[5] = dsi[isAux()? TwoQuadCLT.DSI_TERRAIN_AUX : TwoQuadCLT.DSI_TERRAIN_MAIN];
return dls;
}
public double [][] comboFromMain(){
public double [][] comboFromMain(){ // may want to run cloneInner() to separate data from its source
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) {
return null;
}
......@@ -3220,6 +3231,8 @@ public class QuadCLTCPU {
combo_dsi[OpticalFlow.COMBO_DSN_INDX_TERRAIN] = dsi[isAux()? TwoQuadCLT.DSI_TERRAIN_AUX : TwoQuadCLT.DSI_TERRAIN_MAIN];
return combo_dsi;
}
// Duplicate disparity to FG/BG to make OpticalFLow happy
/*
......@@ -3227,11 +3240,11 @@ public class QuadCLTCPU {
double [] bg_lma = combo_dsn_final[COMBO_DSN_INDX_DISP_BG_ALL].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);
}
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);
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];
......
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