Commit 0d787dca authored by Andrey Filippov's avatar Andrey Filippov

Debugging, added target calculation bypass, fixed LPF issue

parent 17265194
...@@ -93,6 +93,7 @@ public class CorrectionFPN { ...@@ -93,6 +93,7 @@ public class CorrectionFPN {
ImageDtt.THREADS_MAX, ImageDtt.THREADS_MAX,
debugLevel-2); debugLevel-2);
} }
// System.out.print("cuasSubtractFpn(): ");
quadCLTs[scene_index].setImageCenter(center_CLT.getImageCenter()); quadCLTs[scene_index].setImageCenter(center_CLT.getImageCenter());
if (early_try_back) { // just faster debugging, not used in production if (early_try_back) { // just faster debugging, not used in production
double [][][] back_prop = backPropagate( double [][][] back_prop = backPropagate(
...@@ -272,15 +273,23 @@ public class CorrectionFPN { ...@@ -272,15 +273,23 @@ public class CorrectionFPN {
is_new, //final boolean save, is_new, //final boolean save,
show_fpn); // final boolean show) show_fpn); // final boolean show)
// TODO: apply to all scenes here ! ************************************* // TODO: apply to all scenes here ! *************************************
CorrectionFPN.setApplyRowCol( CorrectionFPN.setApplyRowCol(
quadCLTs, // final QuadCLT [] scenes, quadCLTs, // final QuadCLT [] scenes,
row_col[0], //final double [][][] rows, row_col[0], //final double [][][] rows,
row_col[1]); // final double [][][] cols ) row_col[1]); // final double [][][] cols )
if (debugLevel > -4) {
System.out.println("cuasSubtractRowColNoise(): Subtracted row/col noise from all source images in memory, marking them as applied.");
}
} else { // reset row/col correction } else { // reset row/col correction
CorrectionFPN.setApplyRowCol( CorrectionFPN.setApplyRowCol(
quadCLTs, // final QuadCLT [] scenes, quadCLTs, // final QuadCLT [] scenes,
null, //final double [][][] rows, null, //final double [][][] rows,
null); // final double [][][] cols ) null); // final double [][][] cols )
if (debugLevel > -4) {
System.out.println("cuasSubtractRowColNoise(): Reset row/col noise in all source images.");
}
} }
return; return;
} }
...@@ -819,6 +828,7 @@ public class CorrectionFPN { ...@@ -819,6 +828,7 @@ public class CorrectionFPN {
final double [] disparity_center, final double [] disparity_center,
final int debugLevel) { final int debugLevel) {
boolean en_debug = false; boolean en_debug = false;
// System.out.print("backPropagate(): ");
scene_CLT.setImageCenter(center_CLT.getImageCenter()); // set back-propagate mode scene_CLT.setImageCenter(center_CLT.getImageCenter()); // set back-propagate mode
boolean batch_run =clt_parameters.batch_run; // may be modified for debug boolean batch_run =clt_parameters.batch_run; // may be modified for debug
int width=center_CLT.getTilesX()*center_CLT.getTileSize(); int width=center_CLT.getTilesX()*center_CLT.getTileSize();
...@@ -965,7 +975,7 @@ public class CorrectionFPN { ...@@ -965,7 +975,7 @@ public class CorrectionFPN {
wh, // null, // int [] wh, wh, // null, // int [] wh,
use_reference); // boolean use_reference use_reference); // boolean use_reference
int order = 2; int order = 2;
// System.out.print("backPropagate(): disable back-propagate mode ");
scene_CLT.setImageCenter(null); // disable back-propagate mode scene_CLT.setImageCenter(null); // disable back-propagate mode
double [][] coeffs = photometric( double [][] coeffs = photometric(
scene_CLT.getImageData(), // inal double [][][] raw_img, scene_CLT.getImageData(), // inal double [][][] raw_img,
......
...@@ -434,6 +434,7 @@ public class Cuas { ...@@ -434,6 +434,7 @@ public class Cuas {
dts)[0]; // final double ts_now) dts)[0]; // final double ts_now)
center_CLT.setCenterClt(fcumul_clt); // float [] clt) center_CLT.setCenterClt(fcumul_clt); // float [] clt)
double [][] image_center = center_CLT.convertCenterClt(null); double [][] image_center = center_CLT.convertCenterClt(null);
// System.out.print("createCenterClt(): ");
center_CLT.setImageCenter(image_center); center_CLT.setImageCenter(image_center);
// //
String center_cuas_cumul_path = center_CLT.getImagePath()+Prefs.getFileSeparator() + center_CLT.getImageName()+CuasData.getCuasCumulativeSuffix(); String center_cuas_cumul_path = center_CLT.getImagePath()+Prefs.getFileSeparator() + center_CLT.getImageName()+CuasData.getCuasCumulativeSuffix();
......
...@@ -1301,8 +1301,8 @@ public class GpuQuad{ // quad camera description ...@@ -1301,8 +1301,8 @@ public class GpuQuad{ // quad camera description
if (!force && this.gpuTileProcessor.bayer_set && !quadCLT.hasNewImageData()) { if (!force && this.gpuTileProcessor.bayer_set && !quadCLT.hasNewImageData()) {
return; return;
} }
// System.out.print("setBayerImages(): ");
double [][] bayer_center = quadCLT.getImageCenter(); // null double [][] bayer_center = quadCLT.getImageCenter(); // null
// if (bayer_center != null) {
if (center) { if (center) {
quadCLT.getResetImageCenter(); quadCLT.getResetImageCenter();
setBayerImage( setBayerImage(
...@@ -1983,8 +1983,6 @@ public class GpuQuad{ // quad camera description ...@@ -1983,8 +1983,6 @@ public class GpuQuad{ // quad camera description
} }
boolean skip_kernels = rectilinear || (quadCLT == null) || no_kernels; boolean skip_kernels = rectilinear || (quadCLT == null) || no_kernels;
if (!rectilinear) { if (!rectilinear) {
// if ((quadCLT == null) || (quadCLT.getImageCenter() != null)) { // ????????????????
// if ((quadCLT != null) && (quadCLT.getImageCenter() == null)) {
if (!skip_kernels) { if (!skip_kernels) {
setConvolutionKernels(false); // set kernels if they are not set already setConvolutionKernels(false); // set kernels if they are not set already
} }
...@@ -1992,7 +1990,6 @@ public class GpuQuad{ // quad camera description ...@@ -1992,7 +1990,6 @@ public class GpuQuad{ // quad camera description
false, // boolean force, false, // boolean force,
use_center_image); // boolean center) use_center_image); // boolean center)
} }
// boolean skip_kernels = rectilinear || (quadCLT == null) || (quadCLT.getImageCenter() != null) || !this.gpuTileProcessor.kernels_set || (quadCLT.no_kernels);
int [] wh1 = handleWH( int [] wh1 = handleWH(
wh, // int [] wh_in, wh, // int [] wh_in,
......
...@@ -867,6 +867,9 @@ min_str_neib_fpn 0.35 ...@@ -867,6 +867,9 @@ min_str_neib_fpn 0.35
public int cuas_num_orient = 2; // initial value for num_orient public int cuas_num_orient = 2; // initial value for num_orient
public int cuas_num_accum = 1; // initial value for num_accum public int cuas_num_accum = 1; // initial value for num_accum
public boolean cuas_reuse_targets = false; // read previously calculated non-conflict (one per tile) targets
public String cuas_reuse_path = "-TARGETS_SINGLE-FINAL"; // either suffix (all parameters the same) or the full path (contains "/")
// TODO: move next parameters elsewhere - they are not the motion blur ones. // TODO: move next parameters elsewhere - they are not the motion blur ones.
public int mb_gain_index_pose = 5; // pose readjust pass to switch to full mb_max_gain from mb_max_gain_inter public int mb_gain_index_pose = 5; // pose readjust pass to switch to full mb_max_gain from mb_max_gain_inter
public int mb_gain_index_depth = 5; // depth map refine pass (SfM) to switch to full mb_max_gain from mb_max_gain_inter public int mb_gain_index_depth = 5; // depth map refine pass (SfM) to switch to full mb_max_gain from mb_max_gain_inter
...@@ -2572,6 +2575,11 @@ min_str_neib_fpn 0.35 ...@@ -2572,6 +2575,11 @@ min_str_neib_fpn 0.35
"Overwrite value (when Overwrite... is checked)."); "Overwrite value (when Overwrite... is checked).");
gd.addNumericField("Value to overwrote num_accum", this.cuas_num_accum, 0,3,"", gd.addNumericField("Value to overwrote num_accum", this.cuas_num_accum, 0,3,"",
"Overwrite value (when Overwrite... is checked)."); "Overwrite value (when Overwrite... is checked).");
gd.addCheckbox ("Reuse previosly calculated targets", this.cuas_reuse_targets,
"Read previously calculated non-conflict (one per tile) targets.");
gd.addStringField("Calculated targets suffix/path", this.cuas_reuse_path, 120,
"Either suffix (if all the parameters the same) or the full path (contains \"/\").");
gd.addTab("LMA sequence","Interscene LMA sequence control"); gd.addTab("LMA sequence","Interscene LMA sequence control");
gd.addMessage("Parameters for control of the LMA pose adjustment sequence"); gd.addMessage("Parameters for control of the LMA pose adjustment sequence");
...@@ -3682,6 +3690,8 @@ min_str_neib_fpn 0.35 ...@@ -3682,6 +3690,8 @@ min_str_neib_fpn 0.35
this.cuas_num_orient = (int) gd.getNextNumber(); this.cuas_num_orient = (int) gd.getNextNumber();
this.cuas_num_accum = (int) gd.getNextNumber(); this.cuas_num_accum = (int) gd.getNextNumber();
this.cuas_reuse_targets = gd.getNextBoolean();
this.cuas_reuse_path = gd.getNextString();
this.mb_gain_index_pose = (int) gd.getNextNumber(); this.mb_gain_index_pose = (int) gd.getNextNumber();
this.mb_gain_index_depth =(int) gd.getNextNumber(); this.mb_gain_index_depth =(int) gd.getNextNumber();
...@@ -4707,6 +4717,9 @@ min_str_neib_fpn 0.35 ...@@ -4707,6 +4717,9 @@ min_str_neib_fpn 0.35
properties.setProperty(prefix+"cuas_num_orient", this.cuas_num_orient+""); // int properties.setProperty(prefix+"cuas_num_orient", this.cuas_num_orient+""); // int
properties.setProperty(prefix+"cuas_num_accum", this.cuas_num_accum+""); // int properties.setProperty(prefix+"cuas_num_accum", this.cuas_num_accum+""); // int
properties.setProperty(prefix+"cuas_reuse_targets", this.cuas_reuse_targets+""); // boolean
properties.setProperty(prefix+"cuas_reuse_path", this.cuas_reuse_path+""); // String
properties.setProperty(prefix+"mb_gain_index_pose", this.mb_gain_index_pose+""); // int properties.setProperty(prefix+"mb_gain_index_pose", this.mb_gain_index_pose+""); // int
properties.setProperty(prefix+"mb_gain_index_depth", this.mb_gain_index_depth+""); // int properties.setProperty(prefix+"mb_gain_index_depth", this.mb_gain_index_depth+""); // int
...@@ -5707,6 +5720,9 @@ min_str_neib_fpn 0.35 ...@@ -5707,6 +5720,9 @@ min_str_neib_fpn 0.35
if (properties.getProperty(prefix+"cuas_num_orient")!=null) this.cuas_num_orient=Integer.parseInt(properties.getProperty(prefix+"cuas_num_orient")); if (properties.getProperty(prefix+"cuas_num_orient")!=null) this.cuas_num_orient=Integer.parseInt(properties.getProperty(prefix+"cuas_num_orient"));
if (properties.getProperty(prefix+"cuas_num_accum")!=null) this.cuas_num_accum=Integer.parseInt(properties.getProperty(prefix+"cuas_num_accum")); if (properties.getProperty(prefix+"cuas_num_accum")!=null) this.cuas_num_accum=Integer.parseInt(properties.getProperty(prefix+"cuas_num_accum"));
if (properties.getProperty(prefix+"cuas_reuse_targets")!=null) this.cuas_reuse_targets=Boolean.parseBoolean(properties.getProperty(prefix+"cuas_reuse_targets"));
if (properties.getProperty(prefix+"cuas_reuse_path")!=null) this.cuas_reuse_path=(String) properties.getProperty(prefix+"cuas_reuse_path");
if (properties.getProperty(prefix+"mb_gain_index_pose")!=null) this.mb_gain_index_pose=Integer.parseInt(properties.getProperty(prefix+"mb_gain_index_pose")); if (properties.getProperty(prefix+"mb_gain_index_pose")!=null) this.mb_gain_index_pose=Integer.parseInt(properties.getProperty(prefix+"mb_gain_index_pose"));
if (properties.getProperty(prefix+"mb_ers_index")!=null) this.mb_ers_index=Integer.parseInt(properties.getProperty(prefix+"mb_ers_index")); if (properties.getProperty(prefix+"mb_ers_index")!=null) this.mb_ers_index=Integer.parseInt(properties.getProperty(prefix+"mb_ers_index"));
if (properties.getProperty(prefix+"mb_ers_y_index")!=null) this.mb_ers_y_index=Integer.parseInt(properties.getProperty(prefix+"mb_ers_y_index")); if (properties.getProperty(prefix+"mb_ers_y_index")!=null) this.mb_ers_y_index=Integer.parseInt(properties.getProperty(prefix+"mb_ers_y_index"));
...@@ -6698,6 +6714,9 @@ min_str_neib_fpn 0.35 ...@@ -6698,6 +6714,9 @@ min_str_neib_fpn 0.35
imp.cuas_overwrite = this.cuas_overwrite; imp.cuas_overwrite = this.cuas_overwrite;
imp.cuas_num_orient = this.cuas_num_orient; imp.cuas_num_orient = this.cuas_num_orient;
imp.cuas_num_accum = this.cuas_num_accum; imp.cuas_num_accum = this.cuas_num_accum;
imp.cuas_reuse_targets = this.cuas_reuse_targets;
imp.cuas_reuse_path= this.cuas_reuse_path;
imp.mb_gain_index_pose = this.mb_gain_index_pose; imp.mb_gain_index_pose = this.mb_gain_index_pose;
imp.mb_gain_index_depth = this.mb_gain_index_depth; imp.mb_gain_index_depth = this.mb_gain_index_depth;
......
...@@ -5006,7 +5006,15 @@ public class OpticalFlow { ...@@ -5006,7 +5006,15 @@ public class OpticalFlow {
} }
} }
double [][] image_center = center_CLT.convertCenterClt(null); // double [][] image_center = center_CLT.convertCenterClt(null); // when null, uses center_CLT.center_clt
double [][] image_center = center_CLT.convertCenterClt(
null, // when null, uses center_CLT.center_clt
clt_parameters.gpu_sigma_r, // final double gpu_sigma_r, // 0.9, 1.1
clt_parameters.gpu_sigma_b, // final double gpu_sigma_b, // 0.9, 1.1
clt_parameters.gpu_sigma_g, // final double gpu_sigma_g, // 0.6, 0.7
clt_parameters.gpu_sigma_m); // final double gpu_sigma_m, // = 0.4; // 0.7;
// System.out.print("buildSeries(): ");
center_CLT.setImageCenter(image_center); center_CLT.setImageCenter(image_center);
boolean show_image_center = cuas_debug && !clt_parameters.batch_run; boolean show_image_center = cuas_debug && !clt_parameters.batch_run;
if (show_image_center) { // restored, not new! if (show_image_center) { // restored, not new!
...@@ -5566,7 +5574,7 @@ public class OpticalFlow { ...@@ -5566,7 +5574,7 @@ public class OpticalFlow {
double [][][] fpn = CorrectionFPN.cuasSubtractFpn( // returns fpn // null double [][][] fpn = CorrectionFPN.cuasSubtractFpn( // returns fpn // null
clt_parameters, // CLTParameters clt_parameters, clt_parameters, // CLTParameters clt_parameters,
cuas_subtract_fpn, // boolean cuas_subtract_fpn, // cuas_subtract_fpn, // boolean cuas_subtract_fpn, //
changed, //boolean changed, // boolean changed = quadCLT_main.isPhotometricUpdatedAndReset(); false, // changed, //boolean changed, // boolean changed = quadCLT_main.isPhotometricUpdatedAndReset();
colorProcParameters, // ColorProcParameters colorProcParameters, colorProcParameters, // ColorProcParameters colorProcParameters,
center_CLT, // QuadCLT center_CLT, // where combo_dsi is. Should have hasCenterClt() (run makeCenterClt() before) center_CLT, // QuadCLT center_CLT, // where combo_dsi is. Should have hasCenterClt() (run makeCenterClt() before)
quadCLTs, // QuadCLT [] quadCLTs, quadCLTs, // QuadCLT [] quadCLTs,
...@@ -8149,6 +8157,24 @@ public class OpticalFlow { ...@@ -8149,6 +8157,24 @@ public class OpticalFlow {
ref_pXpYD_or_null = ref_pXpYD; ref_pXpYD_or_null = ref_pXpYD;
ref_scene.getErsCorrection().setupERS(); ref_scene.getErsCorrection().setupERS();
System.out.println("Calculated virtual_PxPyD"); System.out.println("Calculated virtual_PxPyD");
boolean debug_virtual_PxPyD = (debugLevel > 1000);
if (debug_virtual_PxPyD) {
String [] dbg_titles = {"pX", "pY", "D"};
double [][] dbg_pXpYD = new double[dbg_titles.length][ref_pXpYD.length];
for (int i = 0; i < dbg_pXpYD.length; i++) Arrays.fill(dbg_pXpYD[i], Double.NaN);
for (int i = 0; i < ref_pXpYD.length; i++) if (ref_pXpYD[i] != null) {
for (int j = 0; j < ref_pXpYD[i].length; j++) dbg_pXpYD[j][i] = ref_pXpYD[i][j];
}
ImagePlus imp_virtual_PxPyD= ShowDoubleFloatArrays.makeArrays(
dbg_pXpYD,
ref_scene.getTilesX(),
ref_scene.getTilesY(),
ref_scene.getImageName()+"-virtual_PxPyD",
dbg_titles);
ref_scene.saveImagePlusInModelDirectory(
null, // String suffix,
imp_virtual_PxPyD); // ImagePlus imp)
}
} else { } else {
ref_pXpYD = transformToScenePxPyD( // now should work with offset ref_scene ref_pXpYD = transformToScenePxPyD( // now should work with offset ref_scene
fov_tiles, // final Rectangle [] extra_woi, // show larger than sensor WOI (or null) fov_tiles, // final Rectangle [] extra_woi, // show larger than sensor WOI (or null)
......
...@@ -203,12 +203,74 @@ public class QuadCLT extends QuadCLTCPU { ...@@ -203,12 +203,74 @@ public class QuadCLT extends QuadCLTCPU {
sensor_mask_clt, // final int sensor_mask, sensor_mask_clt, // final int sensor_mask,
wh, // null, // int [] wh, wh, // null, // int [] wh,
false); // boolean use_reference false); // boolean use_reference
/*
float [][] fpix = getComboFromTD(
-1, // final int sensor_mask, // only if merge_channels
false, // final boolean merge_channels,
null, // final int [] whc, // if int[2], will return width, height
false); // final boolean use_reference){
*/
double [][] dbg = renderDoubleFromTDMono (
-1, // final int sensor_mask,
wh, // null, // int [] wh,
false); // boolean use_reference
System.out.println("### convertCenterClt(): result={"+result[0][0]+","+result[0][1]+","+result[0][2]+","+result[0][3]+", dbg.length="+dbg.length);
ShowDoubleFloatArrays.showArrays(
dbg,
wh[0],
wh[1],
true,
"convertCenterClt_test");
return result;
}
public double [][] convertCenterClt(
float [][] fclt, // may be null
final double gpu_sigma_r, // 0.9, 1.1
final double gpu_sigma_b, // 0.9, 1.1
final double gpu_sigma_g, // 0.6, 0.7
final double gpu_sigma_m) { // = 0.4; // 0.7;
final float [][] lpf_rgb = new float[][] {
ImageDtt.floatGetCltLpfFd(gpu_sigma_r, GPUTileProcessor.DTT_SIZE),
ImageDtt.floatGetCltLpfFd(gpu_sigma_b, GPUTileProcessor.DTT_SIZE),
ImageDtt.floatGetCltLpfFd(gpu_sigma_g, GPUTileProcessor.DTT_SIZE),
ImageDtt.floatGetCltLpfFd(gpu_sigma_m, GPUTileProcessor.DTT_SIZE)
};
gpuQuad.setLpfRbg( // constants memory - same for all cameras
lpf_rgb,
false); // boolean debug)
int sensor_mask_clt = 1; // just one
setQuadClt();
int tilesX = getTilesX();
int tilesY = getTilesY();
int tile_size = getTileSize();
int [] wh = {tilesX*tile_size,tilesY*tile_size};
getGPUQuad().handleWH(
wh, // int [] wh,
false); // boolean ref_scene)
setComboToTD(
fclt, // new float [][] {center_CLT.getCenterClt()}, // ,combo_seq_clt, // final float [][] fclt,
true, // merge_clt, // final boolean merge_channels, // duplicate same data to all selected channels
sensor_mask_clt, // final int sensor_mask, // only if merge_channels
null, // whc, // final int [] whc, // if int[2], will return width, height
false); // final boolean use_reference);
double [][] result = renderDoubleFromTD (
sensor_mask_clt, // final int sensor_mask,
wh, // null, // int [] wh,
false); // boolean use_reference
return result; return result;
} }
/** /**
* Remove weak non-LMA tiles if they do not have any LMA or strong neighbors and * Remove weak non-LMA tiles if they do not have any LMA or strong neighbors and
* too few weak neighbors. Single strong neighbor within range is enough, strong/LMA * too few weak neighbors. Single strong neighbor within range is enough, strong/LMA
...@@ -3066,9 +3128,11 @@ public class QuadCLT extends QuadCLTCPU { ...@@ -3066,9 +3128,11 @@ public class QuadCLT extends QuadCLTCPU {
boolean use_reference){ boolean use_reference){
if (fclt == null) { if (fclt == null) {
fclt = new float[][] {getCenterClt()}; fclt = new float[][] {getCenterClt()};
merge_channels = true; /// System.out.println("+++ setComboToTD(): fclt={"+fclt[0][0]+","+fclt[0][1]+","+fclt[0][2]+","+fclt[0][3]);
/// merge_channels = true;
/// } else {
/// System.out.println("+++! setComboToTD(): fclt={"+fclt[0][0]+","+fclt[0][1]+","+fclt[0][2]+","+fclt[0][3]);
} }
final int [] width_height = gpuQuad.getWH(use_reference); final int [] width_height = gpuQuad.getWH(use_reference);
final int num_colors = gpuQuad.getNumColors(); final int num_colors = gpuQuad.getNumColors();
if (whc != null) { if (whc != null) {
...@@ -3078,13 +3142,30 @@ public class QuadCLT extends QuadCLTCPU { ...@@ -3078,13 +3142,30 @@ public class QuadCLT extends QuadCLTCPU {
whc[2] = num_colors; whc[2] = num_colors;
} }
} }
/// System.out.println("+++? setComboToTD(): fclt.length="+fclt.length+", fclt[0].length="+fclt[0].length+
/// ", merge_channels="+merge_channels+", sensor_mask="+sensor_mask);
for (int ncam = 0; ncam < fclt.length; ncam++) if (((1 << ncam) & sensor_mask) != 0){ for (int ncam = 0; ncam < fclt.length; ncam++) if (((1 << ncam) & sensor_mask) != 0){
// for (int ncam = 0; ncam < getNumSensors(); ncam++) { // if (((1 << ncam) & sensor_mask) != 0){
// for (int ncam = 0; ncam < 1; ncam++) { // if (((1 << ncam) & sensor_mask) != 0){
int src_cam = merge_channels? 0: ncam; int src_cam = merge_channels? 0: ncam;
gpuQuad.setCltData( // for testing only gpuQuad.setCltData( // for testing only
ncam, // int ncam, ncam, // int ncam,
fclt[src_cam], // float [] fclt, // fclt[src_cam], // float [] fclt, //
use_reference); // boolean use_ref); use_reference); // boolean use_ref);
} }
/*
float [][] dbg_fclt = gpuQuad.getCltData( // only for color=0
use_reference); // boolean use_ref){
System.out.println("$$$ setComboToTD(): dbg_fclt={"+dbg_fclt[0][0]+","+dbg_fclt[0][1]+","+dbg_fclt[0][2]+","+dbg_fclt[0][3]);
ShowDoubleFloatArrays.showArrays(
fclt,
width_height[0],
width_height[1],
true,
"convertCenterClt_fclt");
*/
return; return;
} }
...@@ -3300,6 +3381,45 @@ public class QuadCLT extends QuadCLTCPU { ...@@ -3300,6 +3381,45 @@ public class QuadCLT extends QuadCLTCPU {
return iclt_fimg_combo; return iclt_fimg_combo;
} }
public double [][] renderDoubleFromTDMono ( // [scene][color][pixel]
int sensor_mask,
int [] wh, // may be null, or {width, height}
boolean use_reference
) {
gpuQuad.execImcltRbgAll(
isMonochrome(),
use_reference,
wh); //int [] wh
// get data back from GPU
final float [][][] iclt_fimg = new float [getNumSensors()][][];
int nchn = 0;
int nTiles = 0;
for (int ncam = 0; ncam < iclt_fimg.length; ncam++) if (((1 << ncam) & sensor_mask) != 0){
iclt_fimg[ncam] = gpuQuad.getRBG(ncam); // updated window
// ncol = iclt_fimg[ncam].length;
nTiles = iclt_fimg[ncam][0].length;
nchn++;
}
final double [][] iclt_fimg_combo = new double [nchn][nTiles];
final Thread[] threads = ImageDtt.newThreadArray(THREADS_MAX);
final AtomicInteger ai = new AtomicInteger(0);
for (int ithread = 0; ithread < threads.length; ithread++) {
threads[ithread] = new Thread() {
public void run() {
for (int nTile = ai.getAndIncrement(); nTile < iclt_fimg_combo[0].length; nTile = ai.getAndIncrement()) {
for (int i = 0; i < iclt_fimg.length; i++) if (iclt_fimg[i] != null) {
iclt_fimg_combo[i][nTile] = iclt_fimg[i][0][nTile];
}
}
}
};
}
ImageDtt.startAndJoin(threads);
return iclt_fimg_combo;
}
public double [][][] renderDoubleFromTD ( // [scene][color][pixel] public double [][][] renderDoubleFromTD ( // [scene][color][pixel]
int [] wh, // may be null, or {width, height} int [] wh, // may be null, or {width, height}
boolean use_reference boolean use_reference
......
...@@ -6327,9 +6327,29 @@ public class QuadCLTCPU { ...@@ -6327,9 +6327,29 @@ public class QuadCLTCPU {
public double [][] getResetImageCenter(){ public double [][] getResetImageCenter(){
new_image_data = false; new_image_data = false;
boolean debug = false;
if (debug) {
if (image_center == null) {
System.out.println("--- getResetImageCenter(): image_center== null");
} else {
System.out.println("--- getResetImageCenter(): image_center={"+image_center[0][0]+","+image_center[0][1]+","+image_center[0][2]+","+image_center[0][3]);
}
}
return image_center; return image_center;
} }
public double [][] getImageCenter(){ // does not reset new data public double [][] getImageCenter(){ // does not reset new data
boolean debug = false;
if (debug) {
if (image_center == null) {
System.out.println("--- getImageCenter(): image_center== null");
} else {
System.out.println("--- getImageCenter(): image_center={"+image_center[0][0]+","+image_center[0][1]+","+image_center[0][2]+","+image_center[0][3]);
}
}
return image_center; return image_center;
} }
public void setImageCenter(double [][] data) { public void setImageCenter(double [][] data) {
...@@ -6337,6 +6357,16 @@ public class QuadCLTCPU { ...@@ -6337,6 +6357,16 @@ public class QuadCLTCPU {
new_image_data = true; new_image_data = true;
// image_fpn_applied = null; // image_fpn_applied = null;
// image_fpn = null; // image_fpn = null;
boolean debug = false;
if (debug) {
if (image_center == null) {
System.out.println("+++ setImageCenter(): image_center== null");
} else {
System.out.println("+++ setImageCenter(): image_center={"+image_center[0][0]+","+image_center[0][1]+","+image_center[0][2]+","+image_center[0][3]);
}
}
return;
} }
......
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