Commit b66e802e authored by Andrey Filippov's avatar Andrey Filippov

Started LMA S/N measurements to compare contrast enhancement

parent 4b32667d
......@@ -112,7 +112,121 @@ public class ThermalColor {
0xfff8c4, 0xfff9c7, 0xfff9ca, 0xfff9cd, 0xfffad1, 0xfffad4, 0xfffbd8, 0xfffcdb,
0xfffcdf, 0xfffde2, 0xfffde5, 0xfffde8, 0xfffeeb, 0xfffeee, 0xfffef1, 0xfffef4,
0xffffff};
int [][] palettes = {white_hot_palette, black_hot_palette, iron_palette};
int [] pal01_palette = {0x1f77b4,0xff7f0e,
0x2ca02c,
0xd62728,
0x9467bd,
0x8c564b,
0xe377c2,
0x7f7f7f,
0xbcbd22,
0x17becf};
int [] viridis_palette = {
0x46317e,
0x365b8c,
0x277e8e,
0x1fa187,
0x49c16d,
0x9fd938};
int [] viridis_mod_palette = {
0x401080,
0x46317e,
0x365b8c,
0x277e8e,
0x1fa187,
0x49c16d,
0x9fd938,
0xcc9000,
0xff6000
};
int [] coolwarm_palette = {
0x6788ed ,
0x99bafe ,
0xc8d7ef ,
0xedd0c1 ,
0xf6a789 ,
0xe16852};
int [] cubehelix_palette = {
0x1a2341 ,
0x1b6144 ,
0x687a30 ,
0xc77a7c ,
0xcda2e0 ,
0xc6e1f1};
int [] hsv_palette = {
0xffd400 ,
0x4eff00 ,
0xff85 ,
0x9dff ,
0x3600ff ,
0xff00ec};
int [] hsv2_palette = {
0xffd400 ,
0x4eff00 ,
0xff85 ,
0x9dff ,
0x3600ff ,
0xff00ec,
0xffd400 ,
0x4eff00 ,
0xff85 ,
0x9dff ,
0x3600ff ,
0xff00ec};
int [] hsv3_palette = {
0xffd400 ,
0x4eff00 ,
0xff85 ,
0x9dff ,
0x3600ff ,
0xff00ec,
0xffd400 ,
0x4eff00 ,
0xff85 ,
0x9dff ,
0x3600ff ,
0xff00ec ,
0xffd400 ,
0x4eff00 ,
0xff85 ,
0x9dff ,
0x3600ff ,
0xff00ec};
int [] spectral_palette = {
0xe1514a ,
0xfba55c ,
0xfee899 ,
0xecf7a2 ,
0xa1d9a4 ,
0x479fb3};
int [] spectral_r_palette = {
0x479fb3 ,
0xa1d9a4 ,
0xecf7a2 ,
0xfee899 ,
0xfba55c ,
0xe1514a};
int [][] palettes = {
white_hot_palette,
black_hot_palette,
iron_palette,
pal01_palette,
viridis_palette,
coolwarm_palette,
cubehelix_palette,
hsv_palette,
hsv2_palette,
hsv3_palette,
viridis_mod_palette,
spectral_palette,
spectral_r_palette
};
if (indx <0) indx = 0;
else if (indx >= palettes.length) indx = palettes.length - 1;
return palettes[indx];
......
......@@ -7374,36 +7374,57 @@ private Panel panel1,
IJ.showMessage("Error","No images selected");
return false;
}
double disparity0 = 0.75;
double disparity_max = 75.0; // pix
String sky_mask = "/home/elphel/lwir16-proc/results-cuda/ERS-debug1/models3/1626032208_613623/v01/1626032208_613623-sky_mask.tiff";
double disp_inf = -0.2; // -1.0; // 0.0;
double disparity0 = 0.75; // 2; // 0.75;
double disparity_max = 23; // 75.0; // pix
boolean show_dialog2 = false;
boolean linear_disparity = false;
int palette = 4;
int legend_width = 0;
int legend_gap = 5;
int legend_width = 2; // 0;
int legend_gap = 2; // 5;
GenericJTabbedDialog gd0 = new GenericJTabbedDialog("Ln mode");
gd0.addNumericField("disparity0", disparity0, 5,8,"pix", "Disparity to swict from linear to log. ) - skip log mode");
gd0.addStringField ("File path of the sky mask", sky_mask, 80,"optional file with 0.0 - keep, >0.0 - replace with NaN");
gd0.addNumericField("Disparity at infinity", disp_inf, 5,8,"pix", "Disparity at infinity ");
gd0.addNumericField("disparity0", disparity0, 5,8,"pix", "Disparity to switch from linear to log. ) - skip log mode");
gd0.addNumericField("Maximal disparity", disparity_max, 5,8,"pix", "Fixed maximal disparity (0 - auto");
gd0.addCheckbox("Linear disparity legend", linear_disparity);
gd0.addNumericField("Legend width", legend_width, 0,3,"", "Optional disparity legend vertical bar width");
gd0.addNumericField("Legend gap", legend_gap, 0,3,"", "Optional disparity legend vertical bar gap");
gd0.addNumericField("palette", palette, 0,3,"", "Palette index");
gd0.addCheckbox("Show second dialog", show_dialog2);
gd0.showDialog();
if (gd0.wasCanceled()) return false;
sky_mask = gd0.getNextString();
disp_inf = gd0.getNextNumber();
disparity0= gd0.getNextNumber();
disparity_max= gd0.getNextNumber();
linear_disparity = gd0.getNextBoolean();
legend_width= (int) gd0.getNextNumber();
legend_gap= (int) gd0.getNextNumber();
palette= (int) gd0.getNextNumber();
show_dialog2 = gd0.getNextBoolean();
boolean log_mode = disparity0 > 0.0;
boolean log_mode = disparity0 > 0.00;
float [] fsky_mask = null;
if (sky_mask.length() > 0) {
ImagePlus imp_sky_mask = new ImagePlus(sky_mask);
fsky_mask = (float[]) imp_sky_mask.getProcessor().getPixels();
}
// float [] pixels=(float []) imp_srcs[srcChannel].getProcessor().getPixels();
int current_slice = imp_sel.getCurrentSlice();
ImageStack imageStack = imp_sel.getStack();
float [] fpixels = (float[]) imageStack.getPixels(current_slice);
float [] fpixels0 = (float[]) imageStack.getPixels(current_slice);
float [] fpixels = fpixels0.clone();
for (int i = 0; i <fpixels.length; i++) {
fpixels[i] -= (float) disp_inf;
if ((fsky_mask != null) && (fsky_mask[i] > 0.0f)) {
fpixels[i] = Float.NaN;
}
}
int width = imp_sel.getWidth();
int height = imp_sel.getHeight();
String title = imp_sel.getShortTitle(); // getTitle();
......@@ -7441,11 +7462,10 @@ private Panel panel1,
}
}
}
double mn = fpixels[0];
double mn = dpixels[0];
double mx = mn;
double pwr = 1.0;
int palette = 2;
for (int i = 0; i < fpixels.length; i++) {
for (int i = 0; i < dpixels.length; i++) {
double d = dpixels[i];
if (log_mode) {
if (!Double.isNaN(d)) {
......@@ -7458,7 +7478,8 @@ private Panel panel1,
}
}
}
if (!Double.isNaN(d)) {
int px = i % width;
if ((px < width0) && !Double.isNaN(d)) { // do not use legend
if (!(d <= mx)) mx = d;
if (!(d >= mn)) mn = d;
}
......@@ -7483,13 +7504,11 @@ private Panel panel1,
gd.addNumericField("min", mn, 5,8,"", "Minimal value to map");
gd.addNumericField("max", mx, 5,8,"", "Maximal value to map");
gd.addNumericField("pwr", pwr, 5,8,"", "Exponent power");
gd.addNumericField("palette", palette, 0,3,"", "Palette index");
gd.showDialog();
if (gd.wasCanceled()) return false;
mn= gd.getNextNumber();
mx= gd.getNextNumber();
pwr= gd.getNextNumber();
palette= (int)gd.getNextNumber();
}
if (pwr != 1.0) {
if (mn < 0) {
......@@ -7516,7 +7535,9 @@ private Panel panel1,
}
}
System.out.println("mn="+mn+", mx="+mx);
// (new ShowDoubleFloatArrays()) .showArrays(dpixels, width, height, "test_depth_mn="+mn+"_mx="+mx);
double [][] pseudo_pixels = new double [3] [dpixels.length];
ThermalColor tc = new ThermalColor(
palette, // public int lwir_palette = 0; // 0 - white - hot, 1 - black - hot, 2+ - colored
......
......@@ -209,6 +209,12 @@ public class Correlation2d {
private static int SUB_SAMPLE = 16; // subsample source pixel in each direction when generating
public static int THREADS_MAX = 100;
public int getPairLength(int pair) {
return pair_length[pair];
}
public int [] getPairLengths() {
return pair_length;
}
// All used pairs (but the diameters) are clockwise (end is clockwise of start)
// Orientation calculations are valid for clockwise only
......@@ -429,7 +435,7 @@ public class Correlation2d {
* Add 2D correlation for a pair to the combined correlation tile, applying rotation/scaling
* @param accum_tile tile for accumulation in line-scan order, same dimension as during generateResample()
* @param corr_tile correlation tile (currently 15x15)
* @param num_pair number of correlation pair for which resamplind data exists
* @param num_pair number of correlation pair for which resampling data exists
* @param weight multiply added tile data by this coefficient before accumulation
*/
public void accummulatePair(
......@@ -472,6 +478,26 @@ public class Correlation2d {
return sumw;
}
public double accummulatePairs(
double [] accum_tile,
double [][] corr_tiles,
double [] weights) {
double sumw = 0.0;
for (int num_pair = 0; num_pair < weights.length; num_pair++) {
if ((weights[num_pair]>0.0) && (corr_tiles[num_pair] != null)) {
accummulatePair(
accum_tile,
corr_tiles[num_pair],
num_pair,
weights[num_pair]);
sumw+=weights[num_pair];
}
}
return sumw;
}
public void normalizeAccumulatedPairs(
double [] accum_tile,
double sumw) {
......@@ -483,6 +509,36 @@ public class Correlation2d {
}
}
/**
* Calculate correlation pair width in the disparity direction to boost weights of the most
* informative (for disparity) pairs
* @param corr_tile for selected pair
* @param num_pair selected pair number
* @return pair width (in pixels) in the disparity direction after applying rotation and scaling
*/
public double getPairWidth(
double [] corr_tile,
int num_pair){ // Center line only
if ((resample_indices == null) || (resample_indices[num_pair] == null)) {
throw new IllegalArgumentException ("getPairWidth(): No resample data for num_pair = "+num_pair);
}
double s0 = 0.0, s1 = 0.0, s2 = 0.0;
int indx = mcorr_comb_width * (mcorr_comb_offset + ((mcorr_comb_height - 1) / 2));
for (int ix = 0; ix < mcorr_comb_width; ix ++ ) if (resample_indices[num_pair][indx] != null){
for (int j = 0; j < resample_indices[num_pair][indx].length; j++) {
double d = corr_tile[resample_indices[num_pair][indx][j]] * resample_weights[num_pair][indx][j];
if (d < 0) {
d = 0.0; // was get5ting negative (s0*s2- s1*s1) !
}
s0 += d;
s1 += d * ix;
s2 += d * ix * ix;
}
indx++;
}
return Math.sqrt(s0*s2- s1*s1)/s0;
}
public double [] accumulateInit() {return new double [mcorr_comb_width * mcorr_comb_height]; }
public int getCombWidth() {return mcorr_comb_width;}
......
......@@ -917,7 +917,7 @@ public class ErsCorrection extends GeometryCorrection {
* @param camera_xyz camera lens position during centerline acquisition in world coordinates, null - use instance global
* @param camera_atr camera orientation during centerline acquisition in world frame, null - use instance global
* @param line_err iterate until the line (pY) correction is below this value
* @return {px, py, disparity } (right, down) or null if behind the camera
* @return {px, py, disparity } (right, down) or null if behind the camera of the other camera
*/
public double [] getImageCoordinatesERS(
......@@ -1064,7 +1064,8 @@ public class ErsCorrection extends GeometryCorrection {
* @param line_err iterate until the line (pY) correction is below this value
* @return {px, py, disparity } (right, down)
*/
public double [] getImageCoordinatesERS( // USED in lwir
@Deprecated
public double [] getImageCoordinatesERS( // not used?
double [] xyzw,
boolean correctDistortions, // correct distortion (will need corrected background too !)
double line_err) // threshold error in scan lines (1.0)
......
......@@ -16193,7 +16193,11 @@ public class ImageDttCPU {
}
}
}
boolean debugTile0 =(tileX == debug_tileX) && (tileY == debug_tileY) && (globalDebugLevel > -3);
boolean debugTile0 =(tileX == debug_tileX) && (tileY == debug_tileY) && (globalDebugLevel > -6);
if (debugTile0) {
System.out.println("clt_process_tl_correlations(): tileX="+tileX+", tileY="+tileY);
}
// TODO: move port coordinates out of color channel loop
// double [][] centersXY = tp_tasks[iTile].getDoubleXY(); // isAux());
double [][] disp_dist = tp_tasks[iTile].getDoubleDispDist();
......@@ -16225,11 +16229,55 @@ public class ImageDttCPU {
double [] disp_str = {0.0, 0.0}; // diaprity = 0 will be initial approximation for LMA if no averaging
if (combine_corrs) {
double [] corr_combo_tile = correlation2d.accumulateInit(); // combine all available pairs
double sumw = correlation2d.accummulatePairs(
corr_combo_tile, // double [] accum_tile,
corrs, // double [][] corr_tiles, may be longer than selection, extra will be ignored
correlation2d.selectAll(), // boolean [] selection,
1.0); // double weight);
double sumw = 0.0;
if (imgdtt_params.mcorr_static_weights || imgdtt_params.mcorr_dynamic_weights) {
double [] weights = new double [correlation2d.getNumPairs()];
if (imgdtt_params.mcorr_static_weights) {
int [] pair_lengths = correlation2d.getPairLengths();
for (int npair = 0; npair< weights.length; npair++) if (corrs[npair] != null) {
weights[npair] = imgdtt_params.mcorr_weights[pair_lengths[npair] - 1];
}
} else {
for (int npair = 0; npair< weights.length; npair++) if (corrs[npair] != null) {
weights[npair] = 1.0;
}
// Arrays.fill(weights, 1.0);
}
if (imgdtt_params.mcorr_dynamic_weights) {
for (int npair = 0; npair< weights.length; npair++) if (corrs[npair] != null) {
double pair_width = correlation2d. getPairWidth(
corrs[npair] , //double [] corr_tile,
npair); // int num_pair)
if (pair_width < 0.1) {
System.out.println("pair_width["+npair+"]="+pair_width);
} else {
weights[npair] /= Math.pow(pair_width, imgdtt_params.mcorr_weights_power);
}
}
}
if (debugTile0) {
System.out.println("clt_process_tl_correlations(): per-pair weights:");
for (int npair = 0; npair< weights.length; npair++) if (weights[npair] > 0.0) {
int [] pair = correlation2d.getPair(npair);
int pair_length = correlation2d.getPairLength(npair);
System.out.println(String.format("%3d: %2d -> %2d [%2d]: %8.5f",npair,pair[0],pair[1],pair_length,weights[npair]));
}
}
sumw = correlation2d.accummulatePairs(
corr_combo_tile, // double [] accum_tile,
corrs, // double [][] corr_tiles, may be longer than selection, extra will be ignored
weights); // double [] weights);
} else { // old way, same weight for all pairs
sumw = correlation2d.accummulatePairs(
corr_combo_tile, // double [] accum_tile,
corrs, // double [][] corr_tiles, may be longer than selection, extra will be ignored
correlation2d.selectAll(), // boolean [] selection,
1.0); // double weight);
}
correlation2d.normalizeAccumulatedPairs(
corr_combo_tile,
sumw);
......
......@@ -116,9 +116,10 @@ public class ImageDttParameters {
public boolean mcorr_cons_hor = true; // consolidate all horizontal pairs
public boolean mcorr_cons_vert = true; // consolidate all vertical pairs
public double [] mcorr_weights = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 16.0}; // static weights of pairs of length 1...8
// public double [] mcorr_weights = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 16.0}; // static weights of pairs of length 1...8
public double [] mcorr_weights = {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 2.0}; // static weights of pairs of length 1...8
public boolean mcorr_static_weights = true; // when mixing , apply static weights to pairs depending on their lengths
public double mcorr_weights_power = 1.0; // divide pair by horizontal (disparity) width after rotation/scaling (skip negative when measuring width)
public double mcorr_weights_power = 2.0; // divide pair by horizontal (disparity) width after rotation/scaling (skip negative when measuring width)
public boolean mcorr_dynamic_weights = true; // Apply weights to pairs dependent on the width in disparity direction
/// these are just for testing, actual will be generated specifically for different applications (LY will use closest pairs)
......
package com.elphel.imagej.tileprocessor;
import java.util.Arrays;
/**
**
** InterIntraLMA - Comparing contrast for different interscene and intrascene
** connfifurations
**
** Copyright (C) 2021 Elphel, Inc.
**
** -----------------------------------------------------------------------------**
**
** InterIntraLMA.java is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program. If not, see <http://www.gnu.org/licenses/>.
** -----------------------------------------------------------------------------**
**
*/
public class InterIntraLMA {
/**
* Estimate noise threshold for each combination of inter/intra and number of
* sensors.
* @param noise_file synthetic noise level per file (either rnd or fpn)
* @param senosor_mode_file sensor mode (0 - 16, 1 - 8, 2 - 4, 3 - 2 sensors) per file
* @param inter_file true - interscene , false - intrascene only
* @param good_file_tile true if tile of this file is considered "good"
* @param min_modes minimal number of modes the tile should be defined for (undefine if less than)
* @return per tile per mode average between highest noise of the good tile and lowest noise
* of the bad tile. Double.NaN if noise threshold can not be determined. null if the tile is
* undefined for all modes
*/
public static double [][] getNoiseThreshold(
double [] noise_file, // = new double [noise_files.length];
int [] sensor_mode_file,
boolean [] inter_file,
boolean [][] good_file_tile,
int min_modes)
{
int num_sensor_modes = 0;
int num_tiles = good_file_tile[0].length;
for (int i = 0; i < sensor_mode_file.length; i++) {
if (sensor_mode_file[i] > num_sensor_modes) {
num_sensor_modes = sensor_mode_file[i];
}
}
num_sensor_modes ++;
int num_modes = 2 * num_sensor_modes;
double [][] rslt = new double [num_tiles][]; // number of tiles
double [][][] noise_interval = new double[num_modes][num_tiles][2]; // [modes][tiles]
for (int i = 0; i < num_modes; i++) {
for (int j= 0; j < num_tiles; j++) {
noise_interval[i][j][0] =Double.NaN;
noise_interval[i][j][1] =Double.NaN;
}
}
for (int nf = 0; nf < noise_file.length; nf++) {
double noise = noise_file[nf];
int mode = sensor_mode_file[nf] + (inter_file[nf] ? 0: num_sensor_modes);
for (int ntile = 0; ntile < num_tiles; ntile++) {
if (good_file_tile[nf][ntile]) { // good tile
if (!(noise <= noise_interval[mode][ntile][0])){ // including Double.isNaN(noise_interval[mode][ntile][0]
noise_interval[mode][ntile][0] = noise;
}
} else { // bad tile
if (!(noise >= noise_interval[mode][ntile][1])){ // including Double.isNaN(noise_interval[mode][ntile][1]
noise_interval[mode][ntile][1] = noise;
}
}
}
}
for (int ntile = 0; ntile < num_tiles; ntile++){
int num_defined = 0;
for (int mode = 0; mode < num_modes; mode++) {
if (!Double.isNaN(noise_interval[mode][ntile][0]) && !Double.isNaN(noise_interval[mode][ntile][0])) {
num_defined++;
}
}
if (num_defined >= min_modes) {
rslt[ntile] = new double [num_modes];
for (int mode = 0; mode < num_modes; mode++) {
if (!Double.isNaN(noise_interval[mode][ntile][0]) && !Double.isNaN(noise_interval[mode][ntile][0])) {
rslt[ntile][mode] = 0.5 * (noise_interval[mode][ntile][0] + noise_interval[mode][ntile][1]);
} else {
rslt[ntile][mode] = Double.NaN;
}
}
}
}
return rslt;
}
}
......@@ -23,6 +23,7 @@
*/
package com.elphel.imagej.tileprocessor;
import java.awt.Color;
import java.awt.Rectangle;
import java.util.ArrayList;
import java.util.Arrays;
......@@ -40,6 +41,10 @@ import com.elphel.imagej.gpu.GpuQuad;
import com.elphel.imagej.gpu.TpTask;
import ij.IJ;
import ij.ImagePlus;
import ij.ImageStack;
import ij.gui.Line;
import ij.process.ImageProcessor;
public class OpticalFlow {
public static double [] ZERO3 = {0.0,0.0,0.0};
......@@ -2775,8 +2780,8 @@ public class OpticalFlow {
return dsrbg_out;
}
public double [][] transformCameraVewSingle(
@Deprecated
public double [][] transformCameraVewSingle( // not used
double [] scene_xyz, // camera center in world coordinates
double [] scene_atr, // camera orientation relative to world frame
QuadCLT scene_QuadClt,
......@@ -3604,6 +3609,163 @@ public class OpticalFlow {
}
public ImagePlus generateSceneOutlines(
QuadCLT ref_scene, // ordered by increasing timestamps
QuadCLT [] scenes,
int extra, // add around largest outline
int scale,
int line_width_outline,
int line_width_corners,
Color line_color_outline,
Color line_color_corners
) {
int step_outline = 5;
int tilesX = ref_scene.getTileProcessor().getTilesX();
int tilesY = ref_scene.getTileProcessor().getTilesY();
int transform_size = ref_scene.getTileProcessor().getTileSize();
ErsCorrection ers_reference = ref_scene.getErsCorrection();
double [][] corners = {//new double [4][3]; // for each corner {px, py, d}
{0.00, 0.0, 0.0},
{tilesX * transform_size - 1, 0.0, 0.0},
{tilesX * transform_size - 1, tilesY * transform_size - 1, 0.0},
{0.0, tilesY * transform_size - 1, 0.0},
};
double [][][] outlines = new double [scenes.length][corners.length][];
double minx = tilesX * transform_size, maxx = 0.0, miny = tilesY * transform_size, maxy = 0.0; //
for (int nscene = 0; nscene < scenes.length; nscene++ ) {
String ts = scenes[nscene].getImageName();
for (int ncorn = 0; ncorn < corners.length; ncorn++) {
double [] ref_xyz = ers_reference.getSceneXYZ(ts);
double [] ref_atr = ers_reference.getSceneATR(ts);
double [] pXpYD = scenes[nscene].getErsCorrection().getImageCoordinatesERS(
ref_scene, // QuadCLT cameraQuadCLT, // camera station that got image to be to be matched
corners[ncorn][0], // double px, // pixel coordinate X in the reference view
corners[ncorn][1], // double py, // pixel coordinate Y in the reference view
corners[ncorn][2], // double disparity, // this reference disparity
true, // boolean distortedView, // This camera view is distorted (diff.rect), false - rectilinear
ref_xyz, // double [] reference_xyz, // this view position in world coordinates (typically zero3)
ref_atr, // double [] reference_atr, // this view orientation relative to world frame (typically zero3)
true, // boolean distortedCamera, // camera view is distorted (false - rectilinear)
new double [3], // double [] camera_xyz, // camera center in world coordinates
new double [3], // double [] camera_atr, // camera orientation relative to world frame
1.0); // double line_err) // threshold error in scan lines (1.0)
outlines[nscene][ncorn] = pXpYD;
if (minx > pXpYD[0]) minx = pXpYD[0];
if (miny > pXpYD[1]) miny = pXpYD[1];
if (maxx < pXpYD[0]) maxx = pXpYD[0];
if (maxy < pXpYD[1]) maxy = pXpYD[1];
System.out.println(String.format("%3d:%1d: px= %8.2f py= %8.2f disparity= %8.5f",nscene, ncorn, pXpYD[0], pXpYD[1], pXpYD[2]));
}
System.out.println();
}
int ix0 = (int) Math.floor(minx) - extra; // original pixels, subtract from data
int width = scale * (((int) Math.ceil (maxx) - ix0 ) + extra); // scaled
int iy0 = (int) Math.floor(miny) - extra;
int height = scale * (((int) Math.ceil (maxy) - iy0 ) + extra);
ImageStack stack = new ImageStack(width, height);
int [] blank = new int [width*height];
for (int nscene = 0; nscene < (scenes.length + 2); nscene++ ) {
String slice_title = "";
if (nscene < scenes.length) {
slice_title = scenes[nscene].getImageName();
} else if (nscene == scenes.length) {
slice_title = "corners";
} else {
slice_title = "all";
}
stack.addSlice(slice_title, blank.clone());
}
// Draw outline on each individual slice
for (int nscene = 0; nscene < scenes.length; nscene++ ) {
ImageProcessor ip = stack.getProcessor(nscene+1);
ip.setLineWidth(line_width_outline);
ip.setColor (line_color_outline); // does not work?
for (int icorn = 0; icorn < outlines[nscene].length; icorn++) {
int icorn_next = icorn+1;
if (icorn_next >= outlines[nscene].length) {
icorn_next = 0;
}
double [][] se = {
{scale * (outlines[nscene][icorn][0]-ix0), scale * (outlines[nscene][icorn][1]-iy0)},
{scale * (outlines[nscene][icorn_next][0]-ix0),scale * (outlines[nscene][icorn_next][1]-iy0)}};
for (int dy = -line_width_outline+1; dy < line_width_outline; dy+=2) {
for (int dx = -line_width_outline+1; dx < line_width_outline; dx+=2) {
Line line = new Line(se[0][0] + 0.5*dx, se[0][1] + 0.5*dy, se[1][0] + 0.5*dx, se[1][1] + 0.5*dy);
line.drawPixels(ip);
}
}
}
}
int indx_corners = scenes.length;
int indx_all = indx_corners+1;
// Trace corners
{
ImageProcessor ip = stack.getProcessor(indx_corners+1);
ip.setLineWidth(line_width_corners);
ip.setColor (line_color_corners); // does not work?
for (int icorn = 0; icorn < outlines[0].length; icorn++) {
for (int nscene = 0; nscene < (scenes.length - 1); nscene++ ) {
double [][] se = {
{scale * (outlines[nscene][icorn][0]-ix0), scale * (outlines[nscene][icorn][1]-iy0)},
{scale * (outlines[nscene + 1][icorn][0]-ix0),scale * (outlines[nscene+1][icorn][1]-iy0)}};
for (int dy = -line_width_corners+1; dy < line_width_corners; dy+=2) {
for (int dx = -line_width_corners+1; dx < line_width_corners; dx+=2) {
Line line = new Line(se[0][0] + 0.5*dx, se[0][1] + 0.5*dy, se[1][0] + 0.5*dx, se[1][1] + 0.5*dy);
line.drawPixels(ip);
}
}
}
}
}
// Combine all in last slice
{
// outlines
ImageProcessor ip = stack.getProcessor(indx_all+1);
ip.setLineWidth(line_width_outline);
ip.setColor (line_color_outline); // does not work?
for (int nscene = 0; nscene < scenes.length; nscene++ ) if (((scenes.length - nscene -1) % step_outline) == 0){
for (int icorn = 0; icorn < outlines[nscene].length; icorn++) {
int icorn_next = icorn+1;
if (icorn_next >= outlines[nscene].length) {
icorn_next = 0;
}
double [][] se = {
{scale * (outlines[nscene][icorn][0]-ix0), scale * (outlines[nscene][icorn][1]-iy0)},
{scale * (outlines[nscene][icorn_next][0]-ix0),scale * (outlines[nscene][icorn_next][1]-iy0)}};
for (int dy = -line_width_outline+1; dy < line_width_outline; dy+=2) {
for (int dx = -line_width_outline+1; dx < line_width_outline; dx+=2) {
Line line = new Line(se[0][0] + 0.5*dx, se[0][1] + 0.5*dy, se[1][0] + 0.5*dx, se[1][1] + 0.5*dy);
line.drawPixels(ip);
}
}
}
}
// corners
ip.setLineWidth(line_width_corners);
ip.setColor (line_color_corners); // does not work?
for (int icorn = 0; icorn < outlines[0].length; icorn++) {
for (int nscene = 0; nscene < (scenes.length - 1); nscene++ ) {
double [][] se = {
{scale * (outlines[nscene][icorn][0]-ix0), scale * (outlines[nscene][icorn][1]-iy0)},
{scale * (outlines[nscene + 1][icorn][0]-ix0),scale * (outlines[nscene+1][icorn][1]-iy0)}};
for (int dy = -line_width_corners+1; dy < line_width_corners; dy+=2) {
for (int dx = -line_width_corners+1; dx < line_width_corners; dx+=2) {
Line line = new Line(se[0][0] + 0.5*dx, se[0][1] + 0.5*dy, se[1][0] + 0.5*dx, se[1][1] + 0.5*dy);
line.drawPixels(ip);
}
}
}
}
}
ImagePlus imp_stack = new ImagePlus("scene_outlines", stack);
imp_stack.getProcessor().resetMinAndMax();
imp_stack.show();
return imp_stack;
}
public void intersceneNoise(
CLTParameters clt_parameters,
......@@ -3676,10 +3838,35 @@ public class OpticalFlow {
null); // int [] wh);
}
// final double [][] combo_dsn_change = new double [combo_dsn.length+1][];
final int margin = 8;
final int tilesX = ref_scene.getTileProcessor().getTilesX();
final int tilesY = ref_scene.getTileProcessor().getTilesY();
if (debug_level > -1) {
int extra = 10; // pixels around largest outline
int scale = 4;
int line_width_outline = 1;
int line_width_corners = 3;
Color line_color_outline = new Color(0, 255, 0); // green
Color line_color_corners = new Color(0, 255, 255); // cyan
// generating scene outlines for results documentation
ImagePlus imp_outlines = generateSceneOutlines(
ref_scene, // QuadCLT ref_scene, // ordered by increasing timestamps
scenes, // QuadCLT [] scenes
extra, // int extra // add around largest outline
scale, // int scale,
line_width_outline, // int line_width_outline,
line_width_corners, // int line_width_corners,
line_color_outline, // Color line_color_outline,
line_color_corners // Color line_color_corners
);
imp_outlines.show();
}
final double [][] combo_dsn_change = new double [combo_dsn_titles.length] [tilesX*tilesY];
for (int i = 0; i < combo_dsn.length; i++) { // 4 elements: "disp", "strength","disp_lma","num_valid"
if (combo_dsn[i] != null) combo_dsn_change[i] = combo_dsn[i]; // all but change
......@@ -3930,7 +4117,7 @@ public class OpticalFlow {
tolerance_scene_absolute, // final double tolerance_scene_absolute, // of 4 bi-linear interpolation corners
tolerance_scene_relative); // final double tolerance_scene_relative) // of 4 bi-linear interpolation corners
}
if (debug_level > -1) {
if (debug_level > -1) { // **** Used to create images for report !
String [] dbg_titles = new String [2*num_scenes];
double [][] dbg_img = new double [2*num_scenes][];
for (int i = 0; i < num_scenes; i++) {
......@@ -4064,9 +4251,9 @@ public double[][] correlateIntersceneDebug( // only uses GPU and quad
final double disparity_corr = debug_disparity_bias; // 0.0; // (z_correction == 0) ? 0.0 : geometryCorrection.getDisparityFromZ(1.0/z_correction);
for (int nscene = 0; nscene < num_scenes; nscene++) {
if (nscene == indx_ref) {
System.out.println("\nCorrelating reference scene, nrefine = "+nrefine+"\n");
System.out.println("Correlating reference scene, nrefine = "+nrefine);
} else {
System.out.println("\nCorrelating scene "+nrefine+":"+nscene+"\n");
System.out.println("Correlating scene "+nrefine+":"+nscene);
}
String ts = scenes[nscene].getImageName();
double [][] scene_pXpYD;
......@@ -4998,9 +5185,9 @@ public double[][] correlateIntersceneDebug( // only uses GPU and quad
TpTask[] tp_tasks_ref = null;
for (int nscene = 0; nscene < num_scenes; nscene++) {
if (nscene == indx_ref) {
System.out.println("\nCorrelating reference scene, nrefine = "+nrefine+"\n");
System.out.println("Correlating reference scene, nrefine = "+nrefine);
} else {
System.out.println("\nCorrelating scene "+nrefine+":"+nscene+"\n");
System.out.println("Correlating scene "+nrefine+":"+nscene);
}
String ts = scenes[nscene].getImageName();
double [][] scene_pXpYD;
......@@ -5583,9 +5770,9 @@ public double[][] correlateIntersceneDebug( // only uses GPU and quad
TpTask[] tp_tasks_ref = null;
for (int nscene = 0; nscene < num_scenes; nscene++) {
if (nscene == indx_ref) {
System.out.println("\nCorrelating reference scene, nrefine = "+nrefine+"\n");
System.out.println("Correlating reference scene, nrefine = "+nrefine);
} else {
System.out.println("\nCorrelating scene "+nrefine+":"+nscene+"\n");
System.out.println("Correlating scene "+nrefine+":"+nscene);
}
String ts = scenes[nscene].getImageName();
double [][] scene_pXpYD;
......@@ -5750,7 +5937,7 @@ public double[][] correlateIntersceneDebug( // only uses GPU and quad
clt_parameters.tileX, // final int debug_tileX,
clt_parameters.tileY, // final int debug_tileY,
threadsMax, // final int threadsMax, // maximal number of threads to launch
debug_level -1 ); // final int globalDebugLevel)
debug_level + 2); // -1 ); // final int globalDebugLevel)
image_dtt.convertFcltCorr(
dcorr_tiles, // double [][][] dcorr_tiles,// [tile][sparse, correlation pair][(2*transform_size-1)*(2*transform_size-1)] // if null - will not calculate
fclt_corr); // float [][][] fclt_corr) // new float [tilesX * tilesY][][] or null
......@@ -5829,7 +6016,7 @@ public double[][] correlateIntersceneDebug( // only uses GPU and quad
clt_parameters.tileX, // final int debug_tileX,
clt_parameters.tileY, // final int debug_tileY,
threadsMax,
debug_level -1 );
debug_level + (show_reference_correlations? 2 : -1) );
} else {
double [][][][] dcorr_td = new double[tp_tasks_ref.length][][][]; // [tile][pair][4][64] sparse transform domain representation of corr pairs
......@@ -5879,8 +6066,7 @@ public double[][] correlateIntersceneDebug( // only uses GPU and quad
clt_parameters.tileX, // final int debug_tileX,
clt_parameters.tileY, // final int debug_tileY,
threadsMax, // final int threadsMax, // maximal number of threads to launch
debug_level -1 ); // final int globalDebugLevel)
debug_level + (show_reference_correlations? 2 : -1)); // final int globalDebugLevel)
image_dtt.convertFcltCorr(
dcorr_tiles, // double [][][] dcorr_tiles,// [tile][sparse, correlation pair][(2*transform_size-1)*(2*transform_size-1)] // if null - will not calculate
fclt_corr); // float [][][] fclt_corr) // new float [tilesX * tilesY][][] or null
......
......@@ -8715,98 +8715,127 @@ if (debugLevel > -100) return true; // temporarily !
// 1626032208_613623-results-rnd_0.003-fpn_0.0-sigma_1.5-offset1.0-sensors16-inter.tiff
double [][] noise_task = {
{0.00, 0.0, 1.5, 1.0, 0.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors16, inter
{0.00, 0.0, 1.5, 1.0, 0.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors16, intra
{0.00, 0.0, 1.5, 1.0, 3.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors8, inter
{0.00, 0.0, 1.5, 1.0, 3.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors8, intra
{0.00, 0.0, 1.5, 1.0, 2.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors4, inter
{0.00, 0.0, 1.5, 1.0, 2.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors4, intra
{0.00, 0.0, 1.5, 1.0, 1.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors2, inter
{0.00, 0.0, 1.5, 1.0, 1.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors2, intra
{0.003,0.0, 1.5, 1.0, 0.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors16, inter
{0.003,0.0, 1.5, 1.0, 0.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors16, intra
{0.003,0.0, 1.5, 1.0, 3.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors8, inter
{0.003,0.0, 1.5, 1.0, 3.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors8, intra
{0.003,0.0, 1.5, 1.0, 2.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors4, inter
{0.003,0.0, 1.5, 1.0, 2.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors4, intra
{0.003,0.0, 1.5, 1.0, 1.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors2, inter
{0.003,0.0, 1.5, 1.0, 1.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors2, intra
{0.01, 0.0, 1.5, 1.0, 0.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors16, inter
{0.01, 0.0, 1.5, 1.0, 0.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors16, intra
{0.01, 0.0, 1.5, 1.0, 3.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors8, inter
{0.01, 0.0, 1.5, 1.0, 3.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors8, intra
{0.01, 0.0, 1.5, 1.0, 2.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors4, inter
{0.01, 0.0, 1.5, 1.0, 2.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors4, intra
{0.01, 0.0, 1.5, 1.0, 1.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors2, inter
{0.01, 0.0, 1.5, 1.0, 1.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors2, intra
{0.03, 0.0, 1.5, 1.0, 0.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors16, inter
{0.03, 0.0, 1.5, 1.0, 0.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors16, intra
{0.03, 0.0, 1.5, 1.0, 3.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors8, inter
{0.03, 0.0, 1.5, 1.0, 3.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors8, intra
{0.03, 0.0, 1.5, 1.0, 2.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors4, inter
{0.03, 0.0, 1.5, 1.0, 2.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors4, intra
{0.03, 0.0, 1.5, 1.0, 1.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors2, inter
{0.03, 0.0, 1.5, 1.0, 1.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors2, intra
{0.06, 0.0, 1.5, 1.0, 0.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors16, inter
{0.06, 0.0, 1.5, 1.0, 0.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors16, intra
{0.06, 0.0, 1.5, 1.0, 3.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors8, inter
{0.06, 0.0, 1.5, 1.0, 3.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors8, intra
{0.06, 0.0, 1.5, 1.0, 2.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors4, inter
{0.06, 0.0, 1.5, 1.0, 2.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors4, intra
{0.06, 0.0, 1.5, 1.0, 1.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors2, inter
{0.06, 0.0, 1.5, 1.0, 1.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors2, intra
{0.1, 0.0, 1.5, 1.0, 0.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors16, inter
{0.1, 0.0, 1.5, 1.0, 0.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors16, intra
{0.1, 0.0, 1.5, 1.0, 3.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors8, inter
{0.1, 0.0, 1.5, 1.0, 3.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors8, intra
{0.1, 0.0, 1.5, 1.0, 2.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors4, inter
{0.1, 0.0, 1.5, 1.0, 2.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors4, intra
{0.1, 0.0, 1.5, 1.0, 1.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors2, inter
{0.1, 0.0, 1.5, 1.0, 1.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors2, intra
{0.2, 0.0, 1.5, 1.0, 0.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors16, inter
{0.2, 0.0, 1.5, 1.0, 0.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors16, intra
{0.2, 0.0, 1.5, 1.0, 3.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors8, inter
{0.2, 0.0, 1.5, 1.0, 3.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors8, intra
{0.2, 0.0, 1.5, 1.0, 2.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors4, inter
{0.2, 0.0, 1.5, 1.0, 2.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors4, intra
{0.2, 0.0, 1.5, 1.0, 1.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors2, inter
{0.2, 0.0, 1.5, 1.0, 1.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors2, intra
/*
{0.00, 0.0, 1.5, 1.4142, 0.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors16, inter
{0.00, 0.0, 1.5, 1.4142, 0.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors16, intra
{0.00, 0.0, 1.5, 1.4142, 3.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors8, inter
{0.00, 0.0, 1.5, 1.4142, 3.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors8, intra
{0.00, 0.0, 1.5, 1.4142, 2.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors4, inter
{0.00, 0.0, 1.5, 1.4142, 2.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors4, intra
{0.00, 0.0, 1.5, 1.4142, 1.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors2, inter
{0.00, 0.0, 1.5, 1.4142, 1.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors2, intra
{0.003,0.0, 1.5, 1.4142, 0.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors16, inter
{0.003,0.0, 1.5, 1.4142, 0.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors16, intra
{0.003,0.0, 1.5, 1.4142, 3.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors8, inter
{0.003,0.0, 1.5, 1.4142, 3.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors8, intra
{0.003,0.0, 1.5, 1.4142, 2.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors4, inter
{0.003,0.0, 1.5, 1.4142, 2.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors4, intra
{0.003,0.0, 1.5, 1.4142, 1.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors2, inter
{0.003,0.0, 1.5, 1.4142, 1.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors2, intra
{0.01, 0.0, 1.5, 1.4142, 0.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors16, inter
{0.01, 0.0, 1.5, 1.4142, 0.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors16, intra
{0.01, 0.0, 1.5, 1.4142, 3.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors8, inter
{0.01, 0.0, 1.5, 1.4142, 3.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors8, intra
{0.01, 0.0, 1.5, 1.4142, 2.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors4, inter
{0.01, 0.0, 1.5, 1.4142, 2.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors4, intra
{0.01, 0.0, 1.5, 1.4142, 1.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors2, inter
{0.01, 0.0, 1.5, 1.4142, 1.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors2, intra
{0.3, 0.0, 1.5, 1.0, 0.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors16, inter
{0.3, 0.0, 1.5, 1.0, 0.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors16, intra
{0.3, 0.0, 1.5, 1.0, 3.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors8, inter
{0.3, 0.0, 1.5, 1.0, 3.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors8, intra
{0.3, 0.0, 1.5, 1.0, 2.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors4, inter
{0.3, 0.0, 1.5, 1.0, 2.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors4, intra
{0.3, 0.0, 1.5, 1.0, 1.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors2, inter
{0.3, 0.0, 1.5, 1.0, 1.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors2, intra
{0.4, 0.0, 1.5, 1.0, 0.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors16, inter
{0.4, 0.0, 1.5, 1.0, 0.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors16, intra
{0.4, 0.0, 1.5, 1.0, 3.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors8, inter
{0.4, 0.0, 1.5, 1.0, 3.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors8, intra
{0.4, 0.0, 1.5, 1.0, 2.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors4, inter
{0.4, 0.0, 1.5, 1.0, 2.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors4, intra
{0.4, 0.0, 1.5, 1.0, 1.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors2, inter
{0.4, 0.0, 1.5, 1.0, 1.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors2, intra
{0.5, 0.0, 1.5, 1.0, 0.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors16, inter
{0.5, 0.0, 1.5, 1.0, 0.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors16, intra
{0.5, 0.0, 1.5, 1.0, 3.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors8, inter
{0.5, 0.0, 1.5, 1.0, 3.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors8, intra
{0.5, 0.0, 1.5, 1.0, 2.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors4, inter
{0.5, 0.0, 1.5, 1.0, 2.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors4, intra
{0.5, 0.0, 1.5, 1.0, 1.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors2, inter
{0.5, 0.0, 1.5, 1.0, 1.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors2, intra
{0.03, 0.0, 1.5, 1.4142, 0.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors16, inter
{0.03, 0.0, 1.5, 1.4142, 0.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors16, intra
{0.03, 0.0, 1.5, 1.4142, 3.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors8, inter
{0.03, 0.0, 1.5, 1.4142, 3.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors8, intra
{0.03, 0.0, 1.5, 1.4142, 2.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors4, inter
{0.03, 0.0, 1.5, 1.4142, 2.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors4, intra
{0.03, 0.0, 1.5, 1.4142, 1.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors2, inter
{0.03, 0.0, 1.5, 1.4142, 1.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors2, intra
{0.06, 0.0, 1.5, 1.4142, 0.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors16, inter
{0.06, 0.0, 1.5, 1.4142, 0.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors16, intra
{0.06, 0.0, 1.5, 1.4142, 3.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors8, inter
{0.06, 0.0, 1.5, 1.4142, 3.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors8, intra
{0.06, 0.0, 1.5, 1.4142, 2.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors4, inter
{0.06, 0.0, 1.5, 1.4142, 2.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors4, intra
{0.06, 0.0, 1.5, 1.4142, 1.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors2, inter
{0.06, 0.0, 1.5, 1.4142, 1.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors2, intra
{0.1, 0.0, 1.5, 1.4142, 0.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors16, inter
{0.1, 0.0, 1.5, 1.4142, 0.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors16, intra
{0.1, 0.0, 1.5, 1.4142, 3.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors8, inter
{0.1, 0.0, 1.5, 1.4142, 3.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors8, intra
{0.1, 0.0, 1.5, 1.4142, 2.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors4, inter
{0.1, 0.0, 1.5, 1.4142, 2.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors4, intra
{0.1, 0.0, 1.5, 1.4142, 1.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors2, inter
{0.1, 0.0, 1.5, 1.4142, 1.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors2, intra
{0.2, 0.0, 1.5, 1.4142, 0.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors16, inter
{0.2, 0.0, 1.5, 1.4142, 0.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors16, intra
{0.2, 0.0, 1.5, 1.4142, 3.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors8, inter
{0.2, 0.0, 1.5, 1.4142, 3.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors8, intra
{0.2, 0.0, 1.5, 1.4142, 2.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors4, inter
{0.2, 0.0, 1.5, 1.4142, 2.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors4, intra
{0.2, 0.0, 1.5, 1.4142, 1.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors2, inter
{0.2, 0.0, 1.5, 1.4142, 1.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors2, intra
{0.3, 0.0, 1.5, 1.4142, 0.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors16, inter
{0.3, 0.0, 1.5, 1.4142, 0.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors16, intra
{0.3, 0.0, 1.5, 1.4142, 3.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors8, inter
{0.3, 0.0, 1.5, 1.4142, 3.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors8, intra
{0.3, 0.0, 1.5, 1.4142, 2.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors4, inter
{0.3, 0.0, 1.5, 1.4142, 2.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors4, intra
{0.3, 0.0, 1.5, 1.4142, 1.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors2, inter
{0.3, 0.0, 1.5, 1.4142, 1.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors2, intra
{0.4, 0.0, 1.5, 1.4142, 0.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors16, inter
{0.4, 0.0, 1.5, 1.4142, 0.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors16, intra
{0.4, 0.0, 1.5, 1.4142, 3.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors8, inter
{0.4, 0.0, 1.5, 1.4142, 3.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors8, intra
{0.4, 0.0, 1.5, 1.4142, 2.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors4, inter
{0.4, 0.0, 1.5, 1.4142, 2.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors4, intra
{0.4, 0.0, 1.5, 1.4142, 1.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors2, inter
{0.4, 0.0, 1.5, 1.4142, 1.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors2, intra
{0.5, 0.0, 1.5, 1.4142, 0.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors16, inter
{0.5, 0.0, 1.5, 1.4142, 0.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors16, intra
{0.5, 0.0, 1.5, 1.4142, 3.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors8, inter
{0.5, 0.0, 1.5, 1.4142, 3.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors8, intra
{0.5, 0.0, 1.5, 1.4142, 2.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors4, inter
{0.5, 0.0, 1.5, 1.4142, 2.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors4, intra
{0.5, 0.0, 1.5, 1.4142, 1.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors2, inter
{0.5, 0.0, 1.5, 1.4142, 1.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors2, intra
{0.6, 0.0, 1.5, 1.4142, 0.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors16, inter
{0.6, 0.0, 1.5, 1.4142, 0.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors16, intra
{0.6, 0.0, 1.5, 1.4142, 3.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors8, inter
{0.6, 0.0, 1.5, 1.4142, 3.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors8, intra
{0.6, 0.0, 1.5, 1.4142, 2.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors4, inter
{0.6, 0.0, 1.5, 1.4142, 2.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors4, intra
{0.6, 0.0, 1.5, 1.4142, 1.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors2, inter
{0.6, 0.0, 1.5, 1.4142, 1.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors2, intra
*/
{0.7, 0.0, 1.5, 1.4142, 0.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors16, inter
{0.7, 0.0, 1.5, 1.4142, 0.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors16, intra
{0.7, 0.0, 1.5, 1.4142, 3.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors8, inter
{0.7, 0.0, 1.5, 1.4142, 3.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors8, intra
{0.7, 0.0, 1.5, 1.4142, 2.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors4, inter
{0.7, 0.0, 1.5, 1.4142, 2.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors4, intra
{0.7, 0.0, 1.5, 1.4142, 1.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors2, inter
{0.7, 0.0, 1.5, 1.4142, 1.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors2, intra
{0.8, 0.0, 1.5, 1.4142, 0.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors16, inter
{0.8, 0.0, 1.5, 1.4142, 0.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors16, intra
{0.8, 0.0, 1.5, 1.4142, 3.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors8, inter
{0.8, 0.0, 1.5, 1.4142, 3.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors8, intra
{0.8, 0.0, 1.5, 1.4142, 2.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors4, inter
{0.8, 0.0, 1.5, 1.4142, 2.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors4, intra
{0.8, 0.0, 1.5, 1.4142, 1.0, 1.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors2, inter
{0.8, 0.0, 1.5, 1.4142, 1.0, 0.0}, // rnad = 0.06, fpn = 0.0, sigma = 1.5, offset = 1.0, sensors2, intra
};
System.out.println ("\n\n\n");
System.out.println("Noise parameters for this batch run are hard-wired in the code above this line");
boolean always_all_pairs = true;
for (int numset = 0; numset < noise_task.length; numset++) {
double noise_rnd = noise_task[numset][0];
double noise_fpn = noise_task[numset][1];
......@@ -8816,7 +8845,7 @@ if (debugLevel > -100) return true; // temporarily !
boolean inter = noise_task[numset][5] > 0;
clt_parameters.img_dtt.mcorr_limit_sensors = sensor_mode;
clt_parameters.img_dtt.mcorr_all_multi = (sensor_mode != 0); // add "all pairs" for 2,4,8 sesnors , but not for all 16 (mode 0)
clt_parameters.img_dtt.mcorr_all_multi = always_all_pairs || (sensor_mode != 0); // add "all pairs" for 2,4,8 sensors , but not for all 16 (mode 0)
clt_parameters.inp.noise.scale_random = noise_rnd;
clt_parameters.inp.noise.scale_fpn = noise_fpn;
clt_parameters.inp.noise.sigma = sigma;
......@@ -9004,6 +9033,100 @@ if (debugLevel > -100) return true; // temporarily !
int debug_level)
{
String [] noise_files = {
"-results-rnd_0.0-fpn_0.0-sigma_1.5-offset1.4142-sensors16-inter-nolma",
"-results-rnd_0.0-fpn_0.0-sigma_1.5-offset1.4142-sensors16-nointer-nolma",
"-results-rnd_0.0-fpn_0.0-sigma_1.5-offset1.4142-sensors2-inter-nolma",
"-results-rnd_0.0-fpn_0.0-sigma_1.5-offset1.4142-sensors2-nointer-nolma",
"-results-rnd_0.0-fpn_0.0-sigma_1.5-offset1.4142-sensors4-inter-nolma",
"-results-rnd_0.0-fpn_0.0-sigma_1.5-offset1.4142-sensors4-nointer-nolma",
"-results-rnd_0.0-fpn_0.0-sigma_1.5-offset1.4142-sensors8-inter-nolma",
"-results-rnd_0.0-fpn_0.0-sigma_1.5-offset1.4142-sensors8-nointer-nolma",
"-results-rnd_0.003-fpn_0.0-sigma_1.5-offset1.4142-sensors16-inter-nolma",
"-results-rnd_0.003-fpn_0.0-sigma_1.5-offset1.4142-sensors16-nointer-nolma",
"-results-rnd_0.003-fpn_0.0-sigma_1.5-offset1.4142-sensors2-inter-nolma",
"-results-rnd_0.003-fpn_0.0-sigma_1.5-offset1.4142-sensors2-nointer-nolma",
"-results-rnd_0.003-fpn_0.0-sigma_1.5-offset1.4142-sensors4-inter-nolma",
"-results-rnd_0.003-fpn_0.0-sigma_1.5-offset1.4142-sensors4-nointer-nolma",
"-results-rnd_0.003-fpn_0.0-sigma_1.5-offset1.4142-sensors8-inter-nolma",
"-results-rnd_0.003-fpn_0.0-sigma_1.5-offset1.4142-sensors8-nointer-nolma",
"-results-rnd_0.01-fpn_0.0-sigma_1.5-offset1.4142-sensors16-inter-nolma",
"-results-rnd_0.01-fpn_0.0-sigma_1.5-offset1.4142-sensors16-nointer-nolma",
"-results-rnd_0.01-fpn_0.0-sigma_1.5-offset1.4142-sensors2-inter-nolma",
"-results-rnd_0.01-fpn_0.0-sigma_1.5-offset1.4142-sensors2-nointer-nolma",
"-results-rnd_0.01-fpn_0.0-sigma_1.5-offset1.4142-sensors4-inter-nolma",
"-results-rnd_0.01-fpn_0.0-sigma_1.5-offset1.4142-sensors4-nointer-nolma",
"-results-rnd_0.01-fpn_0.0-sigma_1.5-offset1.4142-sensors8-inter-nolma",
"-results-rnd_0.01-fpn_0.0-sigma_1.5-offset1.4142-sensors8-nointer-nolma",
"-results-rnd_0.03-fpn_0.0-sigma_1.5-offset1.4142-sensors16-inter-nolma",
"-results-rnd_0.03-fpn_0.0-sigma_1.5-offset1.4142-sensors16-nointer-nolma",
"-results-rnd_0.03-fpn_0.0-sigma_1.5-offset1.4142-sensors2-inter-nolma",
"-results-rnd_0.03-fpn_0.0-sigma_1.5-offset1.4142-sensors2-nointer-nolma",
"-results-rnd_0.03-fpn_0.0-sigma_1.5-offset1.4142-sensors4-inter-nolma",
"-results-rnd_0.03-fpn_0.0-sigma_1.5-offset1.4142-sensors4-nointer-nolma",
"-results-rnd_0.03-fpn_0.0-sigma_1.5-offset1.4142-sensors8-inter-nolma",
"-results-rnd_0.03-fpn_0.0-sigma_1.5-offset1.4142-sensors8-nointer-nolma",
"-results-rnd_0.06-fpn_0.0-sigma_1.5-offset1.4142-sensors16-inter-nolma",
"-results-rnd_0.06-fpn_0.0-sigma_1.5-offset1.4142-sensors16-nointer-nolma",
"-results-rnd_0.06-fpn_0.0-sigma_1.5-offset1.4142-sensors2-inter-nolma",
"-results-rnd_0.06-fpn_0.0-sigma_1.5-offset1.4142-sensors2-nointer-nolma",
"-results-rnd_0.06-fpn_0.0-sigma_1.5-offset1.4142-sensors4-inter-nolma",
"-results-rnd_0.06-fpn_0.0-sigma_1.5-offset1.4142-sensors4-nointer-nolma",
"-results-rnd_0.06-fpn_0.0-sigma_1.5-offset1.4142-sensors8-inter-nolma",
"-results-rnd_0.06-fpn_0.0-sigma_1.5-offset1.4142-sensors8-nointer-nolma",
"-results-rnd_0.1-fpn_0.0-sigma_1.5-offset1.4142-sensors16-inter-nolma",
"-results-rnd_0.1-fpn_0.0-sigma_1.5-offset1.4142-sensors16-nointer-nolma",
"-results-rnd_0.1-fpn_0.0-sigma_1.5-offset1.4142-sensors2-inter-nolma",
"-results-rnd_0.1-fpn_0.0-sigma_1.5-offset1.4142-sensors2-nointer-nolma",
"-results-rnd_0.1-fpn_0.0-sigma_1.5-offset1.4142-sensors4-inter-nolma",
"-results-rnd_0.1-fpn_0.0-sigma_1.5-offset1.4142-sensors4-nointer-nolma",
"-results-rnd_0.1-fpn_0.0-sigma_1.5-offset1.4142-sensors8-inter-nolma",
"-results-rnd_0.1-fpn_0.0-sigma_1.5-offset1.4142-sensors8-nointer-nolma",
"-results-rnd_0.2-fpn_0.0-sigma_1.5-offset1.4142-sensors16-inter-nolma",
"-results-rnd_0.2-fpn_0.0-sigma_1.5-offset1.4142-sensors16-nointer-nolma",
"-results-rnd_0.2-fpn_0.0-sigma_1.5-offset1.4142-sensors2-inter-nolma",
"-results-rnd_0.2-fpn_0.0-sigma_1.5-offset1.4142-sensors2-nointer-nolma",
"-results-rnd_0.2-fpn_0.0-sigma_1.5-offset1.4142-sensors4-inter-nolma",
"-results-rnd_0.2-fpn_0.0-sigma_1.5-offset1.4142-sensors4-nointer-nolma",
"-results-rnd_0.2-fpn_0.0-sigma_1.5-offset1.4142-sensors8-inter-nolma",
"-results-rnd_0.2-fpn_0.0-sigma_1.5-offset1.4142-sensors8-nointer-nolma",
"-results-rnd_0.3-fpn_0.0-sigma_1.5-offset1.4142-sensors16-inter-nolma",
"-results-rnd_0.3-fpn_0.0-sigma_1.5-offset1.4142-sensors16-nointer-nolma",
"-results-rnd_0.3-fpn_0.0-sigma_1.5-offset1.4142-sensors2-inter-nolma",
"-results-rnd_0.3-fpn_0.0-sigma_1.5-offset1.4142-sensors2-nointer-nolma",
"-results-rnd_0.3-fpn_0.0-sigma_1.5-offset1.4142-sensors4-inter-nolma",
"-results-rnd_0.3-fpn_0.0-sigma_1.5-offset1.4142-sensors4-nointer-nolma",
"-results-rnd_0.3-fpn_0.0-sigma_1.5-offset1.4142-sensors8-inter-nolma",
"-results-rnd_0.3-fpn_0.0-sigma_1.5-offset1.4142-sensors8-nointer-nolma",
"-results-rnd_0.4-fpn_0.0-sigma_1.5-offset1.4142-sensors16-inter-nolma",
"-results-rnd_0.4-fpn_0.0-sigma_1.5-offset1.4142-sensors16-nointer-nolma",
"-results-rnd_0.4-fpn_0.0-sigma_1.5-offset1.4142-sensors2-inter-nolma",
"-results-rnd_0.4-fpn_0.0-sigma_1.5-offset1.4142-sensors2-nointer-nolma",
"-results-rnd_0.4-fpn_0.0-sigma_1.5-offset1.4142-sensors4-inter-nolma",
"-results-rnd_0.4-fpn_0.0-sigma_1.5-offset1.4142-sensors4-nointer-nolma",
"-results-rnd_0.4-fpn_0.0-sigma_1.5-offset1.4142-sensors8-inter-nolma",
"-results-rnd_0.4-fpn_0.0-sigma_1.5-offset1.4142-sensors8-nointer-nolma",
"-results-rnd_0.5-fpn_0.0-sigma_1.5-offset1.4142-sensors16-inter-nolma",
"-results-rnd_0.5-fpn_0.0-sigma_1.5-offset1.4142-sensors16-nointer-nolma",
"-results-rnd_0.5-fpn_0.0-sigma_1.5-offset1.4142-sensors2-inter-nolma",
"-results-rnd_0.5-fpn_0.0-sigma_1.5-offset1.4142-sensors2-nointer-nolma",
"-results-rnd_0.5-fpn_0.0-sigma_1.5-offset1.4142-sensors4-inter-nolma",
"-results-rnd_0.5-fpn_0.0-sigma_1.5-offset1.4142-sensors4-nointer-nolma",
"-results-rnd_0.5-fpn_0.0-sigma_1.5-offset1.4142-sensors8-inter-nolma",
"-results-rnd_0.5-fpn_0.0-sigma_1.5-offset1.4142-sensors8-nointer-nolma",
"-results-rnd_0.5-fpn_0.0-sigma_1.5-offset1.4142-sensors16-inter-nolma",
"-results-rnd_0.5-fpn_0.0-sigma_1.5-offset1.4142-sensors16-nointer-nolma",
"-results-rnd_0.5-fpn_0.0-sigma_1.5-offset1.4142-sensors2-inter-nolma",
"-results-rnd_0.5-fpn_0.0-sigma_1.5-offset1.4142-sensors2-nointer-nolma",
"-results-rnd_0.5-fpn_0.0-sigma_1.5-offset1.4142-sensors4-inter-nolma",
"-results-rnd_0.5-fpn_0.0-sigma_1.5-offset1.4142-sensors4-nointer-nolma",
"-results-rnd_0.5-fpn_0.0-sigma_1.5-offset1.4142-sensors8-inter-nolma",
"-results-rnd_0.5-fpn_0.0-sigma_1.5-offset1.4142-sensors8-nointer-nolma",
/*
"-results-rnd_0.0-fpn_0.0-sigma_1.5-offset1.0-sensors16-inter",
"-results-rnd_0.0-fpn_0.0-sigma_1.5-offset1.0-sensors16-nointer",
"-results-rnd_0.0-fpn_0.0-sigma_1.5-offset1.0-sensors2-inter",
......@@ -9089,7 +9212,7 @@ if (debugLevel > -100) return true; // temporarily !
"-results-rnd_0.5-fpn_0.0-sigma_1.5-offset1.0-sensors4-nointer",
"-results-rnd_0.5-fpn_0.0-sigma_1.5-offset1.0-sensors8-inter",
"-results-rnd_0.5-fpn_0.0-sigma_1.5-offset1.0-sensors8-nointer",
*/
/*
"-results-lev_1.0E-6-sigma_1.5-offset1.0-inter-mask63",
"-results-lev_1.0E-6-sigma_1.5-offset1.0-nointer-mask63",
......@@ -9348,10 +9471,10 @@ if (debugLevel > -100) return true; // temporarily !
double disp_far_abs = 1.0;
double disp_max_abs = 0.4;
double min_scenes_used = 0.5;
boolean use_edges = true; // false; // do not filter ourt edges
boolean all_converge = true; // false; // use only tiles that converge for all variants (intra, inter, used sensors)
boolean all_max_err = true; // false; // use only tiles that have limited error for all variants (intra, inter, used sensors)
boolean use_edges = false; // true; // false; // do not filter out edges
boolean all_converge = false; // true; // false; // use only tiles that converge for all variants (intra, inter, used sensors)
boolean all_max_err = false; // true; // false; // use only tiles that have limited error for all variants (intra, inter, used sensors)
boolean same_num_sensors = false; // true; // compare performance to same number of sensors, inter, no-noise
if (use_edges) {
disp_max_rel = 10.0;
disp_max_abs = 10.0;
......@@ -9438,31 +9561,98 @@ if (debugLevel > -100) return true; // temporarily !
// boolean all_max_err = false; // use only tiles that have limited error for all variants (intra, inter, used sensors)
boolean [] converged_tiles = good_tiles_ref.clone();
boolean [] good_tiles = good_tiles_ref.clone();
if (all_converge || all_max_err) { // scan all images
boolean [][] good_tiles_mode = {good_tiles_ref.clone(),good_tiles_ref.clone(),good_tiles_ref.clone(),good_tiles_ref.clone()}; // per intra mode
double [][][] ref_dsn_mode = new double[4][][];
int [] sensor_mode_file = new int [noise_files.length];
double [] noise_rnd_file = new double [noise_files.length];
double [] noise_fpn_file = new double [noise_files.length];
boolean [] inter_file = new boolean [noise_files.length];
// extract data from file names
for (int nf = 0; nf < noise_files.length; nf++) {
String fn = noise_files[nf];
String [] tokens = fn.replace("E-","E_minus").split("-");
double noise_random = Double.parseDouble(tokens[2].replace("E_minus","E-").substring("rnd_".length()));
double noise_fpn = Double.parseDouble(tokens[3].replace("E_minus","E-").substring("fpn_".length()));
boolean inter = !fn.contains("nointer");
int used_sensors = Integer.parseInt(tokens[6].replace("E_minus","E-").substring("sensors".length()));
int sensor_mode = 0; // inter; // ? 0 : (intra? 1 : 2);
switch (used_sensors) {
case 16:
sensor_mode = 0;
break;
case 8:
sensor_mode = 1;
break;
case 4:
sensor_mode = 2;
break;
case 2:
sensor_mode = 3;
break;
default:
System.out.println("Invalid number of sensors:"+used_sensors);
continue;
}
sensor_mode_file[nf] = sensor_mode;
noise_rnd_file[nf] = noise_random;
noise_fpn_file[nf] = noise_fpn;
inter_file[nf] = inter;
}
if (all_converge || all_max_err || same_num_sensors) { // scan all images
for (int nf = 0; nf < noise_files.length; nf++) {
String fn = noise_files[nf];
String [] tokens = fn.replace("E-","E_minus").split("-");
double noise_random = Double.parseDouble(tokens[2].replace("E_minus","E-").substring("rnd_".length()));
double noise_fpn = Double.parseDouble(tokens[3].replace("E_minus","E-").substring("fpn_".length()));
NoiseLevel noise_level = new NoiseLevel(noise_random, noise_fpn);
boolean inter = !fn.contains("nointer");
int used_sensors = Integer.parseInt(tokens[6].replace("E_minus","E-").substring("sensors".length()));
if (inter) {
if (inter_file[nf]) {
double [][] noise_dsn = ref_scene.readDoubleArrayFromModelDirectory(
fn, // noise_files[nf], // String suffix,
0, // int num_slices, // (0 - all)
null); // int [] wh);
if (same_num_sensors && (noise_rnd_file[nf] == 0.0) && (noise_fpn_file[nf] == 0.0)) {
ref_dsn_mode[sensor_mode_file[nf]] = noise_dsn;
good_tiles_mode[sensor_mode_file[nf]] = getGoodTiles(
max_diff, // double max_diff,
// disable edges filtering - use only common edges
100.0,// disp_near_rel, // double disp_near_rel,
100.0,//disp_max_rel, // double disp_max_rel,
disp_max_inter, // double disp_max_inter
disp_far_abs, // double disp_far_abs,
disp_max_abs, // double disp_max_abs,
min_scenes_used, // double min_scenes
noise_dsn[indx_last], // double [] disp,
noise_dsn[indx_lma_last], // double [] disp_lma,
noise_dsn[indx_diff_last], // indx_last_diff], // double [] last_diff,
sky_map[0], // double [] sky_map, // may be null
ref_dsn[indx_used], // double [] scenes_used, // 1.0 - all
tilesX, // int tilesX,
(debug_level > -2)); // boolean debug_img);
}
if (all_converge || all_max_err ) {
for (int i = 0; i < good_tiles_ref.length; i++) if (good_tiles_ref[i]) {
if (Math.abs(noise_dsn[indx_last_diff][i]) > max_diff) {
converged_tiles[i] = false;
if (all_converge) {
good_tiles[i] = false;
}
if (good_tiles_ref == null) {
System.out.println("good_tiles_ref==null");
continue;
}
if (good_tiles[i] && all_max_err) {
if (Math.abs(noise_dsn[indx_last][i] - ref_dsn[indx_last][i]) > max_err) {
good_tiles[i] = false;
for (int i = 0; i < good_tiles_ref.length; i++) if (good_tiles_ref[i]) {
if ((noise_dsn == null) || (noise_dsn[indx_last_diff] == null)) {
System.out.println("noise_dsn["+indx_last_diff+"]==null");
continue;
}
if (Math.abs(noise_dsn[indx_last_diff][i]) > max_diff) {
converged_tiles[i] = false;
if (all_converge) {
good_tiles[i] = false;
}
}
if (good_tiles[i] && all_max_err) {
if (Math.abs(noise_dsn[indx_last][i] - ref_dsn[indx_last][i]) > max_err) {
good_tiles[i] = false;
}
}
}
}
......@@ -9471,29 +9661,134 @@ if (debugLevel > -100) return true; // temporarily !
}
int num_converged_global = 0;
int num_good_global = 0;
int [] num_good_mode = new int [good_tiles_mode.length];
for (int i = 0; i < good_tiles.length; i++) {
if (converged_tiles[i]) num_converged_global++;
if (good_tiles[i]) num_good_global++;
for (int j = 0; j < good_tiles_mode.length; j++) {
good_tiles_mode[j][i] &= good_tiles[i]; // and with global (for edge filtering)
if (good_tiles_mode[j][i]) num_good_mode[j]++;
}
}
// For each file find boolean good/bad, comparing to zero noise of the same number of sensors, itnerscene
boolean [][] good_file_tile = new boolean[noise_files.length][]; // [good_tiles.length];
// double max_err1 =0.25; // pix
double max_diff_from_ref = 0.1; // max_err1; // 0.25 pix
for (int nf = 0; nf < noise_files.length; nf++) {
// common or per number of sensors reference data
String fn = noise_files[nf];
int sensor_mode = sensor_mode_file[nf];
double [][] ref_var = same_num_sensors ? ref_dsn_mode[sensor_mode] : ref_dsn;
double [][] noise_dsn = ref_scene.readDoubleArrayFromModelDirectory(
fn, // noise_files[nf], // String suffix,
0, // int num_slices, // (0 - all)
null); // int [] wh);
// boolean [] good_ref = good_tiles_mode[sensor_mode]; // good tile without noise for this number of sensors
good_file_tile[nf] = good_tiles_mode[sensor_mode].clone();
for (int ntile = 0; ntile < good_file_tile[nf].length; ntile++) if (good_file_tile[nf][ntile]) {
boolean converged = (Math.abs(noise_dsn[indx_last_diff][ntile]) < max_diff);
if (!converged) {
good_file_tile[nf][ntile] = false;
continue;
}
boolean good_tiles_this = (Math.abs(noise_dsn[indx_last][ntile] - ref_var[indx_last][ntile]) < max_diff_from_ref);
if (!good_tiles_this) {
good_file_tile[nf][ntile] = false;
continue;
}
}
}
// show number of noise values for each tile, num sensors and intra/inter, discarding tiles that are good/bad for all noise levels
int min_modes = 4;//at least half are meaningfull
{
boolean use_fpn = false;
double [][] dbg_num_noise_val = new double [good_tiles_mode.length*2][good_tiles.length];
String [] dbg_num_noise_titles = new String [dbg_num_noise_val.length];
for (int i = 0; i < good_tiles_mode.length; i++) {
dbg_num_noise_titles[i]= "inter"+(new int [] {16,8,4,2})[i];
dbg_num_noise_titles[i+good_tiles_mode.length]="intra"+(new int [] {16,8,4,2})[i];
}
for (int i = 0; i < dbg_num_noise_val.length; i++) {
Arrays.fill(dbg_num_noise_val[i], Double.NaN);
}
for (int ntile = 0; ntile < good_tiles.length; ntile++) if (good_tiles[ntile]) { // do not bother with obviously bad
int [] num_good = new int [dbg_num_noise_val.length];
boolean [] has_bad = new boolean [dbg_num_noise_val.length];
for (int nf = 0; nf < noise_files.length; nf++) {
int results_index = sensor_mode_file[nf] + (inter_file[nf]? 0 : 4); // inter; // ? 0 : (intra? 1 : 2);
if (good_file_tile[nf][ntile]) {
num_good[results_index]++;
} else {
has_bad[results_index] = true;
}
}
// only keep tiles that have noise threshold for all modalities
int num_full = 0;
for (int i = 0; i < dbg_num_noise_val.length; i++) {
if (has_bad[i] && (num_good[i] > 0)) {
num_full++;
}
}
if (num_full < min_modes) {
continue;
}
for (int i = 0; i < dbg_num_noise_val.length; i++) if (has_bad[i]) {
dbg_num_noise_val[i][ntile] = num_good[i];
}
}
(new ShowDoubleFloatArrays()).showArrays(
dbg_num_noise_val,
tilesX,
good_tiles.length/ tilesX,
true,
"num_noise_levels",
dbg_num_noise_titles);
double [] noise_file = use_fpn ? noise_fpn_file : noise_rnd_file;
double [][] noise_levels = InterIntraLMA.getNoiseThreshold(
noise_file, // double [] noise_file, // = new double [noise_files.length];
sensor_mode_file, // int [] sensor_mode_file,
inter_file, // boolean [] inter_file,
good_file_tile, // boolean [][] good_file_tile,
min_modes); // int min_modes,
double [][] dbg_noise_levels = new double [dbg_num_noise_titles.length][good_tiles.length];
for (int i = 0; i < dbg_noise_levels.length; i++) {
Arrays.fill(dbg_noise_levels[i], Double.NaN);
}
for (int ntile = 0; ntile <noise_levels.length; ntile++) if (noise_levels[ntile] != null){
for (int i = 0; i < noise_levels[ntile].length; i++) {
dbg_noise_levels[i][ntile] = noise_levels[ntile][i];
}
}
(new ShowDoubleFloatArrays()).showArrays(
dbg_noise_levels,
tilesX,
good_tiles.length/ tilesX,
true,
"noise_levels",
dbg_num_noise_titles);
}
//good_tiles_mode
System.out.println("num_converged_global="+num_converged_global+", num_good_global="+num_good_global);
for (int j = 0; j < num_good_mode.length; j++) {
System.out.println("num_good_mode["+ j+"]="+num_good_mode[j]);
}
HashMap <NoiseLevel, DisparityResults> results_map = new HashMap <NoiseLevel, DisparityResults> ();
for (int nf = 0; nf < noise_files.length; nf++) {
String fn = noise_files[nf];
String [] tokens = fn.replace("E-","E_minus").split("-");
double noise_random = Double.parseDouble(tokens[2].replace("E_minus","E-").substring("rnd_".length()));
double noise_fpn = Double.parseDouble(tokens[3].replace("E_minus","E-").substring("fpn_".length()));
NoiseLevel noise_level = new NoiseLevel(noise_random, noise_fpn);
boolean inter = !fn.contains("nointer");
int used_sensors = Integer.parseInt(tokens[6].replace("E_minus","E-").substring("sensors".length()));
NoiseLevel noise_level = new NoiseLevel(noise_rnd_file[nf], noise_fpn_file[nf]);
int results_index = sensor_mode_file[nf] + (inter_file[nf]? 0 : 4); // inter; // ? 0 : (intra? 1 : 2);
double [][] noise_dsn = ref_scene.readDoubleArrayFromModelDirectory(
fn, // noise_files[nf], // String suffix,
0, // int num_slices, // (0 - all)
null); // int [] wh);
boolean [] converged_tiles_this = converged_tiles.clone(); // .clone();
boolean [] good_tiles_this = good_tiles.clone(); // good_tiles_ref.clone();
boolean [] good_tiles_this1 = good_tiles.clone(); // good_tiles_ref.clone();
boolean [] good_tiles_this = good_tiles_mode[sensor_mode_file[nf]].clone(); //good_tiles.clone(); // good_tiles_ref.clone();
boolean [] good_tiles_this1 =good_tiles_mode[sensor_mode_file[nf]].clone(); // good_tiles.clone(); // good_tiles_ref.clone();
int num_converged = 0;
int num_good = 0;
int num_good1 = 0;
......@@ -9503,34 +9798,28 @@ if (debugLevel > -100) return true; // temporarily !
double s0 = 0.0;
double s2 = 0.0;
for (int i = 0; i < good_tiles_ref.length; i++) if (good_tiles[i]) { // _ref[i]) {
double [][] ref_var = same_num_sensors ? ref_dsn_mode[sensor_mode_file[nf]] : ref_dsn;
for (int i = 0; i < good_tiles_ref.length; i++) if (good_tiles_mode[sensor_mode_file[nf]][i]) { // _ref[i]) {
converged_tiles_this[i] = (Math.abs(noise_dsn[indx_last_diff][i]) < max_diff);
if (converged_tiles_this[i]){
num_converged++;
good_tiles_this[i] = (Math.abs(noise_dsn[indx_last][i] - ref_dsn[indx_last][i]) < max_err);
good_tiles_this[i] = (Math.abs(noise_dsn[indx_last][i] - ref_var[indx_last][i]) < max_err);
//indx_last
if (good_tiles_this[i]) {
num_good++;
double w = (noise_dsn[indx_strength][i] < min_strength)? 0.0 : 1.0;
s0 += w;
double d = noise_dsn[indx_last][i] - ref_dsn[indx_last][i];
double d = noise_dsn[indx_last][i] - ref_var[indx_last][i];
s2 += w * d * d;
}
/*
good_tiles_this1[i] = (Math.abs(noise_dsn[indx_last][i] - noise_dsn[indx_initial][i]) < max_err1);
if (good_tiles_this1[i]) {
num_good1++;
}
*/
}
/// if (noise_dsn[indx_initial][i] <= max_disparity) { // only for near tiles
// Is it a bug? smaller error for near tiles?
if (ref_dsn[indx_last][i] <= max_disparity) { // only for near tiles
if (ref_var[indx_last][i] <= max_disparity) { // only for near tiles
num_near++;
if (converged_tiles_this[i]){
num_converged_near++;
// good_tiles_this1[i] = (Math.abs(noise_dsn[indx_last][i] - noise_dsn[indx_initial][i]) < max_err1);
good_tiles_this1[i] = (Math.abs(noise_dsn[indx_last][i] - ref_dsn[indx_last][i]) < max_err1);
good_tiles_this1[i] = (Math.abs(noise_dsn[indx_last][i] - ref_var[indx_last][i]) < max_err1);
if (good_tiles_this1[i]) {
num_good1++;
}
......@@ -9538,13 +9827,6 @@ if (debugLevel > -100) return true; // temporarily !
}
}
double rmse = Math.sqrt(s2/s0);
/*
* int indx_strength = 1;
double perc_good = 100.0* num_good/num_good_init;
double perc_good1 = 100.0* num_good1/num_good_init;
double perc_good_conf = 100.0* num_good/num_converged;
*/
double [] results = {
1.0* num_good/num_good_init,
// 1.0* num_good1/num_good_init,
......@@ -9559,24 +9841,6 @@ if (debugLevel > -100) return true; // temporarily !
results_map.put(noise_level, dr);
}
// inter 16, inter 8, inter 4, inter 2, intra16, intra 8, intra 4, intra 2
int results_index = inter? 0 : 4; // inter; // ? 0 : (intra? 1 : 2);
switch (used_sensors) {
case 16:
results_index += 0;
break;
case 8:
results_index += 1;
break;
case 4:
results_index += 2;
break;
case 2:
results_index += 3;
break;
default:
System.out.println("Invalid number of sensors:"+used_sensors);
continue;
}
DisparityResults dr = results_map.get(noise_level);
dr.results[results_index] = results;
......
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