Loading src/main/java/EyesisCorrectionParameters.java +6 −1 Original line number Diff line number Diff line Loading @@ -2212,7 +2212,8 @@ public class EyesisCorrectionParameters { public boolean msUseSel = true; // Use planes selection masks (generated when splitting to intersecting pairs public boolean msDivideByArea = true; // Divide plane strengths by ellipsoid area public double msScaleProj = 1.5; // Scale projection of the plane ellkipsoid public double msScaleProj = 1.5; // Scale projection of the plane ellipsoid public double msFractUni = 0.3; // Spread this fraction of the ellipsoid weight among extended (double) supertile public boolean replaceWeakOutlayers = true; // false; Loading Loading @@ -2516,6 +2517,7 @@ public class EyesisCorrectionParameters { properties.setProperty(prefix+"msUseSel", this.msUseSel+""); properties.setProperty(prefix+"msDivideByArea", this.msDivideByArea+""); properties.setProperty(prefix+"msScaleProj", this.msScaleProj +""); properties.setProperty(prefix+"msFractUni", this.msFractUni +""); properties.setProperty(prefix+"dbg_migrate", this.dbg_migrate+""); Loading Loading @@ -2812,6 +2814,7 @@ public class EyesisCorrectionParameters { if (properties.getProperty(prefix+"msUseSel")!=null) this.msUseSel=Boolean.parseBoolean(properties.getProperty(prefix+"msUseSel")); if (properties.getProperty(prefix+"msDivideByArea")!=null) this.msDivideByArea=Boolean.parseBoolean(properties.getProperty(prefix+"msDivideByArea")); if (properties.getProperty(prefix+"msScaleProj")!=null) this.msScaleProj=Double.parseDouble(properties.getProperty(prefix+"msScaleProj")); if (properties.getProperty(prefix+"msFractUni")!=null) this.msFractUni=Double.parseDouble(properties.getProperty(prefix+"msFractUni")); if (properties.getProperty(prefix+"dbg_migrate")!=null) this.dbg_migrate=Boolean.parseBoolean(properties.getProperty(prefix+"dbg_migrate")); Loading Loading @@ -3134,6 +3137,7 @@ public class EyesisCorrectionParameters { gd.addCheckbox ("Use planes selection masks (generated when splitting to intersecting pairs", this.msUseSel); gd.addCheckbox ("Divide plane strengths by ellipsoid area", this.msDivideByArea); gd.addNumericField("Scale projection of the plane ellipsoid", this.msScaleProj, 6); gd.addNumericField("Spread this fraction of the ellipsoid weight among extended (double) supertile",this.msFractUni, 6); gd.addCheckbox ("Test new mode after migration", this.dbg_migrate); Loading Loading @@ -3437,6 +3441,7 @@ public class EyesisCorrectionParameters { this.msUseSel= gd.getNextBoolean(); this.msDivideByArea= gd.getNextBoolean(); this.msScaleProj= gd.getNextNumber(); this.msFractUni= gd.getNextNumber(); this.dbg_migrate= gd.getNextBoolean(); Loading src/main/java/MeasuredLayers.java +37 −2 Original line number Diff line number Diff line Loading @@ -380,7 +380,7 @@ public class MeasuredLayers { * @param sel_in optional selection for this supertile (linescan, 4 * supetile size) * @param disp_far lowest acceptable disparity value. Double.NaN - do not check. * @param disp_near highest acceptable disparity value. Double.NaN - do not check. * @param null_if_none return null if there are no selected tiles in teh result selection * @param null_if_none return null if there are no selected tiles in the result selection * @return boolean array [4*superTileSize] of the selected tiles on the specified * measurement layer */ Loading Loading @@ -548,8 +548,9 @@ public class MeasuredLayers { * @param stX supertile horizontal position in the image * @param stY supertile vertical position in the image * @param sel_in optional selection for this supertile (linescan, 4 * supetile size) * @param null_if_none return null if there are no selected tiles in the result selection * @param strength_floor subtract from the correlation strength, limit by 0 * @param strength_pow Non-linear treatment of correlation strength. Raise data to the strength_pow power * @param null_if_none return null if there are no selected tiles in the result selection * @return double [2][4*superTileSize] {disparity[4*superTileSize], strength [4*superTileSize]} */ Loading Loading @@ -598,6 +599,40 @@ public class MeasuredLayers { return ds; } /** * Get disparity and correlation strength for the specific measurement layer. * Combined with input selection * @param num_layer number of the measurement layer to process * @param strength_floor subtract from the correlation strength, limit by 0 * @param strength_pow Non-linear treatment of correlation strength. Raise data to the strength_pow power * @return double {disparity[tilesX * tilesY], strength[tilesX * tilesY]} */ public double[][] getDisparityStrength ( int num_layer, double strength_floor, double strength_pow) { if (layers[num_layer] == null){ return null; } double [][] ds = {getDisparity(num_layer),getStrength(num_layer)}; for (int i = 0; i < ds[1].length; i++){ double w = ds[1][i] - strength_floor; if (w > 0) { if (strength_pow != 1.0) w = Math.pow(w, strength_pow); ds[1][i] = w; } else { ds[1][i] = 0.0; } } return ds; } /** * Get double-size (for overlapping) array of disparities and strengths for the supertile * Using best (producing lowest disparity variance) subset of neighbor tiles Loading src/main/java/SuperTiles.java +24 −0 Original line number Diff line number Diff line Loading @@ -5981,5 +5981,29 @@ public class SuperTiles{ return snap_sort; } public double [][][] getDisparityStrengths( int stMeasSel) // = 1; // Select measurements for supertiles : +1 - combo, +2 - quad +4 - hor +8 - vert) { int numMeasLayers = measuredLayers.getNumLayers(); double [][][] ds = new double[numMeasLayers][][]; for (int ml = 0; ml < numMeasLayers; ml++) if ((stMeasSel & ( 1 << ml)) != 0) { ds[ml] = measuredLayers.getDisparityStrength ( ml, // int num_layer, this.strength_floor, // double strength_floor, this.strength_pow); // double strength_pow) } return ds; } public boolean [][] getMeasurementSelections( int stMeasSel) // = 1; // Select measurements for supertiles : +1 - combo, +2 - quad +4 - hor +8 - vert) { int numMeasLayers = measuredLayers.getNumLayers(); boolean [][] sels = new boolean[numMeasLayers][]; for (int ml = 0; ml < numMeasLayers; ml++) if ((stMeasSel & ( 1 << ml)) != 0) { sels[ml] = measuredLayers.getSelection (ml); } return sels; } } // end of class SuperTiles src/main/java/TilePlanes.java +6 −3 Original line number Diff line number Diff line Loading @@ -1475,6 +1475,7 @@ public class TilePlanes { * @param use_sel use plane selection (this.sel_mask) to select only some part of the plane * @param divide_by_area divide weights by ellipsoid area * @param scale_projection use plane ellipsoid projection for weight: 0 - do not use, > 0 linearly scale ellipsoid * @param fraction_uni add fraction of the total weight to each tile * @return a pair of arrays {disparity, strength}, each [2 * superTileSize * 2 * superTileSize], only 1/2 or 1/4 used for offset tiles\ * TODO: add a combination of the ellipses and infinite planes? * Loading @@ -1485,6 +1486,7 @@ public class TilePlanes { boolean use_sel, boolean divide_by_area, double scale_projection, double fraction_uni, int debugLevel) { double [][] disp_strength = new double[2][4*superTileSize*superTileSize]; Loading Loading @@ -1555,8 +1557,6 @@ public class TilePlanes { int indx_i = iy * ss4 + ix; // input index disp_strength[0][indx] = zxy[0] - (normal[1] * x + normal[2] * y)/normal[0]; double w = weight; if (window != null) w *= window[indx_i]; if (use_sel && (sel_mask != null) && !(sel_mask[indx_i])) w = 0.0; if ((w > 0.0) && (scale_projection > 0.0)){ double [] xy = {x,y}; Matrix vxy = vect2d.times(new Matrix(xy,2)); // verify if it is correct Loading @@ -1565,7 +1565,10 @@ public class TilePlanes { double d = vxy.get(i,0); r2 += d * d / val2d.get(i, i); } w *= Math.exp(-k_gauss*r2); w *= ((1.0 - fraction_uni) * Math.exp(-k_gauss*r2) + fraction_uni); if (window != null) w *= window[indx_i]; if (use_sel && (sel_mask != null) && !(sel_mask[indx_i])) w = 0.0; } disp_strength[1][indx] = w; } Loading Loading
src/main/java/EyesisCorrectionParameters.java +6 −1 Original line number Diff line number Diff line Loading @@ -2212,7 +2212,8 @@ public class EyesisCorrectionParameters { public boolean msUseSel = true; // Use planes selection masks (generated when splitting to intersecting pairs public boolean msDivideByArea = true; // Divide plane strengths by ellipsoid area public double msScaleProj = 1.5; // Scale projection of the plane ellkipsoid public double msScaleProj = 1.5; // Scale projection of the plane ellipsoid public double msFractUni = 0.3; // Spread this fraction of the ellipsoid weight among extended (double) supertile public boolean replaceWeakOutlayers = true; // false; Loading Loading @@ -2516,6 +2517,7 @@ public class EyesisCorrectionParameters { properties.setProperty(prefix+"msUseSel", this.msUseSel+""); properties.setProperty(prefix+"msDivideByArea", this.msDivideByArea+""); properties.setProperty(prefix+"msScaleProj", this.msScaleProj +""); properties.setProperty(prefix+"msFractUni", this.msFractUni +""); properties.setProperty(prefix+"dbg_migrate", this.dbg_migrate+""); Loading Loading @@ -2812,6 +2814,7 @@ public class EyesisCorrectionParameters { if (properties.getProperty(prefix+"msUseSel")!=null) this.msUseSel=Boolean.parseBoolean(properties.getProperty(prefix+"msUseSel")); if (properties.getProperty(prefix+"msDivideByArea")!=null) this.msDivideByArea=Boolean.parseBoolean(properties.getProperty(prefix+"msDivideByArea")); if (properties.getProperty(prefix+"msScaleProj")!=null) this.msScaleProj=Double.parseDouble(properties.getProperty(prefix+"msScaleProj")); if (properties.getProperty(prefix+"msFractUni")!=null) this.msFractUni=Double.parseDouble(properties.getProperty(prefix+"msFractUni")); if (properties.getProperty(prefix+"dbg_migrate")!=null) this.dbg_migrate=Boolean.parseBoolean(properties.getProperty(prefix+"dbg_migrate")); Loading Loading @@ -3134,6 +3137,7 @@ public class EyesisCorrectionParameters { gd.addCheckbox ("Use planes selection masks (generated when splitting to intersecting pairs", this.msUseSel); gd.addCheckbox ("Divide plane strengths by ellipsoid area", this.msDivideByArea); gd.addNumericField("Scale projection of the plane ellipsoid", this.msScaleProj, 6); gd.addNumericField("Spread this fraction of the ellipsoid weight among extended (double) supertile",this.msFractUni, 6); gd.addCheckbox ("Test new mode after migration", this.dbg_migrate); Loading Loading @@ -3437,6 +3441,7 @@ public class EyesisCorrectionParameters { this.msUseSel= gd.getNextBoolean(); this.msDivideByArea= gd.getNextBoolean(); this.msScaleProj= gd.getNextNumber(); this.msFractUni= gd.getNextNumber(); this.dbg_migrate= gd.getNextBoolean(); Loading
src/main/java/MeasuredLayers.java +37 −2 Original line number Diff line number Diff line Loading @@ -380,7 +380,7 @@ public class MeasuredLayers { * @param sel_in optional selection for this supertile (linescan, 4 * supetile size) * @param disp_far lowest acceptable disparity value. Double.NaN - do not check. * @param disp_near highest acceptable disparity value. Double.NaN - do not check. * @param null_if_none return null if there are no selected tiles in teh result selection * @param null_if_none return null if there are no selected tiles in the result selection * @return boolean array [4*superTileSize] of the selected tiles on the specified * measurement layer */ Loading Loading @@ -548,8 +548,9 @@ public class MeasuredLayers { * @param stX supertile horizontal position in the image * @param stY supertile vertical position in the image * @param sel_in optional selection for this supertile (linescan, 4 * supetile size) * @param null_if_none return null if there are no selected tiles in the result selection * @param strength_floor subtract from the correlation strength, limit by 0 * @param strength_pow Non-linear treatment of correlation strength. Raise data to the strength_pow power * @param null_if_none return null if there are no selected tiles in the result selection * @return double [2][4*superTileSize] {disparity[4*superTileSize], strength [4*superTileSize]} */ Loading Loading @@ -598,6 +599,40 @@ public class MeasuredLayers { return ds; } /** * Get disparity and correlation strength for the specific measurement layer. * Combined with input selection * @param num_layer number of the measurement layer to process * @param strength_floor subtract from the correlation strength, limit by 0 * @param strength_pow Non-linear treatment of correlation strength. Raise data to the strength_pow power * @return double {disparity[tilesX * tilesY], strength[tilesX * tilesY]} */ public double[][] getDisparityStrength ( int num_layer, double strength_floor, double strength_pow) { if (layers[num_layer] == null){ return null; } double [][] ds = {getDisparity(num_layer),getStrength(num_layer)}; for (int i = 0; i < ds[1].length; i++){ double w = ds[1][i] - strength_floor; if (w > 0) { if (strength_pow != 1.0) w = Math.pow(w, strength_pow); ds[1][i] = w; } else { ds[1][i] = 0.0; } } return ds; } /** * Get double-size (for overlapping) array of disparities and strengths for the supertile * Using best (producing lowest disparity variance) subset of neighbor tiles Loading
src/main/java/SuperTiles.java +24 −0 Original line number Diff line number Diff line Loading @@ -5981,5 +5981,29 @@ public class SuperTiles{ return snap_sort; } public double [][][] getDisparityStrengths( int stMeasSel) // = 1; // Select measurements for supertiles : +1 - combo, +2 - quad +4 - hor +8 - vert) { int numMeasLayers = measuredLayers.getNumLayers(); double [][][] ds = new double[numMeasLayers][][]; for (int ml = 0; ml < numMeasLayers; ml++) if ((stMeasSel & ( 1 << ml)) != 0) { ds[ml] = measuredLayers.getDisparityStrength ( ml, // int num_layer, this.strength_floor, // double strength_floor, this.strength_pow); // double strength_pow) } return ds; } public boolean [][] getMeasurementSelections( int stMeasSel) // = 1; // Select measurements for supertiles : +1 - combo, +2 - quad +4 - hor +8 - vert) { int numMeasLayers = measuredLayers.getNumLayers(); boolean [][] sels = new boolean[numMeasLayers][]; for (int ml = 0; ml < numMeasLayers; ml++) if ((stMeasSel & ( 1 << ml)) != 0) { sels[ml] = measuredLayers.getSelection (ml); } return sels; } } // end of class SuperTiles
src/main/java/TilePlanes.java +6 −3 Original line number Diff line number Diff line Loading @@ -1475,6 +1475,7 @@ public class TilePlanes { * @param use_sel use plane selection (this.sel_mask) to select only some part of the plane * @param divide_by_area divide weights by ellipsoid area * @param scale_projection use plane ellipsoid projection for weight: 0 - do not use, > 0 linearly scale ellipsoid * @param fraction_uni add fraction of the total weight to each tile * @return a pair of arrays {disparity, strength}, each [2 * superTileSize * 2 * superTileSize], only 1/2 or 1/4 used for offset tiles\ * TODO: add a combination of the ellipses and infinite planes? * Loading @@ -1485,6 +1486,7 @@ public class TilePlanes { boolean use_sel, boolean divide_by_area, double scale_projection, double fraction_uni, int debugLevel) { double [][] disp_strength = new double[2][4*superTileSize*superTileSize]; Loading Loading @@ -1555,8 +1557,6 @@ public class TilePlanes { int indx_i = iy * ss4 + ix; // input index disp_strength[0][indx] = zxy[0] - (normal[1] * x + normal[2] * y)/normal[0]; double w = weight; if (window != null) w *= window[indx_i]; if (use_sel && (sel_mask != null) && !(sel_mask[indx_i])) w = 0.0; if ((w > 0.0) && (scale_projection > 0.0)){ double [] xy = {x,y}; Matrix vxy = vect2d.times(new Matrix(xy,2)); // verify if it is correct Loading @@ -1565,7 +1565,10 @@ public class TilePlanes { double d = vxy.get(i,0); r2 += d * d / val2d.get(i, i); } w *= Math.exp(-k_gauss*r2); w *= ((1.0 - fraction_uni) * Math.exp(-k_gauss*r2) + fraction_uni); if (window != null) w *= window[indx_i]; if (use_sel && (sel_mask != null) && !(sel_mask[indx_i])) w = 0.0; } disp_strength[1][indx] = w; } Loading