Commit a2bb43cd authored by Andrey Filippov's avatar Andrey Filippov
Browse files

Done with individual quad-cam adjustment using rig "GT" data

parent ee9c0264
Loading
Loading
Loading
Loading
+23 −10
Original line number Diff line number Diff line
@@ -2056,7 +2056,7 @@ B = |+dy0 -dy1 -2*dy3 |
				(new showDoubleFloatArrays()).showArrays(dbg_img, tilesX, tilesY, true, "hist_filt_ds"); // , titles);
			}
		}
		// combine infinity and lasy eye scan data into a single array
		// combine infinity and lazy eye scan data into a single array
		double [][] inf_and_ly = new double [2 * NUM_SLICES][];
		for (int i = 0; i < NUM_SLICES; i++){
			inf_and_ly[i] = inf_scan[i];
@@ -2076,7 +2076,9 @@ B = |+dy0 -dy1 -2*dy3 |
		}

//	static final int    INDEX_10_WEIGHT = 1;
		if (debugLevel > 0) {
			System.out.println("test123");
		}
		if ((debugLevel > -1) && (hist_smpl_side > 0)) { // 0) {
			String [] prefixes = {"disparity", "strength", "dx0", "dy0", "dx1", "dy1", "dx2", "dy2", "dx3", "dy3"};
			String [] titles = new String [2 * NUM_SLICES];
@@ -2128,7 +2130,9 @@ B = |+dy0 -dy1 -2*dy3 |
			}
			(new showDoubleFloatArrays()).showArrays(dbg_img, tilesX1, tilesY1, true, "inf_and_ly8",titles);
		}
		if (debugLevel > 0) {
			System.out.println("test1234");
		}
		// create list for infinity data
//		/clt_parameters.ly_inf_en,
		ArrayList<Sample> inf_samples_list;
@@ -2275,6 +2279,7 @@ System.out.println("test1234");
					clt_parameters.ly_par_sel,     //int     manual_par_sel,    // Manually select the parameter mask bit 0 - sym0, bit1 - sym1, ... (0 - use boolean flags, != 0 - ignore boolean flags)
					mismatch_list,                          // ArrayList<Mismatch> mismatch_list,
					qc.geometryCorrection,                  // GeometryCorrection geometryCorrection,
					null, // GeometryCorrection geometryCorrection_main, // if is aux camera using main cameras' coordinates. Disparity is still in aux camera pixels
					qc.geometryCorrection.getCorrVector(),  // GeometryCorrection.CorrVector corr_vector,
					old_new_rms,                            // double [] old_new_rms, // should be double[2]
//					2); // debugLevel); // 2); // 1); // int debugLevel)
@@ -2323,6 +2328,7 @@ System.out.println("test1234");


	public double [][][] lazyEyeCorrectionFromGT(
			final GeometryCorrection geometryCorrection_main, // if not null - this is an AUX camera of a rig
			final boolean    use_poly, // Use polynomial correction, false - correct tilt/azimuth/roll of each sensor
			final boolean    restore_disp_inf, // Restore subtracted disparity for scan #0 (infinity) always true
			final double     fcorr_radius,
@@ -2360,7 +2366,7 @@ System.out.println("test1234");
			int              debugLevel){

//		final double lazyEyeDispRelVariation = 0.02;

//geometryCorrection_main
		final int dbg_nTile = -34145; // 37005; // -59038;
		final int num_scans = scans_14.length/NUM_ALL_SLICES;
		final int num_tiles = scans_14[0].length;
@@ -2368,6 +2374,8 @@ System.out.println("test1234");
		final boolean []  center_mask = getCenterMask(fcorr_radius, tilesX, tilesY);
		final double [][] scans = new double [num_scans * NUM_SLICES][];
//		final double [][] comp_strength_rms = new double [num_scans][num_tiles];


		for (int ns = 0; ns < num_scans; ns++){
			final double [] min_weights = new double [num_tiles];
			for (int nTile = 0; nTile < num_tiles; nTile++){
@@ -2478,7 +2486,7 @@ System.out.println("test1234");
		double [][] combo_mismatch = new double [NUM_SLICES][num_tiles];
		for (int ns = 0; ns < num_scans; ns++){
			for (int nTile = 0; nTile < num_tiles; nTile++) {
				if ((nTile == dbg_nTile) || (nTile == 24971)){
				if (nTile == dbg_nTile) { // || (nTile == 24971)){
					System.out.println("lazyEyeCorrectionFromGT().1: nTile="+nTile); // filtered_scans[2][37005] = NaN
				}
//				double w = filtered_scans[ns * NUM_SLICES + 1][nTile];
@@ -2588,7 +2596,9 @@ System.out.println("test1234");
		}

//	static final int    INDEX_10_WEIGHT = 1;
		if (debugLevel > 0) {
			System.out.println("test123");
		}
		if ((debugLevel > -1) && (hist_smpl_side > 0)) { // 0) {
			String [] titles = {"disparity", "strength", "dx0", "dy0", "dx1", "dy1", "dx2", "dy2", "dx3", "dy3"};
			(new showDoubleFloatArrays()).showArrays(combo_mismatch, tilesX, tilesY, true, "inf_and_ly",titles);
@@ -2628,7 +2638,9 @@ System.out.println("test1234");
			}
			(new showDoubleFloatArrays()).showArrays(dbg_img, tilesX1, tilesY1, true, "inf_and_ly8",titles);
		}
		if (debugLevel > 0) {
			System.out.println("test1234a");
		}
		// create list for infinity data
//		/clt_parameters.ly_inf_en,

@@ -2732,6 +2744,7 @@ System.out.println("test1234");
				System.out.println("Are null - non-null are for poly correction only");
			}
		}
		// TODO: use geometryCorrection_main (if not null)
		if (!use_poly && (mismatch_list != null)){
			double [] old_new_rms = new double[1];
			boolean apply_extrinsic = true;
@@ -2746,6 +2759,7 @@ System.out.println("test1234");
					clt_parameters.ly_par_sel,     // int     manual_par_sel,    // Manually select the parameter mask bit 0 - sym0, bit1 - sym1, ... (0 - use boolean flags, != 0 - ignore boolean flags)
					mismatch_list,                          // ArrayList<Mismatch> mismatch_list,
					qc.geometryCorrection,                  // GeometryCorrection geometryCorrection,
					geometryCorrection_main, //  GeometryCorrection geometryCorrection_main, // if is aux camera using main cameras' coordinates. Disparity is still in aux camera pixels
					qc.geometryCorrection.getCorrVector(),  // GeometryCorrection.CorrVector corr_vector,
					old_new_rms,                            // double [] old_new_rms, // should be double[2]
//					2); // debugLevel); // 2); // 1); // int debugLevel)
@@ -3278,10 +3292,9 @@ System.out.println("test1234");
	  		boolean common_roll,       // Enable common roll (valid for high disparity range only)
			boolean corr_focalLength,  // Correct scales (focal length temperature? variations)
	  		int     manual_par_sel,    // Manually select the parameter mask bit 0 - sym0, bit1 - sym1, ... (0 - use boolean flags, != 0 - ignore boolean flags)


			ArrayList<Mismatch> mismatch_list,
			GeometryCorrection geometryCorrection,
			GeometryCorrection geometryCorrection_main, // if is aux camera using main cameras' coordinates. Disparity is still in aux camera pixels
			GeometryCorrection.CorrVector corr_vector,
			double [] old_new_rms, // should be double[2]
			int debugLevel)
+1 −1
Original line number Diff line number Diff line
@@ -512,7 +512,7 @@ public class BiScan {
		int dbg_x = 193;
		int dbg_y = 162;
		int debugLevel = -1;
		final int dbg_tile = (debugLevel>-2)?(dbg_x + tnImage.sizeX*dbg_y):-1;
		final int dbg_tile = (debugLevel>-1)?(dbg_x + tnImage.sizeX*dbg_y):-1;

		ai.set(0);
		// find definitely trusted and conditionally trusted tiles
+49 −8
Original line number Diff line number Diff line
@@ -122,6 +122,10 @@ public class EyesisCorrectionParameters {
    	public int     rig_batch_adjust_aux =  0;
    	public int     rig_batch_adjust_rig =  0;
    	public int     rig_batch_adjust_main_gt = 0; // adjust main camera using rig disparity as ground truth
    	public int     rig_batch_adjust_aux_gt =  0; // adjust aux camera using rig disparity as ground truth (TODO: finish geometry in derivatives)
    	public int     rig_batch_adjust_rig_gt =  0; // adjust rig after main and aux are adjusted with rig GT (late rig adjustment)
  		public boolean clt_batch_apply_man =  false;  // Apply (and disable) manual pixel shift
  		public boolean clt_batch_extrinsic =  false; // Calibrate extrinsic parameters for each set
  		public boolean clt_batch_poly =       false; // Calculate fine polynomial correction for each set
@@ -132,8 +136,6 @@ public class EyesisCorrectionParameters {
  		public boolean clt_batch_gen3d =      true;  // Generate 3d output: x3d and/or obj+mtl
  		public boolean clt_batch_dbg1 =       true;  // Generate debug images if a single set is selected
    	public String x3dModelVersion="v01";
    	public String jp4SubDir="jp4";
@@ -248,6 +250,9 @@ public class EyesisCorrectionParameters {
  			cp.rig_batch_adjust_aux=	this.rig_batch_adjust_aux;
  			cp.rig_batch_adjust_rig=	this.rig_batch_adjust_rig;
  			cp.rig_batch_adjust_main_gt = this.rig_batch_adjust_main_gt;
  			cp.rig_batch_adjust_aux_gt =  this.rig_batch_adjust_aux_gt;
  			cp.rig_batch_adjust_rig_gt =  this.rig_batch_adjust_rig_gt;
  			cp.clt_batch_apply_man=		this.clt_batch_apply_man;
  			cp.clt_batch_extrinsic=		this.clt_batch_extrinsic;
@@ -393,6 +398,11 @@ public class EyesisCorrectionParameters {
    		properties.setProperty(prefix+"rig_batch_adjust_aux",  this.rig_batch_adjust_aux+"");
    		properties.setProperty(prefix+"rig_batch_adjust_rig",  this.rig_batch_adjust_rig+"");
    		properties.setProperty(prefix+"rig_batch_adjust_main_gt", this.rig_batch_adjust_main_gt+"");
    		properties.setProperty(prefix+"rig_batch_adjust_aux_gt",  this.rig_batch_adjust_aux_gt+"");
    		properties.setProperty(prefix+"rig_batch_adjust_rig_gt",  this.rig_batch_adjust_rig_gt+"");
    		properties.setProperty(prefix+"clt_batch_apply_man",   this.clt_batch_apply_man+"");
    		properties.setProperty(prefix+"clt_batch_extrinsic",   this.clt_batch_extrinsic+"");
    		properties.setProperty(prefix+"clt_batch_poly",        this.clt_batch_poly+"");
@@ -533,6 +543,9 @@ public class EyesisCorrectionParameters {
  		    if (properties.getProperty(prefix+"rig_batch_adjust_main")!=null) this.rig_batch_adjust_main=Integer.parseInt(properties.getProperty(prefix+"rig_batch_adjust_main"));
  		    if (properties.getProperty(prefix+"rig_batch_adjust_aux")!=null)  this.rig_batch_adjust_aux=Integer.parseInt(properties.getProperty(prefix+"rig_batch_adjust_aux"));
  		    if (properties.getProperty(prefix+"rig_batch_adjust_rig")!=null)  this.rig_batch_adjust_rig=Integer.parseInt(properties.getProperty(prefix+"rig_batch_adjust_rig"));
  		    if (properties.getProperty(prefix+"rig_batch_adjust_main_gt")!=null)  this.rig_batch_adjust_main_gt=Integer.parseInt(properties.getProperty(prefix+"rig_batch_adjust_main_gt"));
  		    if (properties.getProperty(prefix+"rig_batch_adjust_aux_gt")!=null)  this.rig_batch_adjust_aux_gt=Integer.parseInt(properties.getProperty(prefix+"rig_batch_adjust_aux_gt"));
  		    if (properties.getProperty(prefix+"rig_batch_adjust_rig_gt")!=null)  this.rig_batch_adjust_rig_gt=Integer.parseInt(properties.getProperty(prefix+"rig_batch_adjust_rig_gt"));
			if (properties.getProperty(prefix+"clt_batch_apply_man")!= null) this.clt_batch_apply_man=Boolean.parseBoolean(properties.getProperty(prefix+"clt_batch_apply_man"));
			if (properties.getProperty(prefix+"clt_batch_extrinsic")!= null) this.clt_batch_extrinsic=Boolean.parseBoolean(properties.getProperty(prefix+"clt_batch_extrinsic"));
@@ -869,9 +882,13 @@ public class EyesisCorrectionParameters {
  			gd.addTab         ("Batch", "Select Batch parameters");
			gd.addNumericField("Repeat main camera field adjustment",                                this.rig_batch_adjust_main,  0);
			gd.addNumericField("Repeat aux camera field adjustment",                                 this.rig_batch_adjust_aux,   0);
			gd.addNumericField("Repeat 2-quad camera rig field adjustment",                          this.rig_batch_adjust_rig,   0);
			gd.addNumericField("Repeat main camera field adjustment (early, before rig)",                  this.rig_batch_adjust_main,  0);
			gd.addNumericField("Repeat aux camera field adjustment  (early, before rig)",                  this.rig_batch_adjust_aux,   0);
			gd.addNumericField("Repeat 2-quad camera rig field adjustment  (early, before late main/aux)", this.rig_batch_adjust_rig,   0);
			gd.addNumericField("Repeat main camera field adjustment (late, with GT disparity from rig)",   this.rig_batch_adjust_main_gt,  0);
			gd.addNumericField("Repeat aux camera field adjustment (late, with GT disparity from rig)",    this.rig_batch_adjust_aux_gt,   0);
			gd.addNumericField("Repeat 2-quad camera rig field adjustment (late, after all others)",       this.rig_batch_adjust_rig_gt,   0);
    		gd.addCheckbox    ("Apply (and disable) manual pixel shift",                             this.clt_batch_apply_man); // 21
    		gd.addCheckbox    ("Calibrate extrinsic parameters for each set",                        this.clt_batch_extrinsic); // 22
@@ -938,6 +955,10 @@ public class EyesisCorrectionParameters {
			this.rig_batch_adjust_aux =       (int) gd.getNextNumber();
			this.rig_batch_adjust_rig =       (int) gd.getNextNumber();
			this.rig_batch_adjust_main_gt =   (int) gd.getNextNumber();
			this.rig_batch_adjust_aux_gt =    (int) gd.getNextNumber();
			this.rig_batch_adjust_rig_gt =    (int) gd.getNextNumber();
    		this.clt_batch_apply_man=    gd.getNextBoolean(); // 21
    		this.clt_batch_extrinsic=    gd.getNextBoolean(); // 22
    		this.clt_batch_poly=         gd.getNextBoolean(); // 23
@@ -2610,6 +2631,9 @@ public class EyesisCorrectionParameters {
  		public int        lyf_min_samples = 5;       // Minimal number of tiles remaining in the sample
  		public boolean    lyf_norm_center = true;    // Replace samples with a single average with equal weight
  		public double     ly_corr_scale =   1.0;     // Scale calculated correction vector
		public boolean    lyr_filter_ds =   false;   // true;
		public boolean    lyr_filter_lyf =  false;   // ~clt_parameters.lyf_filter, but may be different, now off for a single cameras
  		// old fcorr parameters, reuse?
// 		public int        fcorr_sample_size = 32;    // Use square this size side to detect outliers
@@ -2965,7 +2989,7 @@ public class EyesisCorrectionParameters {
  		// comparing merge quality for plane pairs
  		public double     plCostDist           =   4.0;  // Disparity (pix) - closer cost will use more of the real world, farther - disparity
  		public double     plCostKrq            =   0.8;  // Cost of merge quality sqrt(weighted*equal) in disparity space
  		public double     plCostKrqEq          =   0.2;  // Cost of merge quality averaje of weighted and equal weight in disparity space
  		public double     plCostKrqEq          =   0.2;  // Cost of merge quality average of weighted and equal weight in disparity space
  		public double     plCostWrq            =   0.8;  // Cost of merge quality sqrt(weighted*equal) in world space
  		public double     plCostWrqEq          =   0.2;  // Cost of merge quality average of weighted and equal weight in world space
  		public double     plCostSin2           =  10.0;  // Cost of sin squared between normals
@@ -3323,6 +3347,9 @@ public class EyesisCorrectionParameters {
			properties.setProperty(prefix+"lyf_norm_center",  this.lyf_norm_center+"");
			properties.setProperty(prefix+"ly_corr_scale",    this.ly_corr_scale +"");
			properties.setProperty(prefix+"lyr_filter_ds",    this.lyr_filter_ds +"");
			properties.setProperty(prefix+"lyr_filter_lyf",   this.lyr_filter_lyf +"");
			properties.setProperty(prefix+"corr_magic_scale", this.corr_magic_scale +"");
			properties.setProperty(prefix+"corr_select",      this.corr_select +"");
@@ -3986,6 +4013,9 @@ public class EyesisCorrectionParameters {
  			if (properties.getProperty(prefix+"lyf_norm_center")!=null)   this.lyf_norm_center=Boolean.parseBoolean(properties.getProperty(prefix+"lyf_norm_center"));
			if (properties.getProperty(prefix+"ly_corr_scale")!=null)     this.ly_corr_scale=Double.parseDouble(properties.getProperty(prefix+"ly_corr_scale"));
  			if (properties.getProperty(prefix+"lyr_filter_ds")!=null)     this.lyr_filter_ds=Boolean.parseBoolean(properties.getProperty(prefix+"lyr_filter_ds"));
  			if (properties.getProperty(prefix+"lyr_filter_lyf")!=null)    this.lyr_filter_lyf=Boolean.parseBoolean(properties.getProperty(prefix+"lyr_filter_lyf"));
  			if (properties.getProperty(prefix+"corr_magic_scale")!=null)  this.corr_magic_scale=Double.parseDouble(properties.getProperty(prefix+"corr_magic_scale"));
  			if (properties.getProperty(prefix+"corr_select")!=null)       this.corr_select=Integer.parseInt(properties.getProperty(prefix+"corr_select"));
@@ -4690,7 +4720,14 @@ public class EyesisCorrectionParameters {
			gd.addNumericField("Minimal number of tiles remaining in the sample",                         this.lyf_min_samples,  0);
  			gd.addCheckbox    ("Replace samples with a single average with equal weight",                 this.lyf_norm_center);
			gd.addNumericField("Scale calculated correction vector",                                      this.ly_corr_scale,  3);
  			gd.addMessage     ("---");
  			gd.addMessage     ("--- Parameters specific to LY adjustments with dual-camera rig data (as ground truth ---");
  			gd.addCheckbox    ("Use samples filter with rig data",                                        this.lyr_filter_ds,
  					"Raw measured data may not need filtering when ground truth disparity is available");
  			gd.addCheckbox    ("Filter lazy eye pairs by their values wen GT data is available",          this.lyr_filter_lyf,
  					"Same as \"Filter lazy eye pairs by their values\" above, but for the rig-guided adjustments");
//  			gd.addNumericField("Use square this size side to detect outliers",                            this.fcorr_sample_size,  0);
//  			gd.addNumericField("Keep tiles only if there are more in each square",                        this.fcorr_mintiles,     0);
//  			gd.addNumericField("Remove this fraction of tiles from each sample",                          this.fcorr_reloutliers,  3);
@@ -5090,7 +5127,7 @@ public class EyesisCorrectionParameters {
  			gd.addMessage     ("--- Planes merge costs ---");
  			gd.addNumericField(" Disparity (pix) - closer cost will use more of the real world, farther - disparity",this.plCostDist,  6);
  			gd.addNumericField("Cost of merge quality sqrt(weighted*equal) in disparity space",                this.plCostKrq,     6);
  			gd.addNumericField("Cost of merge quality averaje of weighted and equal weight in disparity space",this.plCostKrqEq,   6);
  			gd.addNumericField("Cost of merge quality average of weighted and equal weight in disparity space",this.plCostKrqEq,   6);
  			gd.addNumericField("Cost of merge quality sqrt(weighted*equal) in world space",                    this.plCostWrq,     6);
  			gd.addNumericField("Cost of merge quality average of weighted and equal weight in world space",    this.plCostWrqEq,   6);
  			gd.addNumericField("Cost of sin squared between normals",                                          this.plCostSin2,    6);
@@ -5438,6 +5475,10 @@ public class EyesisCorrectionParameters {
			this.lyf_min_samples= (int) gd.getNextNumber();
  			this.lyf_norm_center=       gd.getNextBoolean();
			this.ly_corr_scale=         gd.getNextNumber();
  			this.lyr_filter_ds=         gd.getNextBoolean();
  			this.lyr_filter_lyf=        gd.getNextBoolean();
//  			this.fcorr_sample_size= (int)gd.getNextNumber();
//  			this.fcorr_mintiles= (int)  gd.getNextNumber();
//  			this.fcorr_reloutliers=     gd.getNextNumber();
+75 −21
Original line number Diff line number Diff line
@@ -570,7 +570,7 @@ private Panel panel1,
			addButton("CLT batch process",          panelClt3, color_process);
			addButton("CM Test",                    panelClt3, color_stop);
			addButton("Show scan",                  panelClt3, color_configure);

			addButton("Show all scans",             panelClt3, color_configure);
			add(panelClt3);
		}

@@ -4480,6 +4480,10 @@ private Panel panel1,
    	showScan();
        return;
/* ======================================================================== */
    } else if (label.equals("Show all scans")) {
    	showAllScans();
        return;
/* ======================================================================== */

    } else if (label.equals("Import Aux")) {
    	importAux();
@@ -5944,8 +5948,6 @@ private Panel panel1,
        }
	}



	public boolean getDCTShiftwDialog(double [] shiftXY) {
		GenericDialog gd = new GenericDialog("Set DCT shift");
		gd.addNumericField("X-shift",                                   shiftXY[0],     2); //2
@@ -5968,8 +5970,8 @@ private Panel panel1,
			System.out.println(msg);
			return false;
		}
	    int scan_index = 0;
		GenericJTabbedDialog gd = new GenericJTabbedDialog("Set CLT parameters",400,100);
		int scan_index = QUAD_CLT.tp.clt_3d_passes.size()-1;
		GenericJTabbedDialog gd = new GenericJTabbedDialog("Select scan to show",400,100);
		gd.addNumericField("Scan index (0..."+(QUAD_CLT.tp.clt_3d_passes.size()-1),  scan_index, 0, 2, "",
				"Display scan by index");

@@ -5982,6 +5984,58 @@ private Panel panel1,

	}

	public boolean showAllScans() {
		if ((QUAD_CLT == null) || (QUAD_CLT.tp == null) || (QUAD_CLT.tp.clt_3d_passes == null)) {
			String msg = "DSI data is not available. Please run \"CLT 3D\" first";
			IJ.showMessage("Error",msg);
			System.out.println(msg);
			return false;
		}
		int scan_index = 0;
		String [] titles =  QUAD_CLT.tp.getScanTitles();

		GenericJTabbedDialog gd = new GenericJTabbedDialog("Select scan slice to show",400,800);
		gd.addMessage("Select scan types to show");
		gd.addCheckbox("All scans",       true, "Include all types of scans");
		gd.addCheckbox("Measured scans",  false,"Include measured scans");
		gd.addCheckbox("Processed scans", false,"Include processed scans");
		gd.addCheckbox("Combo scans",     false,"Include combo scans");
		gd.addMessage("Select slice to show (only first selected will be shown)");
		for (int i = 0; i < titles.length; i++ ) {
			gd.addCheckbox(i+": "+titles[i], false); // 0
		}

		gd.showDialog();
		if (gd.wasCanceled()) return false;
		boolean all =       gd.getNextBoolean();
		boolean measured =  gd.getNextBoolean();
		boolean processed = gd.getNextBoolean();
		boolean combo =     gd.getNextBoolean();
		boolean [] bslice = new boolean  [titles.length];
		for (int i = 0; i < titles.length;i++) {
			bslice[i] =     gd.getNextBoolean();
		}
		int slice =-1;
		for (int i = 0; i < bslice.length; i++) if (bslice[i]) {
			slice = i;
			break;
		}

		if (slice < 0) {
			System.out.println("Slice not selected");
			return false;
		}
		QUAD_CLT.tp.showAllScans(
				"SCANS",   // String  title,
				slice,     // int     slice,
				all,       // boolean all,
				measured,  // boolean measured,
				processed, // boolean processed,
				combo);    // boolean combo);
		return true;
	}


  public boolean cm_test() {
	    double hsize_x = 1.5;
	    double hsize_y = 1.5;
+3 −3
Original line number Diff line number Diff line
@@ -610,8 +610,8 @@ public class GeometryCorrection {
					diff_x, // used only with target_disparity == 0
					diff_y,
					target_disparity);
			if (debugLevel>-1) {
				System.out.println("getRigCorrection(): Current RMS = "+rms);
			if (debugLevel>-4) {
				System.out.println("getRigCorrection(): Current RMS = "+rms+ "(debugLevel= "+debugLevel+")");
			};
			double [][] jt = getJacobianTransposed( // npe
					qc_main.geometryCorrection, // GeometryCorrection gc_main,
@@ -707,7 +707,7 @@ public class GeometryCorrection {
					rXY_aux[i][0] = xc_pix +     Math.cos(aux_roll)*rXY[i][0] + ssr*Math.sin(aux_roll)*rXY[i][1];
					rXY_aux[i][1] = yc_pix - ssr*Math.sin(aux_roll)*rXY[i][0] +     Math.cos(aux_roll)*rXY[i][1];
				}
				if (debugLevel > -2) {
				if (debugLevel > 0) {
					System.out.println("Auxiliary camera offsets per 1 nominal disparity pixel");
					for (int i = 0; i <rXY_aux.length;i++) {
						System.out.println(String.format("Camera %1d x = %8f y = %8f",i,rXY_aux[i][0],rXY_aux[i][1]));
Loading