Commit e24b8d2f authored by Andrey Filippov's avatar Andrey Filippov

Started conversion from quad-camera configuration

parent 3c58184f
...@@ -70,6 +70,7 @@ import java.util.concurrent.CopyOnWriteArrayList; ...@@ -70,6 +70,7 @@ import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
import com.elphel.imagej.tileprocessor.CorrVector;
import com.elphel.imagej.tileprocessor.DttRad2; import com.elphel.imagej.tileprocessor.DttRad2;
import com.elphel.imagej.tileprocessor.GeometryCorrection; import com.elphel.imagej.tileprocessor.GeometryCorrection;
import com.elphel.imagej.tileprocessor.ImageDtt; import com.elphel.imagej.tileprocessor.ImageDtt;
...@@ -93,6 +94,7 @@ import jcuda.nvrtc.JNvrtc; ...@@ -93,6 +94,7 @@ import jcuda.nvrtc.JNvrtc;
import jcuda.nvrtc.nvrtcProgram; import jcuda.nvrtc.nvrtcProgram;
public class GPUTileProcessor { public class GPUTileProcessor {
static int CORR_VECTOR_MAX_LENGTH =19; // TODO: update to fit for 16-sensor
String LIBRARY_PATH = "/usr/local/cuda/targets/x86_64-linux/lib/libcudadevrt.a"; // linux String LIBRARY_PATH = "/usr/local/cuda/targets/x86_64-linux/lib/libcudadevrt.a"; // linux
static String GPU_RESOURCE_DIR = "kernels"; static String GPU_RESOURCE_DIR = "kernels";
static String [] GPU_KERNEL_FILES = {"dtt8x8.cuh","TileProcessor.cuh"}; static String [] GPU_KERNEL_FILES = {"dtt8x8.cuh","TileProcessor.cuh"};
...@@ -799,7 +801,9 @@ public class GPUTileProcessor { ...@@ -799,7 +801,9 @@ public class GPUTileProcessor {
cuMemAlloc(gpu_geometry_correction, GeometryCorrection.arrayLength(num_cams) * Sizeof.FLOAT); cuMemAlloc(gpu_geometry_correction, GeometryCorrection.arrayLength(num_cams) * Sizeof.FLOAT);
cuMemAlloc(gpu_rByRDist, RBYRDIST_LEN * Sizeof.FLOAT); cuMemAlloc(gpu_rByRDist, RBYRDIST_LEN * Sizeof.FLOAT);
cuMemAlloc(gpu_rot_deriv, 5*num_cams*3*3 * Sizeof.FLOAT); cuMemAlloc(gpu_rot_deriv, 5*num_cams*3*3 * Sizeof.FLOAT);
cuMemAlloc(gpu_correction_vector, GeometryCorrection.CorrVector.LENGTH * Sizeof.FLOAT); // cuMemAlloc(gpu_correction_vector, CorrVector.LENGTH * Sizeof.FLOAT);
cuMemAlloc(gpu_correction_vector, CORR_VECTOR_MAX_LENGTH * Sizeof.FLOAT); // update CORR_VECTOR_LENGTH to fit
// Set task array // Set task array
cuMemAlloc(gpu_tasks, tilesX * tilesY * TPTASK_SIZE * Sizeof.FLOAT); cuMemAlloc(gpu_tasks, tilesX * tilesY * TPTASK_SIZE * Sizeof.FLOAT);
...@@ -947,7 +951,7 @@ public class GPUTileProcessor { ...@@ -947,7 +951,7 @@ public class GPUTileProcessor {
* Copy extrinsic correction vector to the GPU memory * Copy extrinsic correction vector to the GPU memory
* @param cv correction vector * @param cv correction vector
*/ */
public void setExtrinsicsVector(GeometryCorrection.CorrVector cv) { public void setExtrinsicsVector(CorrVector cv) {
double [] dcv = cv.toFullRollArray(); double [] dcv = cv.toFullRollArray();
float [] fcv = new float [dcv.length]; float [] fcv = new float [dcv.length];
for (int i = 0; i < dcv.length; i++) { for (int i = 0; i < dcv.length; i++) {
......
...@@ -172,7 +172,7 @@ public class ElphelJp4Reader extends ImageIOReader{ ...@@ -172,7 +172,7 @@ public class ElphelJp4Reader extends ImageIOReader{
try { try {
url = new URL(id); url = new URL(id);
} catch (MalformedURLException e) { } catch (MalformedURLException e) {
LOGGER.warn("Bad URL1: " + id); // LOGGER.warn("Bad URL1: " + id); // will try direct file, not an error
} }
if (url != null) { if (url != null) {
LOGGER.debug("Starting initFile() method, read "+ id +" to memory first"); LOGGER.debug("Starting initFile() method, read "+ id +" to memory first");
......
...@@ -30,7 +30,7 @@ import com.elphel.imagej.common.DoubleGaussianBlur; ...@@ -30,7 +30,7 @@ import com.elphel.imagej.common.DoubleGaussianBlur;
import com.elphel.imagej.common.PolynomialApproximation; import com.elphel.imagej.common.PolynomialApproximation;
import com.elphel.imagej.common.ShowDoubleFloatArrays; import com.elphel.imagej.common.ShowDoubleFloatArrays;
//import GeometryCorrection.CorrVector; //import CorrVector;
import Jama.Matrix; import Jama.Matrix;
import ij.ImagePlus; import ij.ImagePlus;
import ij.ImageStack; import ij.ImageStack;
...@@ -2363,7 +2363,7 @@ B = |+dy0 -dy1 -2*dy3 | ...@@ -2363,7 +2363,7 @@ B = |+dy0 -dy1 -2*dy3 |
int solveCorr_debug = ((clt_parameters.lym_iter == 1) && (clt_parameters.ly_par_sel != 0))? 2 : debugLevel; int solveCorr_debug = ((clt_parameters.lym_iter == 1) && (clt_parameters.ly_par_sel != 0))? 2 : debugLevel;
GeometryCorrection.CorrVector corr_vector = solveCorr ( CorrVector corr_vector = solveCorr (
clt_parameters.lylw_inf_en, // boolean use_disparity, // if true will ignore disparity data even if available (was false) clt_parameters.lylw_inf_en, // boolean use_disparity, // if true will ignore disparity data even if available (was false)
clt_parameters.lylw_aztilt_en,// boolean use_aztilts, // Adjust azimuths and tilts excluding disparity clt_parameters.lylw_aztilt_en,// boolean use_aztilts, // Adjust azimuths and tilts excluding disparity
clt_parameters.lylw_diff_roll_en,// boolean use_diff_rolls, // Adjust differential rolls (3 of 4 angles) clt_parameters.lylw_diff_roll_en,// boolean use_diff_rolls, // Adjust differential rolls (3 of 4 angles)
...@@ -2373,7 +2373,7 @@ B = |+dy0 -dy1 -2*dy3 | ...@@ -2373,7 +2373,7 @@ B = |+dy0 -dy1 -2*dy3 |
clt_parameters.lylw_par_sel, // int manual_par_sel, // Manually select the parameter mask bit 0 - sym0, bit1 - sym1, ... (0 - use boolean flags, != 0 - ignore boolean flags) clt_parameters.lylw_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, mismatch_list, // ArrayList<Mismatch> mismatch_list,
qc.geometryCorrection, // GeometryCorrection geometryCorrection, qc.geometryCorrection, // GeometryCorrection geometryCorrection,
qc.geometryCorrection.getCorrVector(), // GeometryCorrection.CorrVector corr_vector, qc.geometryCorrection.getCorrVector(), // CorrVector corr_vector,
old_new_rms, // double [] old_new_rms, // should be double[2] old_new_rms, // double [] old_new_rms, // should be double[2]
// 2); // debugLevel); // 2); // 1); // int debugLevel) // 2); // debugLevel); // 2); // 1); // int debugLevel)
solveCorr_debug); // debugLevel); // 2); // 1); // int debugLevel) solveCorr_debug); // debugLevel); // 2); // 1); // int debugLevel)
...@@ -2926,7 +2926,7 @@ B = |+dy0 -dy1 -2*dy3 | ...@@ -2926,7 +2926,7 @@ B = |+dy0 -dy1 -2*dy3 |
double [] old_new_rms = new double[1]; double [] old_new_rms = new double[1];
boolean apply_extrinsic = true; boolean apply_extrinsic = true;
int solveCorr_debug = ((clt_parameters.lym_iter == 1) && (clt_parameters.ly_par_sel != 0))? 2 : debugLevel; int solveCorr_debug = ((clt_parameters.lym_iter == 1) && (clt_parameters.ly_par_sel != 0))? 2 : debugLevel;
GeometryCorrection.CorrVector corr_vector = solveCorr ( CorrVector corr_vector = solveCorr (
clt_parameters.lylw_inf_en, // boolean use_disparity, // if true will ignore disparity data even if available (was false) clt_parameters.lylw_inf_en, // boolean use_disparity, // if true will ignore disparity data even if available (was false)
clt_parameters.lylw_aztilt_en,// boolean use_aztilts, // Adjust azimuths and tilts excluding disparity clt_parameters.lylw_aztilt_en,// boolean use_aztilts, // Adjust azimuths and tilts excluding disparity
clt_parameters.lylw_diff_roll_en,// boolean use_diff_rolls, // Adjust differential rolls (3 of 4 angles) clt_parameters.lylw_diff_roll_en,// boolean use_diff_rolls, // Adjust differential rolls (3 of 4 angles)
...@@ -2937,7 +2937,7 @@ B = |+dy0 -dy1 -2*dy3 | ...@@ -2937,7 +2937,7 @@ B = |+dy0 -dy1 -2*dy3 |
mismatch_list, // ArrayList<Mismatch> mismatch_list, mismatch_list, // ArrayList<Mismatch> mismatch_list,
qc.geometryCorrection, // GeometryCorrection geometryCorrection, qc.geometryCorrection, // GeometryCorrection geometryCorrection,
/// geometryCorrection_main, // GeometryCorrection geometryCorrection_main, // if is aux camera using main cameras' coordinates. Disparity is still in aux camera pixels /// 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, qc.geometryCorrection.getCorrVector(), // CorrVector corr_vector,
old_new_rms, // double [] old_new_rms, // should be double[2] old_new_rms, // double [] old_new_rms, // should be double[2]
// 2); // debugLevel); // 2); // 1); // int debugLevel) // 2); // debugLevel); // 2); // 1); // int debugLevel)
solveCorr_debug); // debugLevel); // 2); // 1); // int debugLevel) solveCorr_debug); // debugLevel); // 2); // 1); // int debugLevel)
...@@ -3063,7 +3063,7 @@ B = |+dy0 -dy1 -2*dy3 | ...@@ -3063,7 +3063,7 @@ B = |+dy0 -dy1 -2*dy3 |
boolean [] par_mask, boolean [] par_mask,
ArrayList<Mismatch> mismatch_list, ArrayList<Mismatch> mismatch_list,
GeometryCorrection geometryCorrection, GeometryCorrection geometryCorrection,
GeometryCorrection.CorrVector corr_vector, CorrVector corr_vector,
int debugLevel) int debugLevel)
{ {
boolean dbg_images = debugLevel>1; boolean dbg_images = debugLevel>1;
...@@ -3214,7 +3214,7 @@ B = |+dy0 -dy1 -2*dy3 | ...@@ -3214,7 +3214,7 @@ B = |+dy0 -dy1 -2*dy3 |
boolean [] par_mask, boolean [] par_mask,
ArrayList<Mismatch> mismatch_list, ArrayList<Mismatch> mismatch_list,
GeometryCorrection geometryCorrection, GeometryCorrection geometryCorrection,
GeometryCorrection.CorrVector corr_vector, CorrVector corr_vector,
int debugLevel) int debugLevel)
{ {
int num_pars = 0; int num_pars = 0;
...@@ -3227,8 +3227,8 @@ B = |+dy0 -dy1 -2*dy3 | ...@@ -3227,8 +3227,8 @@ B = |+dy0 -dy1 -2*dy3 |
double [] sym_par_m = sym_par_0.clone(); double [] sym_par_m = sym_par_0.clone();
sym_par_p[sym_par] += 0.5 * delta; sym_par_p[sym_par] += 0.5 * delta;
sym_par_m[sym_par] -= 0.5 * delta; sym_par_m[sym_par] -= 0.5 * delta;
GeometryCorrection.CorrVector corr_p = geometryCorrection.getCorrVector(sym_par_p, par_mask); CorrVector corr_p = geometryCorrection.getCorrVector(sym_par_p, par_mask);
GeometryCorrection.CorrVector corr_m = geometryCorrection.getCorrVector(sym_par_m, par_mask); CorrVector corr_m = geometryCorrection.getCorrVector(sym_par_m, par_mask);
double [] mv_p = debug_mv_from_sym( double [] mv_p = debug_mv_from_sym(
mismatch_list, mismatch_list,
geometryCorrection, geometryCorrection,
...@@ -3261,7 +3261,7 @@ B = |+dy0 -dy1 -2*dy3 | ...@@ -3261,7 +3261,7 @@ B = |+dy0 -dy1 -2*dy3 |
// boolean [] par_mask, // boolean [] par_mask,
ArrayList<Mismatch> mismatch_list, ArrayList<Mismatch> mismatch_list,
GeometryCorrection geometryCorrection, GeometryCorrection geometryCorrection,
GeometryCorrection.CorrVector corr_vector, CorrVector corr_vector,
int debugLevel) int debugLevel)
{ {
double [][] dMismatch_dXY = (new Mismatch()).get_dMismatch_dXY(); // just a static array double [][] dMismatch_dXY = (new Mismatch()).get_dMismatch_dXY(); // just a static array
...@@ -3463,7 +3463,7 @@ B = |+dy0 -dy1 -2*dy3 | ...@@ -3463,7 +3463,7 @@ B = |+dy0 -dy1 -2*dy3 |
return w; return w;
} }
public GeometryCorrection.CorrVector solveCorr ( public CorrVector solveCorr (
boolean use_disparity, // adjust disparity-related extrinsics boolean use_disparity, // adjust disparity-related extrinsics
boolean use_aztilts, // Adjust azimuths and tilts excluding disparity boolean use_aztilts, // Adjust azimuths and tilts excluding disparity
boolean use_diff_rolls, // Adjust differential rolls (3 of 4 angles) boolean use_diff_rolls, // Adjust differential rolls (3 of 4 angles)
...@@ -3474,7 +3474,7 @@ B = |+dy0 -dy1 -2*dy3 | ...@@ -3474,7 +3474,7 @@ B = |+dy0 -dy1 -2*dy3 |
int manual_par_sel, // Manually select the parameter mask bit 0 - sym0, bit1 - sym1, ... (0 - use boolean flags, != 0 - ignore boolean flags) 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, ArrayList<Mismatch> mismatch_list,
GeometryCorrection geometryCorrection, GeometryCorrection geometryCorrection,
GeometryCorrection.CorrVector corr_vector, CorrVector corr_vector,
double [] old_new_rms, // should be double[2] double [] old_new_rms, // should be double[2]
int debugLevel) int debugLevel)
{ {
...@@ -3502,7 +3502,7 @@ B = |+dy0 -dy1 -2*dy3 | ...@@ -3502,7 +3502,7 @@ B = |+dy0 -dy1 -2*dy3 |
par_mask, // boolean [] par_mask, par_mask, // boolean [] par_mask,
mismatch_list, // ArrayList<Mismatch> mismatch_list, mismatch_list, // ArrayList<Mismatch> mismatch_list,
geometryCorrection, // GeometryCorrection geometryCorrection, geometryCorrection, // GeometryCorrection geometryCorrection,
corr_vector, // GeometryCorrection.CorrVector corr_vector) corr_vector, // CorrVector corr_vector)
debugLevel); // int debugLevel) debugLevel); // int debugLevel)
// debugLevel = 2; // debugLevel = 2;
...@@ -3558,7 +3558,7 @@ B = |+dy0 -dy1 -2*dy3 | ...@@ -3558,7 +3558,7 @@ B = |+dy0 -dy1 -2*dy3 |
par_mask, // boolean [] par_mask, par_mask, // boolean [] par_mask,
mismatch_list, // ArrayList<Mismatch> mismatch_list, mismatch_list, // ArrayList<Mismatch> mismatch_list,
geometryCorrection, // GeometryCorrection geometryCorrection, geometryCorrection, // GeometryCorrection geometryCorrection,
corr_vector, // GeometryCorrection.CorrVector corr_vector) corr_vector, // CorrVector corr_vector)
debugLevel); // int debugLevel) debugLevel); // int debugLevel)
dbg_xy = doubleNaN(dbg_titles_xy.length, dbg_length); // jacobian dmv/dsym dbg_xy = doubleNaN(dbg_titles_xy.length, dbg_length); // jacobian dmv/dsym
...@@ -3630,7 +3630,7 @@ B = |+dy0 -dy1 -2*dy3 | ...@@ -3630,7 +3630,7 @@ B = |+dy0 -dy1 -2*dy3 |
} }
//if (par_mask[0]) drslt[0] *= -1.0; //FIXME: Find actual bug, sym[0] corrects in opposite way //if (par_mask[0]) drslt[0] *= -1.0; //FIXME: Find actual bug, sym[0] corrects in opposite way
GeometryCorrection.CorrVector rslt = geometryCorrection.getCorrVector(drslt, par_mask); CorrVector rslt = geometryCorrection.getCorrVector(drslt, par_mask);
if (debugLevel > -3){ // change to >0) { if (debugLevel > -3){ // change to >0) {
System.out.println("solveCorr() rslt (increment):"); System.out.println("solveCorr() rslt (increment):");
System.out.println(rslt.toString()); System.out.println(rslt.toString());
......
This diff is collapsed.
...@@ -668,7 +668,9 @@ public class ErsCorrection extends GeometryCorrection { ...@@ -668,7 +668,9 @@ public class ErsCorrection extends GeometryCorrection {
XYZ_he = gc.XYZ_he; // all cameras coordinates transformed to eliminate heading and elevation (rolls preserved) XYZ_he = gc.XYZ_he; // all cameras coordinates transformed to eliminate heading and elevation (rolls preserved)
XYZ_her = gc.XYZ_her; // = null; // XYZ of the lenses in a corrected CCS (adjusted for to elevation, heading, common_roll) XYZ_her = gc.XYZ_her; // = null; // XYZ of the lenses in a corrected CCS (adjusted for to elevation, heading, common_roll)
rXY = gc.rXY; // = null; // XY pairs of the in a normal plane, relative to disparityRadius rXY = gc.rXY; // = null; // XY pairs of the in a normal plane, relative to disparityRadius
rXY_ideal = gc.rXY_ideal; // = {{-0.5, -0.5}, {0.5,-0.5}, {-0.5, 0.5}, {0.5,0.5}};
// rXY_ideal = gc.rXY_ideal; // = {{-0.5, -0.5}, {0.5,-0.5}, {-0.5, 0.5}, {0.5,0.5}};
set_rXY_ideal(gc.get_rXY_ideal()); //)
cameraRadius = gc.cameraRadius; // =0; // average distance from the "mass center" of the sensors to the sensors cameraRadius = gc.cameraRadius; // =0; // average distance from the "mass center" of the sensors to the sensors
disparityRadius = gc.disparityRadius; // 150.0; // distance between cameras to normalize disparity units to. sqrt(2)*disparityRadius for quad camera (~=150mm)? disparityRadius = gc.disparityRadius; // 150.0; // distance between cameras to normalize disparity units to. sqrt(2)*disparityRadius for quad camera (~=150mm)?
rByRDist = gc.rByRDist; // =null; rByRDist = gc.rByRDist; // =null;
...@@ -689,7 +691,8 @@ public class ErsCorrection extends GeometryCorrection { ...@@ -689,7 +691,8 @@ public class ErsCorrection extends GeometryCorrection {
XYZ_he = clone2d(XYZ_he); XYZ_he = clone2d(XYZ_he);
XYZ_her = clone2d(XYZ_her); XYZ_her = clone2d(XYZ_her);
rXY = clone2d(rXY); rXY = clone2d(rXY);
rXY_ideal = clone2d(rXY_ideal); // rXY_ideal = clone2d(rXY_ideal);
set_rXY_ideal(clone2d(gc.get_rXY_ideal())); //)
rByRDist = clone1d(rByRDist); // probably it is not needed rByRDist = clone1d(rByRDist); // probably it is not needed
extrinsic_corr = extrinsic_corr.clone(); extrinsic_corr = extrinsic_corr.clone();
if (rigOffset!=null) rigOffset = rigOffset.clone(); if (rigOffset!=null) rigOffset = rigOffset.clone();
......
...@@ -67,7 +67,7 @@ public class ExtrinsicAdjustment { ...@@ -67,7 +67,7 @@ public class ExtrinsicAdjustment {
private boolean [] force_disparity = null; // boolean [] force_disparity, // same dimension as dsdn, true if disparity should be controlled private boolean [] force_disparity = null; // boolean [] force_disparity, // same dimension as dsdn, true if disparity should be controlled
private double pure_weight; // weight of samples only private double pure_weight; // weight of samples only
// private double [] values; // private double [] values;
private GeometryCorrection.CorrVector corr_vector = null; private CorrVector corr_vector = null;
private boolean [] par_mask = null; private boolean [] par_mask = null;
private boolean use_rig_offsets = false; private boolean use_rig_offsets = false;
private double [][] measured_dsxy = null; private double [][] measured_dsxy = null;
...@@ -217,7 +217,7 @@ public class ExtrinsicAdjustment { ...@@ -217,7 +217,7 @@ public class ExtrinsicAdjustment {
titles); titles);
} }
public GeometryCorrection.CorrVector solveCorr ( public CorrVector solveCorr (
double marg_fract, // part of half-width, and half-height to reduce weights double marg_fract, // part of half-width, and half-height to reduce weights
boolean use_disparity, // adjust disparity-related extrinsics boolean use_disparity, // adjust disparity-related extrinsics
double inf_min_disparity, // minimal disparity for infinity (from average, possibly tilted) double inf_min_disparity, // minimal disparity for infinity (from average, possibly tilted)
...@@ -256,7 +256,7 @@ public class ExtrinsicAdjustment { ...@@ -256,7 +256,7 @@ public class ExtrinsicAdjustment {
double [][] measured_dsxy_in, // double [][] measured_dsxy_in, //
boolean [] force_disparity_in, // boolean [] force_disparity, boolean [] force_disparity_in, // boolean [] force_disparity,
boolean use_main, // corr_rots_aux != null; boolean use_main, // corr_rots_aux != null;
GeometryCorrection.CorrVector corr_vector_meas, CorrVector corr_vector_meas,
double [] old_new_rms, // should be double[2] double [] old_new_rms, // should be double[2]
int debugLevel) int debugLevel)
{ {
...@@ -456,7 +456,7 @@ public class ExtrinsicAdjustment { ...@@ -456,7 +456,7 @@ public class ExtrinsicAdjustment {
private double [][] getXYNondistorted( private double [][] getXYNondistorted(
GeometryCorrection.CorrVector corr_vector, CorrVector corr_vector,
boolean set_dydisp){ boolean set_dydisp){
int clusters =clustersX * clustersY; int clusters =clustersX * clustersY;
Matrix [] corr_rots = corr_vector.getRotMatrices(); // get array of per-sensor rotation matrices Matrix [] corr_rots = corr_vector.getRotMatrices(); // get array of per-sensor rotation matrices
...@@ -1347,7 +1347,7 @@ public class ExtrinsicAdjustment { ...@@ -1347,7 +1347,7 @@ public class ExtrinsicAdjustment {
} }
private double [] getFx( private double [] getFx(
GeometryCorrection.CorrVector corr_vector) CorrVector corr_vector)
{ {
int clusters = clustersX * clustersY; int clusters = clustersX * clustersY;
Matrix [] corr_rots = corr_vector.getRotMatrices(); // get array of per-sensor rotation matrices Matrix [] corr_rots = corr_vector.getRotMatrices(); // get array of per-sensor rotation matrices
...@@ -1383,7 +1383,7 @@ public class ExtrinsicAdjustment { ...@@ -1383,7 +1383,7 @@ public class ExtrinsicAdjustment {
} }
private double [][] getJacobianTransposed( private double [][] getJacobianTransposed(
GeometryCorrection.CorrVector corr_vector, CorrVector corr_vector,
double delta){ double delta){
int clusters = clustersX * clustersY; int clusters = clustersX * clustersY;
int num_pars = getNumPars(); int num_pars = getNumPars();
...@@ -1392,9 +1392,9 @@ public class ExtrinsicAdjustment { ...@@ -1392,9 +1392,9 @@ public class ExtrinsicAdjustment {
for (int par = 0; par < num_pars; par++) { for (int par = 0; par < num_pars; par++) {
double [] pars = new double[num_pars]; double [] pars = new double[num_pars];
pars[par] = delta; pars[par] = delta;
GeometryCorrection.CorrVector corr_delta = geometryCorrection.getCorrVector(pars, par_mask); CorrVector corr_delta = geometryCorrection.getCorrVector(pars, par_mask);
GeometryCorrection.CorrVector corr_vectorp = corr_vector.clone(); CorrVector corr_vectorp = corr_vector.clone();
GeometryCorrection.CorrVector corr_vectorm = corr_vector.clone(); CorrVector corr_vectorm = corr_vector.clone();
corr_vectorp.incrementVector(corr_delta, 0.5); corr_vectorp.incrementVector(corr_delta, 0.5);
corr_vectorm.incrementVector(corr_delta, -0.5); corr_vectorm.incrementVector(corr_delta, -0.5);
double [] fx_p = getFx(corr_vectorp); double [] fx_p = getFx(corr_vectorp);
...@@ -1440,7 +1440,7 @@ public class ExtrinsicAdjustment { ...@@ -1440,7 +1440,7 @@ public class ExtrinsicAdjustment {
private double dbgJacobians( private double dbgJacobians(
GeometryCorrection.CorrVector corr_vector, CorrVector corr_vector,
double delta, double delta,
boolean graphic) { boolean graphic) {
// delta *= 0.1; // delta *= 0.1;
...@@ -1609,7 +1609,7 @@ public class ExtrinsicAdjustment { ...@@ -1609,7 +1609,7 @@ public class ExtrinsicAdjustment {
double max_reasonable = 100.0; double max_reasonable = 100.0;
double [][] ers_tilt_az = getMovingObjects( // will output null if ERS tilt or roll are disabled double [][] ers_tilt_az = getMovingObjects( // will output null if ERS tilt or roll are disabled
corr_vector, // GeometryCorrection.CorrVector corr_vector, corr_vector, // CorrVector corr_vector,
null ); // double [] fx null ); // double [] fx
boolean [] moving_maybe = null; boolean [] moving_maybe = null;
if (ers_tilt_az != null) { if (ers_tilt_az != null) {
...@@ -1716,11 +1716,11 @@ public class ExtrinsicAdjustment { ...@@ -1716,11 +1716,11 @@ public class ExtrinsicAdjustment {
private double [][] getMovingObjects( private double [][] getMovingObjects(
GeometryCorrection.CorrVector corr_vector, CorrVector corr_vector,
double [] fx // or null; double [] fx // or null;
) { ) {
int ers_tilt_index = getParIndex(GeometryCorrection.CorrVector.IMU_INDEX); int ers_tilt_index = getParIndex(corr_vector. getIMUIndex());
int ers_azimuth_index = getParIndex(GeometryCorrection.CorrVector.IMU_INDEX + 1); int ers_azimuth_index = getParIndex(corr_vector. getIMUIndex() + 1);
if ((ers_tilt_index < 0) || (ers_azimuth_index < 0)) { if ((ers_tilt_index < 0) || (ers_azimuth_index < 0)) {
return null; return null;
} }
...@@ -1965,7 +1965,7 @@ public class ExtrinsicAdjustment { ...@@ -1965,7 +1965,7 @@ public class ExtrinsicAdjustment {
private void dbgXY( private void dbgXY(
GeometryCorrection.CorrVector corr_vector, CorrVector corr_vector,
String title) { String title) {
int gap = 10; //pix int gap = 10; //pix
int clusters = clustersX * clustersY; int clusters = clustersX * clustersY;
...@@ -2019,7 +2019,7 @@ public class ExtrinsicAdjustment { ...@@ -2019,7 +2019,7 @@ public class ExtrinsicAdjustment {
private double [][] getJacobianTransposed( private double [][] getJacobianTransposed(
GeometryCorrection.CorrVector corr_vector) CorrVector corr_vector)
{ {
if (dbg_delta > 0.0) { if (dbg_delta > 0.0) {
return getJacobianTransposed(corr_vector, dbg_delta); // running LMA with delta return getJacobianTransposed(corr_vector, dbg_delta); // running LMA with delta
...@@ -2195,7 +2195,7 @@ public class ExtrinsicAdjustment { ...@@ -2195,7 +2195,7 @@ public class ExtrinsicAdjustment {
// TODO: Restore/implement // TODO: Restore/implement
if (debug_level > 3) { if (debug_level > 3) {
dbgJacobians( dbgJacobians(
corr_vector, // GeometryCorrection.CorrVector corr_vector, corr_vector, // CorrVector corr_vector,
1E-5, // double delta, 1E-5, // double delta,
true); //boolean graphic) true); //boolean graphic)
} }
...@@ -2251,9 +2251,9 @@ public class ExtrinsicAdjustment { ...@@ -2251,9 +2251,9 @@ public class ExtrinsicAdjustment {
} }
double [] delta = mdelta.getColumnPackedCopy(); double [] delta = mdelta.getColumnPackedCopy();
GeometryCorrection.CorrVector corr_delta = geometryCorrection.getCorrVector(delta, par_mask); CorrVector corr_delta = geometryCorrection.getCorrVector(delta, par_mask);
GeometryCorrection.CorrVector new_vector = this.corr_vector.clone(); CorrVector new_vector = this.corr_vector.clone();
double scale = 1.0; double scale = 1.0;
new_vector.incrementVector(corr_delta, scale); // ok = false if there are nay NaN-s new_vector.incrementVector(corr_delta, scale); // ok = false if there are nay NaN-s
...@@ -2294,7 +2294,7 @@ public class ExtrinsicAdjustment { ...@@ -2294,7 +2294,7 @@ public class ExtrinsicAdjustment {
this.last_rms = getWYmFxRms(this.last_ymfx); // modifies this.last_ymfx this.last_rms = getWYmFxRms(this.last_ymfx); // modifies this.last_ymfx
if (debug_level > 2) { if (debug_level > 2) {
dbgJacobians( dbgJacobians(
corr_vector, // GeometryCorrection.CorrVector corr_vector, corr_vector, // CorrVector corr_vector,
1E-5, // double delta, 1E-5, // double delta,
true); //boolean graphic) true); //boolean graphic)
} }
......
...@@ -543,8 +543,8 @@ public class MLStats { ...@@ -543,8 +543,8 @@ public class MLStats {
null // EyesisCorrectionParameters.CorrectionParameters correctionsParameters null // EyesisCorrectionParameters.CorrectionParameters correctionsParameters
); );
System.out.println(indx+": model:"+model+", version:"+version+", name: "+name); System.out.println(indx+": model:"+model+", version:"+version+", name: "+name);
GeometryCorrection.CorrVector cvm = qcm.geometryCorrection.getCorrVector(); CorrVector cvm = qcm.geometryCorrection.getCorrVector();
GeometryCorrection.CorrVector cva = qca.geometryCorrection.getCorrVector(); CorrVector cva = qca.geometryCorrection.getCorrVector();
*/ */
indx++; indx++;
} }
...@@ -616,9 +616,15 @@ public class MLStats { ...@@ -616,9 +616,15 @@ public class MLStats {
String fmt = "\t"+(inPixels ? "%8.4f":(inMrad?"%8.4f":"%8.2f")); String fmt = "\t"+(inPixels ? "%8.4f":(inMrad?"%8.4f":"%8.2f"));
String fmt_angle = "\t%8.3f"; String fmt_angle = "\t%8.3f";
String fmt_len = "\t%8.3f"; String fmt_len = "\t%8.3f";
int num_sym = showZooms? GeometryCorrection.CorrVector.IMU_INDEX:GeometryCorrection.CorrVector.ZOOM_INDEX; // update // int num_sym = showZooms? CorrVector.IMU_INDEX:CorrVector.ZOOM_INDEX; // update
if (showERS) num_sym = GeometryCorrection.CorrVector.LENGTH; // if (showERS) num_sym = CorrVector.LENGTH;
int num_chn_m = eyesis_corrections_main.getNumChannels();
int num_chn_a = eyesis_corrections_aux.getNumChannels();
int num_sym_m = showZooms? CorrVector.getIMUIndex(num_chn_m):CorrVector.getZoomIndex(num_chn_m);
if (showERS) num_sym_m = CorrVector.getLength(num_chn_m);
int num_sym_a = showZooms? CorrVector.getIMUIndex(num_chn_a):CorrVector.getZoomIndex(num_chn_a);
if (showERS) num_sym_a = CorrVector.getLength(num_chn_a);
//eyesis_corrections_main
class ModVerString{ class ModVerString{
String model; String model;
String version; String version;
...@@ -658,10 +664,10 @@ public class MLStats { ...@@ -658,10 +664,10 @@ public class MLStats {
} }
if (showSym) { if (showSym) {
for (int i = 0; i < num_sym; i++) { for (int i = 0; i < num_sym_m; i++) {
header+=String.format("\tsym%02d-m", i); header+=String.format("\tsym%02d-m", i);
} }
num_col+=num_sym; num_col+=num_sym_m;
} }
if (showAux) { if (showAux) {
...@@ -682,10 +688,10 @@ public class MLStats { ...@@ -682,10 +688,10 @@ public class MLStats {
num_col+=6; num_col+=6;
} }
if (showSym) { if (showSym) {
for (int i = 0; i < num_sym; i++) { for (int i = 0; i < num_sym_a; i++) {
header+=String.format("\tsym%02d-a", i); header+=String.format("\tsym%02d-a", i);
} }
num_col+=num_sym; num_col+=num_sym_a;
} }
} }
if (showRigATR) { if (showRigATR) {
...@@ -753,8 +759,19 @@ public class MLStats { ...@@ -753,8 +759,19 @@ public class MLStats {
null // EyesisCorrectionParameters.CorrectionParameters correctionsParameters null // EyesisCorrectionParameters.CorrectionParameters correctionsParameters
); );
System.out.println(indx+": model:"+model+", version:"+version+", name: "+name); System.out.println(indx+": model:"+model+", version:"+version+", name: "+name);
GeometryCorrection.CorrVector cvm = qcm.geometryCorrection.getCorrVector(); CorrVector cvm = qcm.geometryCorrection.getCorrVector();
GeometryCorrection.CorrVector cva = qca.geometryCorrection.getCorrVector(); CorrVector cva = qca.geometryCorrection.getCorrVector();
int cvm_azimuth_index = cvm.getAzimuthIndex();
int cva_azimuth_index = cva.getAzimuthIndex();
int cvm_tilt_index = cvm.getTiltIndex();
int cva_tilt_index = cva.getTiltIndex();
int cvm_roll_index = cvm.getRollIndex();
int cva_roll_index = cva.getRollIndex();
int cvm_zoom_index = cvm.getZoomIndex();
int cva_zoom_index = cva.getZoomIndex();
int cvm_imu_index = cvm.getIMUIndex();
int cva_imu_index = cva.getIMUIndex();
// double [] vect_main = qcm.geometryCorrection.getCorrVector().toArray(); // double [] vect_main = qcm.geometryCorrection.getCorrVector().toArray();
StringBuffer sb = new StringBuffer(); StringBuffer sb = new StringBuffer();
int ncol = 0; int ncol = 0;
...@@ -764,7 +781,7 @@ public class MLStats { ...@@ -764,7 +781,7 @@ public class MLStats {
double [] v = new double[4]; double [] v = new double[4];
for (int i = 0; i <4; i++) { for (int i = 0; i <4; i++) {
if (i < 3) { if (i < 3) {
v[i] = scale * cvm.getExtrinsicParameterValue(i+GeometryCorrection.CorrVector.AZIMUTH_INDEX, inPixels); v[i] = scale * cvm.getExtrinsicParameterValue(i+cvm_azimuth_index, inPixels); // CorrVector.AZIMUTH_INDEX, inPixels);
v[3] -= v[i]; v[3] -= v[i];
} }
sb.append(String.format(fmt,v[i])); // azimuths sb.append(String.format(fmt,v[i])); // azimuths
...@@ -775,7 +792,7 @@ public class MLStats { ...@@ -775,7 +792,7 @@ public class MLStats {
v = new double[4]; v = new double[4];
for (int i = 0; i <4; i++) { for (int i = 0; i <4; i++) {
if (i < 3) { if (i < 3) {
v[i] = scale * cvm.getExtrinsicParameterValue(i+GeometryCorrection.CorrVector.TILT_INDEX, inPixels); v[i] = scale * cvm.getExtrinsicParameterValue(i+cvm_tilt_index, inPixels); // CorrVector.TILT_INDEX, inPixels);
v[3] -= v[i]; v[3] -= v[i];
} }
sb.append(String.format(fmt,v[i])); // tilts sb.append(String.format(fmt,v[i])); // tilts
...@@ -786,7 +803,7 @@ public class MLStats { ...@@ -786,7 +803,7 @@ public class MLStats {
v = new double[4]; v = new double[4];
for (int i = 0; i <4; i++) { for (int i = 0; i <4; i++) {
if (i < 3) { if (i < 3) {
v[i] = scale * cvm.getExtrinsicParameterValue(i+GeometryCorrection.CorrVector.ROLL_INDEX, inPixels); v[i] = scale * cvm.getExtrinsicParameterValue(i+cvm_roll_index, inPixels); // CorrVector.ROLL_INDEX, inPixels);
v[3] -= v[i]; v[3] -= v[i];
} }
sb.append(String.format(fmt,v[i])); // rolls sb.append(String.format(fmt,v[i])); // rolls
...@@ -799,7 +816,7 @@ public class MLStats { ...@@ -799,7 +816,7 @@ public class MLStats {
double [] v = new double[4]; double [] v = new double[4];
for (int i = 0; i <4; i++) { for (int i = 0; i <4; i++) {
if (i < 3) { if (i < 3) {
v[i] = scale * cvm.getExtrinsicParameterValue(i+GeometryCorrection.CorrVector.ZOOM_INDEX, inPixels); v[i] = scale * cvm.getExtrinsicParameterValue(i+cvm_zoom_index, inPixels); // CorrVector.ZOOM_INDEX, inPixels);
v[3] -= v[i]; v[3] -= v[i];
} }
sb.append(String.format(fmt,v[i])); // zooms sb.append(String.format(fmt,v[i])); // zooms
...@@ -812,7 +829,7 @@ public class MLStats { ...@@ -812,7 +829,7 @@ public class MLStats {
if (showERS) { // main camera if (showERS) { // main camera
double [] v = new double[6]; double [] v = new double[6];
for (int i = 0; i < v.length ; i++) { for (int i = 0; i < v.length ; i++) {
v[i] = scale * cvm.getExtrinsicParameterValue(i+GeometryCorrection.CorrVector.IMU_INDEX, inPixels); v[i] = scale * cvm.getExtrinsicParameterValue(i+cvm_imu_index, inPixels); // CorrVector.IMU_INDEX, inPixels);
sb.append(String.format(fmt,v[i])); // zooms sb.append(String.format(fmt,v[i])); // zooms
fmts [ncol] = fmt; fmts [ncol] = fmt;
stats[ncol ][0]+=v[i]; stats[ncol ][0]+=v[i];
...@@ -821,7 +838,7 @@ public class MLStats { ...@@ -821,7 +838,7 @@ public class MLStats {
} }
if (showSym) { if (showSym) {
for (int i = 0; i < num_sym; i++) { for (int i = 0; i < num_sym_m; i++) {
double v = scale * cvm.getExtrinsicSymParameterValue(i, inPixels); double v = scale * cvm.getExtrinsicSymParameterValue(i, inPixels);
sb.append(String.format(fmt,v)); // sym parameters sb.append(String.format(fmt,v)); // sym parameters
fmts [ncol] = fmt; fmts [ncol] = fmt;
...@@ -835,7 +852,7 @@ public class MLStats { ...@@ -835,7 +852,7 @@ public class MLStats {
double [] v = new double[4]; double [] v = new double[4];
for (int i = 0; i <4; i++) { for (int i = 0; i <4; i++) {
if (i < 3) { if (i < 3) {
v[i] = scale * cva.getExtrinsicParameterValue(i+GeometryCorrection.CorrVector.AZIMUTH_INDEX, inPixels); v[i] = scale * cva.getExtrinsicParameterValue(i+cva_azimuth_index, inPixels); // CorrVector.AZIMUTH_INDEX, inPixels);
v[3] -= v[i]; v[3] -= v[i];
} }
sb.append(String.format(fmt,v[i])); // azimuths sb.append(String.format(fmt,v[i])); // azimuths
...@@ -846,7 +863,7 @@ public class MLStats { ...@@ -846,7 +863,7 @@ public class MLStats {
v = new double[4]; v = new double[4];
for (int i = 0; i <4; i++) { for (int i = 0; i <4; i++) {
if (i < 3) { if (i < 3) {
v[i] = scale * cva.getExtrinsicParameterValue(i+GeometryCorrection.CorrVector.TILT_INDEX, inPixels); v[i] = scale * cva.getExtrinsicParameterValue(i+cva_tilt_index, inPixels); // CorrVector.TILT_INDEX, inPixels);
v[3] -= v[i]; v[3] -= v[i];
} }
sb.append(String.format(fmt,v[i])); // tilts sb.append(String.format(fmt,v[i])); // tilts
...@@ -857,7 +874,7 @@ public class MLStats { ...@@ -857,7 +874,7 @@ public class MLStats {
v = new double[4]; v = new double[4];
for (int i = 0; i <4; i++) { for (int i = 0; i <4; i++) {
if (i < 3) { if (i < 3) {
v[i] = scale * cva.getExtrinsicParameterValue(i+GeometryCorrection.CorrVector.ROLL_INDEX, inPixels); v[i] = scale * cva.getExtrinsicParameterValue(i+cva_roll_index, inPixels); // CorrVector.ROLL_INDEX, inPixels);
v[3] -= v[i]; v[3] -= v[i];
} }
sb.append(String.format(fmt,v[i])); // rolls sb.append(String.format(fmt,v[i])); // rolls
...@@ -870,7 +887,7 @@ public class MLStats { ...@@ -870,7 +887,7 @@ public class MLStats {
double [] v = new double[4]; double [] v = new double[4];
for (int i = 0; i <4; i++) { for (int i = 0; i <4; i++) {
if (i < 3) { if (i < 3) {
v[i] = scale * cva.getExtrinsicParameterValue(i+GeometryCorrection.CorrVector.ZOOM_INDEX, inPixels); v[i] = scale * cva.getExtrinsicParameterValue(i+cva_zoom_index, inPixels); // CorrVector.ZOOM_INDEX, inPixels);
v[3] -= v[i]; v[3] -= v[i];
} }
sb.append(String.format(fmt,v[i])); // zooms sb.append(String.format(fmt,v[i])); // zooms
...@@ -882,7 +899,7 @@ public class MLStats { ...@@ -882,7 +899,7 @@ public class MLStats {
if (showERS) { // main camera if (showERS) { // main camera
double [] v = new double[6]; double [] v = new double[6];
for (int i = 0; i < v.length ; i++) { for (int i = 0; i < v.length ; i++) {
v[i] = scale * cva.getExtrinsicParameterValue(i+GeometryCorrection.CorrVector.IMU_INDEX, inPixels); v[i] = scale * cva.getExtrinsicParameterValue(i+cva_imu_index, inPixels); // CorrVector.IMU_INDEX, inPixels);
sb.append(String.format(fmt,v[i])); // zooms sb.append(String.format(fmt,v[i])); // zooms
fmts [ncol] = fmt; fmts [ncol] = fmt;
stats[ncol ][0]+=v[i]; stats[ncol ][0]+=v[i];
...@@ -891,7 +908,7 @@ public class MLStats { ...@@ -891,7 +908,7 @@ public class MLStats {
} }
if (showSym) { if (showSym) {
for (int i = 0; i < num_sym; i++) { for (int i = 0; i < num_sym_a; i++) {
double v = scale * cva.getExtrinsicSymParameterValue(i, inPixels); double v = scale * cva.getExtrinsicSymParameterValue(i, inPixels);
sb.append(String.format(fmt,v)); // sym parameters sb.append(String.format(fmt,v)); // sym parameters
fmts [ncol] = fmt; fmts [ncol] = fmt;
......
...@@ -58,7 +58,7 @@ import com.elphel.imagej.common.ShowDoubleFloatArrays; ...@@ -58,7 +58,7 @@ import com.elphel.imagej.common.ShowDoubleFloatArrays;
import com.elphel.imagej.correction.CorrectionColorProc; import com.elphel.imagej.correction.CorrectionColorProc;
import com.elphel.imagej.correction.EyesisCorrections; import com.elphel.imagej.correction.EyesisCorrections;
import com.elphel.imagej.jp4.JP46_Reader_camera; import com.elphel.imagej.jp4.JP46_Reader_camera;
import com.elphel.imagej.tileprocessor.GeometryCorrection.CorrVector; import com.elphel.imagej.tileprocessor.CorrVector;
import com.elphel.imagej.x3d.export.WavefrontExport; import com.elphel.imagej.x3d.export.WavefrontExport;
import com.elphel.imagej.x3d.export.X3dOutput; import com.elphel.imagej.x3d.export.X3dOutput;
...@@ -615,7 +615,7 @@ public class QuadCLTCPU { ...@@ -615,7 +615,7 @@ public class QuadCLTCPU {
this.correctionsParameters = correctionsParameters; this.correctionsParameters = correctionsParameters;
this.properties = properties; this.properties = properties;
is_aux = prefix.equals(PREFIX_AUX); is_aux = prefix.equals(PREFIX_AUX);
getProperties(prefix); getProperties(prefix); // failed with aux
} }
public static Properties loadProperties( public static Properties loadProperties(
...@@ -857,8 +857,9 @@ public class QuadCLTCPU { ...@@ -857,8 +857,9 @@ public class QuadCLTCPU {
geometryCorrection.pixelSize = sensors[0].pixelSize; geometryCorrection.pixelSize = sensors[0].pixelSize;
geometryCorrection.distortionRadius = sensors[0].distortionRadius; geometryCorrection.distortionRadius = sensors[0].distortionRadius;
for (int i = CorrVector.LENGTH_ANGLES; i < CorrVector.LENGTH; i++){ // What was that below? Started smth?
} // for (int i = CorrVector.LENGTH_ANGLES; i < CorrVector.LENGTH; i++){
// }
// set common distportion parameters // set common distportion parameters
geometryCorrection.setDistortion( geometryCorrection.setDistortion(
f_avg, // sensors[0].focalLength, f_avg, // sensors[0].focalLength,
...@@ -923,13 +924,16 @@ public class QuadCLTCPU { ...@@ -923,13 +924,16 @@ public class QuadCLTCPU {
// calcualte reverse distortion as a table to be linear interpolated (now cubic!) // calcualte reverse distortion as a table to be linear interpolated (now cubic!)
geometryCorrection.calcReverseDistortionTable(); geometryCorrection.calcReverseDistortionTable();
if (numSensors == 4){ // if (numSensors == 4){
geometryCorrection.adustSquare(); geometryCorrection.adustSquare();
System.out.println("Adjusted camera to orient X Y along the sides of a square"); System.out.println("Adjusted camera to orient X Y along the sides of a square (now univerasal), numSensors = "+numSensors);
/*
} else { } else {
System.out.println("============= Cannot adustSquare() as it requires exactly 4 sensors, "+numSensors+" provided =========="); System.out.println("============= Cannot adustSquare() as it requires exactly 4 sensors, "+numSensors+" provided ==========");
return false; // not used in lwir System.out.println("Keeping as it was");
// return false; // not used in lwir
} }
*/
// Print parameters // Print parameters
if (debugLevel > 0){ if (debugLevel > 0){
geometryCorrection.listGeometryCorrection(debugLevel > 1); geometryCorrection.listGeometryCorrection(debugLevel > 1);
...@@ -5264,7 +5268,7 @@ public class QuadCLTCPU { ...@@ -5264,7 +5268,7 @@ public class QuadCLTCPU {
boolean apply_extrinsic = (clt_parameters.ly_corr_scale != 0.0); boolean apply_extrinsic = (clt_parameters.ly_corr_scale != 0.0);
double inf_min_disparity = clt_parameters.ly_inf_force_fine? clt_parameters.ly_inf_min_narrow :clt_parameters.ly_inf_min_broad; double inf_min_disparity = clt_parameters.ly_inf_force_fine? clt_parameters.ly_inf_min_narrow :clt_parameters.ly_inf_min_broad;
double inf_max_disparity = clt_parameters.ly_inf_force_fine? clt_parameters.ly_inf_max_narrow :clt_parameters.ly_inf_max_broad; double inf_max_disparity = clt_parameters.ly_inf_force_fine? clt_parameters.ly_inf_max_narrow :clt_parameters.ly_inf_max_broad;
GeometryCorrection.CorrVector corr_vector = ea.solveCorr ( CorrVector corr_vector = ea.solveCorr (
clt_parameters.ly_marg_fract, // double marg_fract, // part of half-width, and half-height to reduce weights clt_parameters.ly_marg_fract, // double marg_fract, // part of half-width, and half-height to reduce weights
clt_parameters.ly_inf_en, // boolean use_disparity, // adjust disparity-related extrinsics clt_parameters.ly_inf_en, // boolean use_disparity, // adjust disparity-related extrinsics
// 1.0 - to skip filtering infinity // 1.0 - to skip filtering infinity
...@@ -5307,7 +5311,7 @@ public class QuadCLTCPU { ...@@ -5307,7 +5311,7 @@ public class QuadCLTCPU {
dsxy, // double [][] measured_dsxy, dsxy, // double [][] measured_dsxy,
null, // boolean [] force_disparity, // boolean [] force_disparity, null, // boolean [] force_disparity, // boolean [] force_disparity,
false, // boolean use_main, // corr_rots_aux != null; false, // boolean use_main, // corr_rots_aux != null;
geometryCorrection.getCorrVector(), // GeometryCorrection.CorrVector corr_vector, geometryCorrection.getCorrVector(), // CorrVector corr_vector,
old_new_rms, // double [] old_new_rms, // should be double[2] old_new_rms, // double [] old_new_rms, // should be double[2]
debugLevel); // + 5);// int debugLevel) debugLevel); // + 5);// int debugLevel)
...@@ -5316,7 +5320,7 @@ public class QuadCLTCPU { ...@@ -5316,7 +5320,7 @@ public class QuadCLTCPU {
System.out.println(geometryCorrection.getCorrVector().toString()); System.out.println(geometryCorrection.getCorrVector().toString());
} }
if (corr_vector != null) { if (corr_vector != null) {
GeometryCorrection.CorrVector diff_corr = corr_vector.diffFromVector(geometryCorrection.getCorrVector()); CorrVector diff_corr = corr_vector.diffFromVector(geometryCorrection.getCorrVector());
if (debugLevel > -2){ if (debugLevel > -2){
System.out.println("New extrinsic corrections:"); System.out.println("New extrinsic corrections:");
System.out.println(corr_vector.toString()); System.out.println(corr_vector.toString());
...@@ -6337,16 +6341,22 @@ public class QuadCLTCPU { ...@@ -6337,16 +6341,22 @@ public class QuadCLTCPU {
*/ */
public void resetExtrinsicCorr( // not used in lwir public void resetExtrinsicCorr( // not used in lwir // only manual commands
CLTParameters clt_parameters) CLTParameters clt_parameters)
{ {
if (extrinsic_vect != null) { if (extrinsic_vect != null) {
extrinsic_vect [GeometryCorrection.CorrVector.IMU_INDEX + 0] = 0.0; for (int i = 0; i < extrinsic_vect.length; i++) {
extrinsic_vect [GeometryCorrection.CorrVector.IMU_INDEX + 1] = 0.0; extrinsic_vect [i] = 0.0;
extrinsic_vect [GeometryCorrection.CorrVector.IMU_INDEX + 2] = 0.0; }
extrinsic_vect [GeometryCorrection.CorrVector.IMU_INDEX + 3] = 0.0; /*
extrinsic_vect [GeometryCorrection.CorrVector.IMU_INDEX + 4] = 0.0; int imu_index = extrinsic_vect.getIMUIndex();
extrinsic_vect [GeometryCorrection.CorrVector.IMU_INDEX + 5] = 0.0; extrinsic_vect [CorrVector.IMU_INDEX + 0] = 0.0;
extrinsic_vect [CorrVector.IMU_INDEX + 1] = 0.0;
extrinsic_vect [CorrVector.IMU_INDEX + 2] = 0.0;
extrinsic_vect [CorrVector.IMU_INDEX + 3] = 0.0;
extrinsic_vect [CorrVector.IMU_INDEX + 4] = 0.0;
extrinsic_vect [CorrVector.IMU_INDEX + 5] = 0.0;
*/
} }
if (geometryCorrection != null){ if (geometryCorrection != null){
geometryCorrection.resetCorrVectorERS(); geometryCorrection.resetCorrVectorERS();
...@@ -8406,7 +8416,7 @@ public class QuadCLTCPU { ...@@ -8406,7 +8416,7 @@ public class QuadCLTCPU {
debugLevel); // final int debugLevel) debugLevel); // final int debugLevel)
} }
GeometryCorrection.CorrVector corr_vector = ea.solveCorr ( CorrVector corr_vector = ea.solveCorr (
clt_parameters.ly_marg_fract, // double marg_fract, // part of half-width, and half-height to reduce weights clt_parameters.ly_marg_fract, // double marg_fract, // part of half-width, and half-height to reduce weights
clt_parameters.ly_inf_en, // boolean use_disparity, // adjust disparity-related extrinsics clt_parameters.ly_inf_en, // boolean use_disparity, // adjust disparity-related extrinsics
// 1.0 - to skip filtering infinity // 1.0 - to skip filtering infinity
...@@ -8450,7 +8460,7 @@ public class QuadCLTCPU { ...@@ -8450,7 +8460,7 @@ public class QuadCLTCPU {
scan.getLazyEyeData(), // dsxy, // double [][] measured_dsxy, scan.getLazyEyeData(), // dsxy, // double [][] measured_dsxy,
scan.getLazyEyeForceDisparity(), // null, // boolean [] force_disparity, // boolean [] force_disparity, scan.getLazyEyeForceDisparity(), // null, // boolean [] force_disparity, // boolean [] force_disparity,
false, // boolean use_main, // corr_rots_aux != null; false, // boolean use_main, // corr_rots_aux != null;
geometryCorrection.getCorrVector(), // GeometryCorrection.CorrVector corr_vector, geometryCorrection.getCorrVector(), // CorrVector corr_vector,
old_new_rms, // double [] old_new_rms, // should be double[2] old_new_rms, // double [] old_new_rms, // should be double[2]
debugLevel); // + 5);// int debugLevel) >=2 to show images debugLevel); // + 5);// int debugLevel) >=2 to show images
...@@ -8459,7 +8469,7 @@ public class QuadCLTCPU { ...@@ -8459,7 +8469,7 @@ public class QuadCLTCPU {
System.out.println(geometryCorrection.getCorrVector().toString()); System.out.println(geometryCorrection.getCorrVector().toString());
} }
if (corr_vector != null) { if (corr_vector != null) {
GeometryCorrection.CorrVector diff_corr = corr_vector.diffFromVector(geometryCorrection.getCorrVector()); CorrVector diff_corr = corr_vector.diffFromVector(geometryCorrection.getCorrVector());
comp_diff = diff_corr.getNorm(); comp_diff = diff_corr.getNorm();
if (debugLevel > -2){ if (debugLevel > -2){
...@@ -12377,7 +12387,7 @@ public class QuadCLTCPU { ...@@ -12377,7 +12387,7 @@ public class QuadCLTCPU {
boolean debug_img = false; boolean debug_img = false;
int debugLevelInner = -5; int debugLevelInner = -5;
CLTPass3d scan = tp.clt_3d_passes.get(scanIndex); CLTPass3d scan = tp.clt_3d_passes.get(scanIndex);
GeometryCorrection.CorrVector corr_vector = geometryCorrection.getCorrVector().clone(); CorrVector corr_vector = geometryCorrection.getCorrVector().clone();
double [] curr_corr_arr = corr_vector.toArray(); double [] curr_corr_arr = corr_vector.toArray();
int clusters = ea.clustersX * ea.clustersY; int clusters = ea.clustersX * ea.clustersY;
int num_ly = ExtrinsicAdjustment.INDX_LENGTH; // scan.getLazyEyeData().length; int num_ly = ExtrinsicAdjustment.INDX_LENGTH; // scan.getLazyEyeData().length;
...@@ -12407,8 +12417,8 @@ public class QuadCLTCPU { ...@@ -12407,8 +12417,8 @@ public class QuadCLTCPU {
// perform asymmetric delta // perform asymmetric delta
double [] par_inc = new double [num_pars]; double [] par_inc = new double [num_pars];
par_inc[npar] = delta * parameter_scales[npar]; par_inc[npar] = delta * parameter_scales[npar];
GeometryCorrection.CorrVector corr_delta = geometryCorrection.getCorrVector(par_inc,null); // , par_mask); all parameters CorrVector corr_delta = geometryCorrection.getCorrVector(par_inc,null); // , par_mask); all parameters
GeometryCorrection.CorrVector corr_vectorp = corr_vector.clone(); CorrVector corr_vectorp = corr_vector.clone();
corr_vectorp.incrementVector(corr_delta, 1.0); // 0.5 for p/m corr_vectorp.incrementVector(corr_delta, 1.0); // 0.5 for p/m
geometryCorrection.setCorrVector(corr_vectorp) ; geometryCorrection.setCorrVector(corr_vectorp) ;
double rdelta = 1.0/ par_inc[npar]; double rdelta = 1.0/ par_inc[npar];
......
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