Commit 58388314 authored by Andrey Filippov's avatar Andrey Filippov

testing multi-target (per tile) mode

parent d6e178fd
...@@ -560,6 +560,27 @@ import ij.process.ImageProcessor; ...@@ -560,6 +560,27 @@ import ij.process.ImageProcessor;
return null; return null;
} }
public static ImagePlus makeArrays(int[][] pixels, int width, int height, String title, String [] titles) {
int i,j;
if (pixels==null) {
System.out.println("showDoubleFloatArrays.makeArrays(): - pixel array is null");
}
float [] fpixels;
ImageStack array_stack=new ImageStack(width,height);
boolean not_empty = false;
for (i=0;i<pixels.length;i++) if (pixels[i]!=null) {
not_empty = true;
fpixels=new float[pixels[i].length];
for (j=0;j<fpixels.length;j++) fpixels[j]=pixels[i][j];
array_stack.addSlice(titles[i], fpixels);
}
if (not_empty) {
ImagePlus imp_stack = new ImagePlus(title, array_stack);
imp_stack.getProcessor().resetMinAndMax();
return imp_stack;
}
return null;
}
public static ImagePlus makeArrays(double[][] pixels, int width, int height, String title, String [] titles) { public static ImagePlus makeArrays(double[][] pixels, int width, int height, String title, String [] titles) {
......
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -47,48 +47,50 @@ public class CuasMotionLMA { ...@@ -47,48 +47,50 @@ public class CuasMotionLMA {
public static final int RSLT_RMS_A = 8; public static final int RSLT_RMS_A = 8;
public static final int RSLT_MAX2A = 9; public static final int RSLT_MAX2A = 9;
public static final int RSLT_ITERS = 10; public static final int RSLT_ITERS = 10;
public static final int RSLT_CENTERED=11; //1: this target was evaluated in centered mode, 0 - was in non-centered, -1 - consumed in non-centered
public static final int RSLT_CENT_X = 11;
public static final int RSLT_CENT_Y = 12; public static final int RSLT_CENT_X = 12;
public static final int RSLT_CENT_MX= 13; public static final int RSLT_CENT_Y = 13;
public static final int RSLT_CENT_F = 14; public static final int RSLT_CENT_MX= 14;
public static final int RSLT_CENT_F = 15;
public static final int RSLT_VX = 15;
public static final int RSLT_VY = 16; public static final int RSLT_VX = 16;
public static final int RSLT_VSTR = 17; public static final int RSLT_VY = 17;
public static final int RSLT_VFRAC = 18; public static final int RSLT_VSTR = 18;
public static final int RSLT_VFRAC = 19;
public static final int RSLT_BX = 19;
public static final int RSLT_BY = 20; // RSLT_BX+1; public static final int RSLT_BX = 20;
public static final int RSLT_AX = 21; // RSLT_BX+2; public static final int RSLT_BY = 21; // RSLT_BX+1;
public static final int RSLT_AY = 22; // RSLT_BX+3; public static final int RSLT_AX = 22; // RSLT_BX+2;
public static final int RSLT_MISMATCH_BEFORE = 23; public static final int RSLT_AY = 23; // RSLT_BX+3;
public static final int RSLT_MISMATCH_AFTER = 24; // RSLT_MISMATCH_BEFORE+1; public static final int RSLT_MISMATCH_BEFORE = 24;
public static final int RSLT_MISMATCH_DIRS= 25; public static final int RSLT_MISMATCH_AFTER = 25; // RSLT_MISMATCH_BEFORE+1;
public static final int RSLT_MISMATCH_DIRS= 26;
public static final int RSLT_MSCORE = 26; public static final int RSLT_MATCH_LENGTH= 27; // [RSLT_MATCH_LENGTH] is one less than the total length (0 - isolated)
public static final int RSLT_MSCORE = 28;
public static final int RSLT_QA = 27;
public static final int RSLT_QRMS = 28;
public static final int RSLT_QRMS_A = 29;
public static final int RSLT_QMATCH = 30;
public static final int RSLT_QCENTER = 31;
public static final int RSLT_QSCORE = 32;
public static final int RSLT_STRONGER =33; // index of stronger neighbor (may be more)
public static final int RSLT_WHEN = 34; public static final int RSLT_QA = 29;
public static final int RSLT_FAIL = 35; public static final int RSLT_QRMS = 30;
public static final int RSLT_QRMS_A = 31;
public static final int RSLT_QCENTER = 32;
public static final int RSLT_QMATCH = 33;
public static final int RSLT_QMATCH_LEN=34;
public static final int RSLT_QSCORE = 35;
public static final int RSLT_STRONGER =36; // index of stronger neighbor (may be more)
public static final int RSLT_WHEN = 37;
public static final int RSLT_FAIL = 38;
public static final int RSLT_LEN = RSLT_FAIL+1; public static final int RSLT_LEN = RSLT_FAIL+1;
public static final String [] LMA_TITLES = public static final String [] LMA_TITLES =
{"X-OFFS","Y-OFFS", "AMPLITUDE", "RADIUS","RAD_POS", "OVERSHOOT","OFFSET","RMSE","RMSE/A","MAX2A","ITERATIONS", {"X-OFFS","Y-OFFS", "AMPLITUDE", "RADIUS","RAD_POS", "OVERSHOOT","OFFSET","RMSE","RMSE/A","MAX2A","ITERATIONS",
"CENTERED",
"Centr-X","Centr-Y","Centr-max","Centr-frac", "Centr-X","Centr-Y","Centr-max","Centr-frac",
"Vx", "Vy", "V-conf","V-frac", // from motion vectors "Vx", "Vy", "V-conf","V-frac", // from motion vectors
"X-before", "Y-before","X-after","Y-after", // from getHalfBeforeAfterPixXY() "X-before", "Y-before","X-after","Y-after", // from getHalfBeforeAfterPixXY()
"ERR-BEFORE", "ERR-AFTER", "BA-DIRS", // before dir + 16*after dir "ERR-BEFORE", "ERR-AFTER", "BA-DIRS", "Match-length", // before dir + 16*after dir
"*MOTION-SCORE", "*MOTION-SCORE",
"*Q-AMPL","*Q-RMSE","*Q-RMSE/A","*Q-MATCH","*Q-CENTER","*Q-SCORE", "*Q-AMPL","*Q-RMSE","*Q-RMSE/A","*Q-CENTER","*Q-MATCH","*Q-LENGTH","*Q-SCORE",
"Stronger", "Stronger",
"WHEN", "FAILURE"}; "WHEN", "FAILURE"};
...@@ -98,18 +100,24 @@ public class CuasMotionLMA { ...@@ -98,18 +100,24 @@ public class CuasMotionLMA {
public static final int FAIL_CENT_STR = 3; // centroid amplitude is too low public static final int FAIL_CENT_STR = 3; // centroid amplitude is too low
public static final int FAIL_CENT_FRAC = 4; // centroid fraction (energy in the peak fraction of all) is too low public static final int FAIL_CENT_FRAC = 4; // centroid fraction (energy in the peak fraction of all) is too low
public static final int FAIL_LMA = 5; // LMA fail to converge public static final int FAIL_LMA = 5; // LMA fail to converge
public static final int FAIL_A_LOW = 6; // amplitude is too low public static final int FAIL_A_PRE = 6; // amplitude is too low at preliminary filter (just after LMA)
public static final int FAIL_ACENT = 7; // ratio of maximal pixel to amplitude is too low public static final int FAIL_A_LOW = 7; // amplitude is too low
public static final int FAIL_RMSE = 8; // RMSE is too high public static final int FAIL_ACENT = 8; // ratio of maximal pixel to amplitude is too low
public static final int FAIL_RMSE_R = 9; // BOTH RMSE is not sufficient and RMSE/A is too high public static final int FAIL_RMSE = 9; // RMSE is too high
public static final int FAIL_R0_HIGH = 10; // Full radius (including negative overshoot) is too high public static final int FAIL_RMSE_R = 10; // BOTH RMSE is not sufficient and RMSE/A is too high
public static final int FAIL_R1_LOW = 11; // Inner (positive) peak radius is too low public static final int FAIL_R0_HIGH = 11; // Full radius (including negative overshoot) is too high
public static final int FAIL_K_LOW = 12; // Overshoot is too low (not used, it can be down to 0) public static final int FAIL_R1_LOW = 12; // Inner (positive) peak radius is too low
public static final int FAIL_K_HIGH = 13; // Overshoot is too high public static final int FAIL_K_LOW = 13; // Overshoot is too low (not used, it can be down to 0)
public static final int FAIL_FAR = 14; // Peak is too far from the center public static final int FAIL_K_HIGH = 14; // Overshoot is too high
public static final int FAIL_HORIZON = 15; // Peak is below horizon public static final int FAIL_FAR = 15; // Peak is too far from the center
public static final int FAIL_MISMATCH = 16; // Mismatch on both ends is too high public static final int FAIL_HORIZON = 16; // Peak is below horizon
public static final int FAIL_NEIGHBOR = 17; // failed because some neighbor is stronger public static final int FAIL_MISMATCH = 17; // Mismatch on both ends is too high
public static final int FAIL_NEIGHBOR = 18; // failed because some neighbor is stronger
public static final int FAIL_DUPLICATE= 19; // coordinate are (almost) the same as those of a stronger tile
public static final int CENTERED_NO = 0;
public static final int CENTERED_YES = 1;
public static final int CENTERED_USED= -1;
private int width; private int width;
private double [][] window; private double [][] window;
...@@ -332,6 +340,9 @@ public class CuasMotionLMA { ...@@ -332,6 +340,9 @@ public class CuasMotionLMA {
double lambda_max, // 100 double lambda_max, // 100
double rms_diff, // 0.001 double rms_diff, // 0.001
int num_iter, // 20 int num_iter, // 20
int dbg_seq,
int dbg_tile,
int dbg_index,
int debug_level) int debug_level)
{ {
boolean last_run = true; boolean last_run = true;
...@@ -409,13 +420,13 @@ public class CuasMotionLMA { ...@@ -409,13 +420,13 @@ public class CuasMotionLMA {
} }
if ((debug_level > -2) && !rslt[0]) { // failed if ((debug_level > -2) && !rslt[0]) { // failed
if ((debug_level > 1) || (iter == 1) || last_run) { if ((debug_level > 1) || (iter == 1) || last_run) {
System.out.println("LMA failed on iteration = "+iter); System.out.println("LMA failed on iteration = "+iter+ ", nSeq="+dbg_seq+", ntile="+dbg_tile+((dbg_index>=0)?(", index="+dbg_index):""));
// String [] lines = printOldNew(true); // boolean allvectors) // String [] lines = printOldNew(true); // boolean allvectors)
// for (String line : lines) { // for (String line : lines) {
// System.out.println(line); // System.out.println(line);
// } // }
} }
System.out.println(); // System.out.println();
} }
// No need to updateFullParameters() in this implementation - they are already updated // No need to updateFullParameters() in this implementation - they are already updated
/* /*
......
...@@ -741,6 +741,9 @@ min_str_neib_fpn 0.35 ...@@ -741,6 +741,9 @@ min_str_neib_fpn 0.35
public double cuas_lmax_radius = 3.5; // 4.5; // look inside ((int)cuas_lmax_radius) * 2 + 1 square for the local maximum isolation public double cuas_lmax_radius = 3.5; // 4.5; // look inside ((int)cuas_lmax_radius) * 2 + 1 square for the local maximum isolation
public boolean cuas_lmax_zero = false; // true; // zero all data outside this radius from the maximum public boolean cuas_lmax_zero = false; // true; // zero all data outside this radius from the maximum
public double cuas_centered_radius= 3.5; // in centered mode (target placed at [8,8] - zero out data outside peripheral areas, keep 0.5 at the radius
public double cuas_centered_blur = 0.5; // relative transition radius range (for 0.5 the mask inside (1-0.5) radius will be 1.0, outside (1+0.5) radius will be 0
public double cuas_duplicate_tolerance = 2.0; // (pix) Remove weaker maximums closer than this to a stronger one
public double cuas_target_radius = 3.0; // target centroids center radius public double cuas_target_radius = 3.0; // target centroids center radius
public double cuas_target_strength =0.8; // target centroids center radius public double cuas_target_strength =0.8; // target centroids center radius
...@@ -769,6 +772,9 @@ min_str_neib_fpn 0.35 ...@@ -769,6 +772,9 @@ min_str_neib_fpn 0.35
public double cuas_lma_arms = 0.4; // 0.06; // Maximal absolute RMS (should match one of cuas_lma_arms OR cuas_lma_rrms (0.484) public double cuas_lma_arms = 0.4; // 0.06; // Maximal absolute RMS (should match one of cuas_lma_arms OR cuas_lma_rrms (0.484)
public double cuas_lma_rrms = 0.2; // 0.15; // Maximal relative to A rms. OK is when (RMS < cuas_lma_arms) || (RMS < cuas_lma_rrms * A) public double cuas_lma_rrms = 0.2; // 0.15; // Maximal relative to A rms. OK is when (RMS < cuas_lma_arms) || (RMS < cuas_lma_rrms * A)
public double cuas_lma_mina = 0.7; // 1.0; // Minimal A (amplitude) = 1.0 (< 2.0) public double cuas_lma_mina = 0.7; // 1.0; // Minimal A (amplitude) = 1.0 (< 2.0)
public double cuas_lma_pre_mina = 0.5; // scale cuas_lma_mina to filter initial candidates (if there are > one of them)
public int cuas_min_keep = 2; // keep at least this number of candidates before using cuas_lma_pre_mina filter
public double cuas_lma_maxr = 5.0; // Maximal R (radius) =5.0 (> 3.8) public double cuas_lma_maxr = 5.0; // Maximal R (radius) =5.0 (> 3.8)
public double cuas_lma_minr1 = 1.0; // Minimal R1 (radius of positive peak) public double cuas_lma_minr1 = 1.0; // Minimal R1 (radius of positive peak)
public double cuas_lma_mink = 0.0; // Minimal K (overshoot) = 0.0 (<0.007) public double cuas_lma_mink = 0.0; // Minimal K (overshoot) = 0.0 (<0.007)
...@@ -779,16 +785,22 @@ min_str_neib_fpn 0.35 ...@@ -779,16 +785,22 @@ min_str_neib_fpn 0.35
public double cuas_score_lma = 0.0; // minimal score for the target LMA public double cuas_score_lma = 0.0; // minimal score for the target LMA
public double cuas_factor_lim = 5.0; // limit each individual score factor public double cuas_factor_lim = 5.0; // limit each individual score factor
public double cuas_factor_pow = 1.0; // raise score factor to this power before combining public double cuas_factor_pow = 1.0; // raise score factor to this power before combining
public double [] cuas_score_coeff = {1.0, 0.2, 1.0, 1.0, 1.0}; //weights of amplitude, RMSE and RMSE/amplitude public double [] cuas_score_coeff = {1.0, 0.2, 1.0, 1.0, 1.0, 1.0}; //weights of amplitude, RMSE and RMSE/amplitude, center, mismatch, match_length
public boolean cuas_center_targ = true; // re-run target extraction with targets centered to their tiles public boolean cuas_center_targ = true; // re-run target extraction with targets centered to their tiles
public boolean cuas_multi_targ = true; // Use multi-target for each tile mode
public boolean cuas_isolated = true; // remove targets that do not have neighbors before/after public boolean cuas_isolated = true; // remove targets that do not have neighbors before/after
public int cuas_min_seq = 3; // minimal number of consecutive key frames for the same target public int cuas_min_seq = 3; // minimal number of consecutive key frames for the same target
public int cuas_min_seq_fl = 2; // minimal number of consecutive key frames for the same target that includes first or last key frame public int cuas_min_seq_fl = 2; // minimal number of consecutive key frames for the same target that includes first or last key frame
// public boolean cuas_remove_2seq = true; // Remove 2-long target sequences consisting of 2 consecutive key frames // public boolean cuas_remove_2seq = true; // Remove 2-long target sequences consisting of 2 consecutive key frames
// public boolean cuas_remove_2seq_all=true; // Remove 2-long first/last target sequences // public boolean cuas_remove_2seq_all=true; // Remove 2-long first/last target sequences
public double cuas_max_mismatch = 2.0; // maximal position error between consecutive scene sequences public double cuas_max_mismatch = 2.0; // maximal position error between consecutive scene sequences
public double cuas_good_mismatch = 0.4; // maximal position error between consecutive scene sequences that adds to the score public double cuas_good_mismatch = 0.4; // maximal position error between consecutive scene sequences that adds to the score
public double cuas_match_len_pwr = 0.5; // raise matching length to this power for calculating score
public boolean cuas_fail_mismatch = false; // fail high mismatch early public boolean cuas_fail_mismatch = false; // fail high mismatch early
public boolean cuas_ignore_mismatch = false; // calculate mismatch but do not remove public boolean cuas_ignore_mismatch = false; // calculate mismatch but do not remove
...@@ -2305,14 +2317,19 @@ min_str_neib_fpn 0.35 ...@@ -2305,14 +2317,19 @@ min_str_neib_fpn 0.35
"Remove horizontal streaks, where average(abs()) for the line exceeds fraction of abs max(0.32-good max, 0.55 - bad max)."); "Remove horizontal streaks, where average(abs()) for the line exceeds fraction of abs max(0.32-good max, 0.55 - bad max).");
gd.addNumericField("Maximums separation radius", this.cuas_lmax_radius, 5,8,"pix", gd.addNumericField("Maximums separation radius", this.cuas_lmax_radius, 5,8,"pix",
"Look inside ((int)cuas_lmax_radius) * 2 + 1 square for the local maximum isolation ."); "Look inside ((int)cuas_lmax_radius) * 2 + 1 square for the local maximum isolation .");
gd.addCheckbox ("Zero far from maximums pixels", this.cuas_lmax_zero,
"Zero all data outside this radius from the maximum.");
gd.addNumericField("Mask radius in the centered mode ", this.cuas_centered_radius, 5,8,"pix",
"In centered mode (target placed at [8,8]) - zero out data outside peripheral areas, keep 0.5 at the radius.");
gd.addNumericField("Centered mask blur fraction", this.cuas_centered_blur, 5,8,"",
"Relative transition radius range (for 0.5 the mask inside (1-0.5) radius will be 1.0, outside (1+0.5) radius will be 0.");
gd.addNumericField("Duplicates offset tolerance", this.cuas_duplicate_tolerance, 5,8,"pix",
"Remove weaker maximums closer than this to a stronger one.");
gd.addCheckbox ("Zero far from maximums pixels", this.cuas_lmax_zero,
"Zero all data outside this radius from the maximum.");
gd.addNumericField("Target radius", this.cuas_target_radius, 5,8,"pix", gd.addNumericField("Target radius", this.cuas_target_radius, 5,8,"pix",
"Target radius, also used to calculate fraction of totals inside (windowed) to all positive values."); "Target radius, also used to calculate fraction of totals inside (windowed) to all positive values.");
gd.addNumericField("Minimal target strength", this.cuas_target_strength, 5,8,"", gd.addNumericField("Minimal target strength", this.cuas_target_strength, 5,8,"",
...@@ -2370,6 +2387,10 @@ min_str_neib_fpn 0.35 ...@@ -2370,6 +2387,10 @@ min_str_neib_fpn 0.35
"Maximal relative (to amplitude) RMS for target. Satisfying any of the absolute and relative is sufficient"); "Maximal relative (to amplitude) RMS for target. Satisfying any of the absolute and relative is sufficient");
gd.addNumericField("Minimal target amplitude", this.cuas_lma_mina, 5,8,"", gd.addNumericField("Minimal target amplitude", this.cuas_lma_mina, 5,8,"",
"Filter out weak targets."); "Filter out weak targets.");
gd.addNumericField("Scale minimal amplitude", this.cuas_lma_pre_mina, 5,8,"",
"Scale cuas_lma_mina to filter initial candidates (if there are > one of them).");
gd.addNumericField("Keep this number of weak", this.cuas_min_keep, 0,3,"",
"Keep at least this number of candidates before using cuas_lma_pre_mina filter.");
gd.addNumericField("Maximal radius", this.cuas_lma_maxr, 5,8,"pix", gd.addNumericField("Maximal radius", this.cuas_lma_maxr, 5,8,"pix",
"Maximal target radius including negative overshoot."); "Maximal target radius including negative overshoot.");
gd.addNumericField("Mimimal inner radius", this.cuas_lma_minr1, 5,8,"pix", gd.addNumericField("Mimimal inner radius", this.cuas_lma_minr1, 5,8,"pix",
...@@ -2391,18 +2412,16 @@ min_str_neib_fpn 0.35 ...@@ -2391,18 +2412,16 @@ min_str_neib_fpn 0.35
gd.addNumericField("Raise score factor to this power", this.cuas_factor_pow, 5,8,"", gd.addNumericField("Raise score factor to this power", this.cuas_factor_pow, 5,8,"",
"Raise each score factor to this power before combining them."); "Raise each score factor to this power before combining them.");
gd.addStringField ("Score factors weights", IntersceneMatchParameters.doublesToString(cuas_score_coeff), 80, gd.addStringField ("Score factors weights", IntersceneMatchParameters.doublesToString(cuas_score_coeff), 80,
"Relative importance of LMA amplitude, RMSE and RMSE/ampitude, before/after, far-from-edges."); "Relative importance of LMA amplitude, RMSE and RMSE/ampitude, center, before/after match, sqrt(match length).");
gd.addCheckbox ("Center targets in their tiles", this.cuas_center_targ, gd.addCheckbox ("Center targets in their tiles", this.cuas_center_targ,
"Re-run target extraction placing the targets at the center of their tiles."); "Re-run target extraction placing the targets at the center of their tiles.");
gd.addMessage("=== Post-processing targets filtering ==="); gd.addCheckbox ("Multi-target mode", this.cuas_multi_targ,
"Use multi-target (for each tile) mode.");
gd.addMessage("=== Post-processing targets filtering ===");
gd.addCheckbox ("Remove single-frame targets", this.cuas_isolated, gd.addCheckbox ("Remove single-frame targets", this.cuas_isolated,
"Remove targets that do not have neighbors before/after."); "Remove targets that do not have neighbors before/after.");
// gd.addCheckbox ("Remove pairs (but ends)", this.cuas_remove_2seq,
// "Remove short target sequences consisting of 2 consecutive key frames, except those including first/last sequence.");
// gd.addCheckbox ("Remove pairs everywhere", this.cuas_remove_2seq_all,
// "Remove short target sequences consisting of 2 consecutive key frames everywhere, including first/last keyframes.");
gd.addNumericField("Minimal sequence length", this.cuas_min_seq, 0,3,"key frames", gd.addNumericField("Minimal sequence length", this.cuas_min_seq, 0,3,"key frames",
"Minimal number of consecutive key frames for the target to be detected."); "Minimal number of consecutive key frames for the target to be detected.");
...@@ -2413,6 +2432,9 @@ min_str_neib_fpn 0.35 ...@@ -2413,6 +2432,9 @@ min_str_neib_fpn 0.35
"Maximal position error between consecutive scene sequences."); "Maximal position error between consecutive scene sequences.");
gd.addNumericField("Good mismatch", this.cuas_good_mismatch, 5,8,"pix", gd.addNumericField("Good mismatch", this.cuas_good_mismatch, 5,8,"pix",
"Maximal position error between consecutive scene sequences to add to the score."); "Maximal position error between consecutive scene sequences to add to the score.");
gd.addNumericField("Matching length power", this.cuas_match_len_pwr, 5,8,"",
"Raise matching length to this power for calculating score.");
gd.addCheckbox ("Fail mismatch early", this.cuas_fail_mismatch, gd.addCheckbox ("Fail mismatch early", this.cuas_fail_mismatch,
"Fail after score calculation if there is not match both before and after."); "Fail after score calculation if there is not match both before and after.");
gd.addCheckbox ("Ignore mismatch", this.cuas_ignore_mismatch, gd.addCheckbox ("Ignore mismatch", this.cuas_ignore_mismatch,
...@@ -3487,6 +3509,10 @@ min_str_neib_fpn 0.35 ...@@ -3487,6 +3509,10 @@ min_str_neib_fpn 0.35
this.cuas_lmax_hack_ridge = gd.getNextNumber(); this.cuas_lmax_hack_ridge = gd.getNextNumber();
this.cuas_lmax_radius = gd.getNextNumber(); this.cuas_lmax_radius = gd.getNextNumber();
this.cuas_lmax_zero = gd.getNextBoolean(); this.cuas_lmax_zero = gd.getNextBoolean();
this.cuas_centered_radius = gd.getNextNumber();
this.cuas_centered_blur = gd.getNextNumber();
this.cuas_duplicate_tolerance = gd.getNextNumber();
this.cuas_target_radius = gd.getNextNumber(); this.cuas_target_radius = gd.getNextNumber();
this.cuas_target_strength = gd.getNextNumber(); this.cuas_target_strength = gd.getNextNumber();
...@@ -3512,6 +3538,9 @@ min_str_neib_fpn 0.35 ...@@ -3512,6 +3538,9 @@ min_str_neib_fpn 0.35
this.cuas_lma_arms = gd.getNextNumber(); this.cuas_lma_arms = gd.getNextNumber();
this.cuas_lma_rrms = gd.getNextNumber(); this.cuas_lma_rrms = gd.getNextNumber();
this.cuas_lma_mina = gd.getNextNumber(); this.cuas_lma_mina = gd.getNextNumber();
this.cuas_lma_pre_mina = gd.getNextNumber();
this.cuas_min_keep = (int) gd.getNextNumber();
this.cuas_lma_maxr = gd.getNextNumber(); this.cuas_lma_maxr = gd.getNextNumber();
this.cuas_lma_minr1 = gd.getNextNumber(); this.cuas_lma_minr1 = gd.getNextNumber();
this.cuas_lma_mink = gd.getNextNumber(); this.cuas_lma_mink = gd.getNextNumber();
...@@ -3524,16 +3553,18 @@ min_str_neib_fpn 0.35 ...@@ -3524,16 +3553,18 @@ min_str_neib_fpn 0.35
this.cuas_factor_pow = gd.getNextNumber(); this.cuas_factor_pow = gd.getNextNumber();
this.cuas_score_coeff = IntersceneMatchParameters.StringToDoubles(gd.getNextString(), cuas_score_coeff); this.cuas_score_coeff = IntersceneMatchParameters.StringToDoubles(gd.getNextString(), cuas_score_coeff);
this.cuas_center_targ = gd.getNextBoolean(); this.cuas_center_targ = gd.getNextBoolean();
this.cuas_multi_targ = gd.getNextBoolean();
this.cuas_isolated = gd.getNextBoolean(); this.cuas_isolated = gd.getNextBoolean();
// this.cuas_remove_2seq = gd.getNextBoolean(); // this.cuas_remove_2seq = gd.getNextBoolean();
// this.cuas_remove_2seq_all = gd.getNextBoolean(); // this.cuas_remove_2seq_all = gd.getNextBoolean();
this.cuas_min_seq= (int) gd.getNextNumber(); this.cuas_min_seq= (int) gd.getNextNumber();
this.cuas_min_seq_fl= (int) gd.getNextNumber(); this.cuas_min_seq_fl= (int) gd.getNextNumber();
this.cuas_max_mismatch= gd.getNextNumber(); this.cuas_max_mismatch= gd.getNextNumber();
this.cuas_good_mismatch = gd.getNextNumber(); this.cuas_good_mismatch = gd.getNextNumber();
this.cuas_match_len_pwr = gd.getNextNumber();
this.cuas_fail_mismatch = gd.getNextBoolean(); this.cuas_fail_mismatch = gd.getNextBoolean();
this.cuas_ignore_mismatch = gd.getNextBoolean(); this.cuas_ignore_mismatch = gd.getNextBoolean();
...@@ -4493,7 +4524,11 @@ min_str_neib_fpn 0.35 ...@@ -4493,7 +4524,11 @@ min_str_neib_fpn 0.35
properties.setProperty(prefix+"cuas_lmax_hack_ridge", this.cuas_lmax_hack_ridge+"");// double properties.setProperty(prefix+"cuas_lmax_hack_ridge", this.cuas_lmax_hack_ridge+"");// double
properties.setProperty(prefix+"cuas_lmax_radius", this.cuas_lmax_radius+""); // double properties.setProperty(prefix+"cuas_lmax_radius", this.cuas_lmax_radius+""); // double
properties.setProperty(prefix+"cuas_lmax_zero", this.cuas_lmax_zero+""); // boolean properties.setProperty(prefix+"cuas_lmax_zero", this.cuas_lmax_zero+""); // boolean
properties.setProperty(prefix+"cuas_centered_radius", this.cuas_centered_radius+"");// double
properties.setProperty(prefix+"cuas_centered_blur", this.cuas_centered_blur+""); // double
properties.setProperty(prefix+"cuas_duplicate_tolerance",this.cuas_duplicate_tolerance+""); // double
properties.setProperty(prefix+"cuas_target_radius", this.cuas_target_radius+""); // double properties.setProperty(prefix+"cuas_target_radius", this.cuas_target_radius+""); // double
properties.setProperty(prefix+"cuas_target_strength", this.cuas_target_strength+"");// double properties.setProperty(prefix+"cuas_target_strength", this.cuas_target_strength+"");// double
properties.setProperty(prefix+"cuas_target_frac", double2dToString(cuas_target_frac)+""); // double[][] properties.setProperty(prefix+"cuas_target_frac", double2dToString(cuas_target_frac)+""); // double[][]
...@@ -4518,6 +4553,9 @@ min_str_neib_fpn 0.35 ...@@ -4518,6 +4553,9 @@ min_str_neib_fpn 0.35
properties.setProperty(prefix+"cuas_lma_arms", this.cuas_lma_arms+""); // double properties.setProperty(prefix+"cuas_lma_arms", this.cuas_lma_arms+""); // double
properties.setProperty(prefix+"cuas_lma_rrms", this.cuas_lma_rrms+""); // double properties.setProperty(prefix+"cuas_lma_rrms", this.cuas_lma_rrms+""); // double
properties.setProperty(prefix+"cuas_lma_mina", this.cuas_lma_mina+""); // double properties.setProperty(prefix+"cuas_lma_mina", this.cuas_lma_mina+""); // double
properties.setProperty(prefix+"cuas_lma_pre_mina", this.cuas_lma_pre_mina+""); // double
properties.setProperty(prefix+"cuas_min_keep", this.cuas_min_keep+""); // int
properties.setProperty(prefix+"cuas_lma_maxr", this.cuas_lma_maxr+""); // double properties.setProperty(prefix+"cuas_lma_maxr", this.cuas_lma_maxr+""); // double
properties.setProperty(prefix+"cuas_lma_minr1", this.cuas_lma_minr1+""); // double properties.setProperty(prefix+"cuas_lma_minr1", this.cuas_lma_minr1+""); // double
properties.setProperty(prefix+"cuas_lma_mink", this.cuas_lma_mink+""); // double properties.setProperty(prefix+"cuas_lma_mink", this.cuas_lma_mink+""); // double
...@@ -4530,6 +4568,7 @@ min_str_neib_fpn 0.35 ...@@ -4530,6 +4568,7 @@ min_str_neib_fpn 0.35
properties.setProperty(prefix+"cuas_factor_pow", this.cuas_factor_pow+""); // double properties.setProperty(prefix+"cuas_factor_pow", this.cuas_factor_pow+""); // double
properties.setProperty(prefix+"cuas_score_coeff", IntersceneMatchParameters.doublesToString(this.cuas_score_coeff)); properties.setProperty(prefix+"cuas_score_coeff", IntersceneMatchParameters.doublesToString(this.cuas_score_coeff));
properties.setProperty(prefix+"cuas_center_targ", this.cuas_center_targ+""); // boolean properties.setProperty(prefix+"cuas_center_targ", this.cuas_center_targ+""); // boolean
properties.setProperty(prefix+"cuas_multi_targ", this.cuas_multi_targ+""); // boolean
properties.setProperty(prefix+"cuas_isolated", this.cuas_isolated+""); // boolean properties.setProperty(prefix+"cuas_isolated", this.cuas_isolated+""); // boolean
...@@ -4538,11 +4577,10 @@ min_str_neib_fpn 0.35 ...@@ -4538,11 +4577,10 @@ min_str_neib_fpn 0.35
properties.setProperty(prefix+"cuas_min_seq", this.cuas_min_seq+""); // int properties.setProperty(prefix+"cuas_min_seq", this.cuas_min_seq+""); // int
properties.setProperty(prefix+"cuas_min_seq_fl", this.cuas_min_seq_fl+""); // int properties.setProperty(prefix+"cuas_min_seq_fl", this.cuas_min_seq_fl+""); // int
properties.setProperty(prefix+"cuas_max_mismatch", this.cuas_max_mismatch+""); // double properties.setProperty(prefix+"cuas_max_mismatch", this.cuas_max_mismatch+""); // double
properties.setProperty(prefix+"cuas_good_mismatch", this.cuas_good_mismatch+""); // double properties.setProperty(prefix+"cuas_good_mismatch", this.cuas_good_mismatch+""); // double
properties.setProperty(prefix+"cuas_match_len_pwr", this.cuas_match_len_pwr+""); // double
properties.setProperty(prefix+"cuas_fail_mismatch", this.cuas_fail_mismatch+""); // boolean properties.setProperty(prefix+"cuas_fail_mismatch", this.cuas_fail_mismatch+""); // boolean
properties.setProperty(prefix+"cuas_ignore_mismatch", this.cuas_ignore_mismatch+"");// boolean properties.setProperty(prefix+"cuas_ignore_mismatch", this.cuas_ignore_mismatch+"");// boolean
properties.setProperty(prefix+"cuas_by_horizon", this.cuas_by_horizon+""); // boolean properties.setProperty(prefix+"cuas_by_horizon", this.cuas_by_horizon+""); // boolean
...@@ -5472,6 +5510,10 @@ min_str_neib_fpn 0.35 ...@@ -5472,6 +5510,10 @@ min_str_neib_fpn 0.35
if (properties.getProperty(prefix+"cuas_lmax_radius")!=null) this.cuas_lmax_radius=Double.parseDouble(properties.getProperty(prefix+"cuas_lmax_radius")); if (properties.getProperty(prefix+"cuas_lmax_radius")!=null) this.cuas_lmax_radius=Double.parseDouble(properties.getProperty(prefix+"cuas_lmax_radius"));
if (properties.getProperty(prefix+"cuas_lmax_zero")!=null) this.cuas_lmax_zero=Boolean.parseBoolean(properties.getProperty(prefix+"cuas_lmax_zero")); if (properties.getProperty(prefix+"cuas_lmax_zero")!=null) this.cuas_lmax_zero=Boolean.parseBoolean(properties.getProperty(prefix+"cuas_lmax_zero"));
if (properties.getProperty(prefix+"cuas_centered_radius")!=null) this.cuas_centered_radius=Double.parseDouble(properties.getProperty(prefix+"cuas_centered_radius"));
if (properties.getProperty(prefix+"cuas_centered_blur")!=null) this.cuas_centered_blur=Double.parseDouble(properties.getProperty(prefix+"cuas_centered_blur"));
if (properties.getProperty(prefix+"cuas_duplicate_tolerance")!=null)this.cuas_duplicate_tolerance=Double.parseDouble(properties.getProperty(prefix+"cuas_duplicate_tolerance"));
if (properties.getProperty(prefix+"cuas_target_radius")!=null) this.cuas_target_radius=Double.parseDouble(properties.getProperty(prefix+"cuas_target_radius")); if (properties.getProperty(prefix+"cuas_target_radius")!=null) this.cuas_target_radius=Double.parseDouble(properties.getProperty(prefix+"cuas_target_radius"));
if (properties.getProperty(prefix+"cuas_target_strength")!=null) this.cuas_target_strength=Double.parseDouble(properties.getProperty(prefix+"cuas_target_strength")); if (properties.getProperty(prefix+"cuas_target_strength")!=null) this.cuas_target_strength=Double.parseDouble(properties.getProperty(prefix+"cuas_target_strength"));
if (properties.getProperty(prefix+"cuas_target_frac")!= null) cuas_target_frac=stringToDouble2d((String) properties.getProperty(prefix+"cuas_target_frac")); if (properties.getProperty(prefix+"cuas_target_frac")!= null) cuas_target_frac=stringToDouble2d((String) properties.getProperty(prefix+"cuas_target_frac"));
...@@ -5497,6 +5539,9 @@ min_str_neib_fpn 0.35 ...@@ -5497,6 +5539,9 @@ min_str_neib_fpn 0.35
if (properties.getProperty(prefix+"cuas_lma_arms")!=null) this.cuas_lma_arms=Double.parseDouble(properties.getProperty(prefix+"cuas_lma_arms")); if (properties.getProperty(prefix+"cuas_lma_arms")!=null) this.cuas_lma_arms=Double.parseDouble(properties.getProperty(prefix+"cuas_lma_arms"));
if (properties.getProperty(prefix+"cuas_lma_rrms")!=null) this.cuas_lma_rrms=Double.parseDouble(properties.getProperty(prefix+"cuas_lma_rrms")); if (properties.getProperty(prefix+"cuas_lma_rrms")!=null) this.cuas_lma_rrms=Double.parseDouble(properties.getProperty(prefix+"cuas_lma_rrms"));
if (properties.getProperty(prefix+"cuas_lma_mina")!=null) this.cuas_lma_mina=Double.parseDouble(properties.getProperty(prefix+"cuas_lma_mina")); if (properties.getProperty(prefix+"cuas_lma_mina")!=null) this.cuas_lma_mina=Double.parseDouble(properties.getProperty(prefix+"cuas_lma_mina"));
if (properties.getProperty(prefix+"cuas_lma_pre_mina")!=null) this.cuas_lma_pre_mina=Double.parseDouble(properties.getProperty(prefix+"cuas_lma_pre_mina"));
if (properties.getProperty(prefix+"cuas_min_keep")!=null) this.cuas_min_keep=Integer.parseInt(properties.getProperty(prefix+ "cuas_min_keep"));
if (properties.getProperty(prefix+"cuas_lma_maxr")!=null) this.cuas_lma_maxr=Double.parseDouble(properties.getProperty(prefix+"cuas_lma_maxr")); if (properties.getProperty(prefix+"cuas_lma_maxr")!=null) this.cuas_lma_maxr=Double.parseDouble(properties.getProperty(prefix+"cuas_lma_maxr"));
if (properties.getProperty(prefix+"cuas_lma_minr1")!=null) this.cuas_lma_minr1=Double.parseDouble(properties.getProperty(prefix+"cuas_lma_minr1")); if (properties.getProperty(prefix+"cuas_lma_minr1")!=null) this.cuas_lma_minr1=Double.parseDouble(properties.getProperty(prefix+"cuas_lma_minr1"));
if (properties.getProperty(prefix+"cuas_lma_mink")!=null) this.cuas_lma_mink=Double.parseDouble(properties.getProperty(prefix+"cuas_lma_mink")); if (properties.getProperty(prefix+"cuas_lma_mink")!=null) this.cuas_lma_mink=Double.parseDouble(properties.getProperty(prefix+"cuas_lma_mink"));
...@@ -5509,6 +5554,7 @@ min_str_neib_fpn 0.35 ...@@ -5509,6 +5554,7 @@ min_str_neib_fpn 0.35
if (properties.getProperty(prefix+"cuas_factor_pow")!=null) this.cuas_factor_pow=Double.parseDouble(properties.getProperty(prefix+"cuas_factor_pow")); if (properties.getProperty(prefix+"cuas_factor_pow")!=null) this.cuas_factor_pow=Double.parseDouble(properties.getProperty(prefix+"cuas_factor_pow"));
if (properties.getProperty(prefix+"cuas_score_coeff")!=null) this.cuas_score_coeff= IntersceneMatchParameters.StringToDoubles(properties.getProperty(prefix+"cuas_score_coeff"),this.cuas_score_coeff); if (properties.getProperty(prefix+"cuas_score_coeff")!=null) this.cuas_score_coeff= IntersceneMatchParameters.StringToDoubles(properties.getProperty(prefix+"cuas_score_coeff"),this.cuas_score_coeff);
if (properties.getProperty(prefix+"cuas_center_targ")!=null) this.cuas_center_targ=Boolean.parseBoolean(properties.getProperty(prefix+"cuas_center_targ")); if (properties.getProperty(prefix+"cuas_center_targ")!=null) this.cuas_center_targ=Boolean.parseBoolean(properties.getProperty(prefix+"cuas_center_targ"));
if (properties.getProperty(prefix+"cuas_multi_targ")!=null) this.cuas_multi_targ=Boolean.parseBoolean(properties.getProperty(prefix+"cuas_multi_targ"));
if (properties.getProperty(prefix+"cuas_isolated")!=null) this.cuas_isolated=Boolean.parseBoolean(properties.getProperty(prefix+"cuas_isolated")); if (properties.getProperty(prefix+"cuas_isolated")!=null) this.cuas_isolated=Boolean.parseBoolean(properties.getProperty(prefix+"cuas_isolated"));
// if (properties.getProperty(prefix+"cuas_remove_2seq")!=null) this.cuas_remove_2seq=Boolean.parseBoolean(properties.getProperty(prefix+"cuas_remove_2seq")); // if (properties.getProperty(prefix+"cuas_remove_2seq")!=null) this.cuas_remove_2seq=Boolean.parseBoolean(properties.getProperty(prefix+"cuas_remove_2seq"));
...@@ -5517,6 +5563,8 @@ min_str_neib_fpn 0.35 ...@@ -5517,6 +5563,8 @@ min_str_neib_fpn 0.35
if (properties.getProperty(prefix+"cuas_min_seq_fl")!=null) this.cuas_min_seq_fl=Integer.parseInt(properties.getProperty(prefix+"cuas_min_seq_fl")); if (properties.getProperty(prefix+"cuas_min_seq_fl")!=null) this.cuas_min_seq_fl=Integer.parseInt(properties.getProperty(prefix+"cuas_min_seq_fl"));
if (properties.getProperty(prefix+"cuas_max_mismatch")!=null) this.cuas_max_mismatch=Double.parseDouble(properties.getProperty(prefix+"cuas_max_mismatch")); if (properties.getProperty(prefix+"cuas_max_mismatch")!=null) this.cuas_max_mismatch=Double.parseDouble(properties.getProperty(prefix+"cuas_max_mismatch"));
if (properties.getProperty(prefix+"cuas_good_mismatch")!=null) this.cuas_good_mismatch=Double.parseDouble(properties.getProperty(prefix+"cuas_good_mismatch")); if (properties.getProperty(prefix+"cuas_good_mismatch")!=null) this.cuas_good_mismatch=Double.parseDouble(properties.getProperty(prefix+"cuas_good_mismatch"));
if (properties.getProperty(prefix+"cuas_match_len_pwr")!=null) this.cuas_match_len_pwr=Double.parseDouble(properties.getProperty(prefix+"cuas_match_len_pwr"));
if (properties.getProperty(prefix+"cuas_fail_mismatch")!=null) this.cuas_fail_mismatch=Boolean.parseBoolean(properties.getProperty(prefix+"cuas_fail_mismatch")); if (properties.getProperty(prefix+"cuas_fail_mismatch")!=null) this.cuas_fail_mismatch=Boolean.parseBoolean(properties.getProperty(prefix+"cuas_fail_mismatch"));
if (properties.getProperty(prefix+"cuas_ignore_mismatch")!=null) this.cuas_ignore_mismatch=Boolean.parseBoolean(properties.getProperty(prefix+"cuas_ignore_mismatch")); if (properties.getProperty(prefix+"cuas_ignore_mismatch")!=null) this.cuas_ignore_mismatch=Boolean.parseBoolean(properties.getProperty(prefix+"cuas_ignore_mismatch"));
...@@ -6445,6 +6493,13 @@ min_str_neib_fpn 0.35 ...@@ -6445,6 +6493,13 @@ min_str_neib_fpn 0.35
imp.cuas_lmax_radius = this.cuas_lmax_radius; imp.cuas_lmax_radius = this.cuas_lmax_radius;
imp.cuas_lmax_zero = this.cuas_lmax_zero; imp.cuas_lmax_zero = this.cuas_lmax_zero;
imp.cuas_centered_radius = this.cuas_centered_radius;
imp.cuas_centered_blur = this.cuas_centered_blur;
imp.cuas_duplicate_tolerance = this.cuas_duplicate_tolerance;
imp.cuas_target_radius = this.cuas_target_radius;
imp.cuas_target_strength = this.cuas_target_strength;
imp.cuas_target_frac = new double [this.cuas_target_frac.length][]; imp.cuas_target_frac = new double [this.cuas_target_frac.length][];
for (int i = 0; i < this.cuas_target_frac.length; i++) { for (int i = 0; i < this.cuas_target_frac.length; i++) {
imp.cuas_target_frac[i] = this.cuas_target_frac[i].clone(); imp.cuas_target_frac[i] = this.cuas_target_frac[i].clone();
...@@ -6470,6 +6525,9 @@ min_str_neib_fpn 0.35 ...@@ -6470,6 +6525,9 @@ min_str_neib_fpn 0.35
imp.cuas_lma_arms = this.cuas_lma_arms; imp.cuas_lma_arms = this.cuas_lma_arms;
imp.cuas_lma_rrms = this.cuas_lma_rrms; imp.cuas_lma_rrms = this.cuas_lma_rrms;
imp.cuas_lma_mina = this.cuas_lma_mina; imp.cuas_lma_mina = this.cuas_lma_mina;
imp.cuas_lma_pre_mina = this.cuas_lma_pre_mina;
imp.cuas_min_keep = this.cuas_min_keep;
imp.cuas_lma_maxr = this.cuas_lma_maxr; imp.cuas_lma_maxr = this.cuas_lma_maxr;
imp.cuas_lma_minr1 = this.cuas_lma_minr1; imp.cuas_lma_minr1 = this.cuas_lma_minr1;
imp.cuas_lma_mink = this.cuas_lma_mink; imp.cuas_lma_mink = this.cuas_lma_mink;
...@@ -6482,6 +6540,7 @@ min_str_neib_fpn 0.35 ...@@ -6482,6 +6540,7 @@ min_str_neib_fpn 0.35
imp.cuas_factor_pow = this.cuas_factor_pow; imp.cuas_factor_pow = this.cuas_factor_pow;
imp.cuas_score_coeff = this.cuas_score_coeff.clone(); imp.cuas_score_coeff = this.cuas_score_coeff.clone();
imp.cuas_center_targ = this.cuas_center_targ; imp.cuas_center_targ = this.cuas_center_targ;
imp.cuas_multi_targ = this.cuas_multi_targ;
imp.cuas_isolated = this.cuas_isolated; imp.cuas_isolated = this.cuas_isolated;
// imp.cuas_remove_2seq = this.cuas_remove_2seq; // imp.cuas_remove_2seq = this.cuas_remove_2seq;
...@@ -6489,9 +6548,10 @@ min_str_neib_fpn 0.35 ...@@ -6489,9 +6548,10 @@ min_str_neib_fpn 0.35
imp.cuas_min_seq = this.cuas_min_seq; imp.cuas_min_seq = this.cuas_min_seq;
imp.cuas_min_seq_fl = this.cuas_min_seq_fl; imp.cuas_min_seq_fl = this.cuas_min_seq_fl;
imp.cuas_max_mismatch = this.cuas_max_mismatch; imp.cuas_max_mismatch = this.cuas_max_mismatch;
imp.cuas_good_mismatch = this.cuas_good_mismatch; imp.cuas_good_mismatch = this.cuas_good_mismatch;
imp.cuas_match_len_pwr = this.cuas_match_len_pwr;
imp.cuas_fail_mismatch = this.cuas_fail_mismatch; imp.cuas_fail_mismatch = this.cuas_fail_mismatch;
imp.cuas_ignore_mismatch = this.cuas_ignore_mismatch; imp.cuas_ignore_mismatch = this.cuas_ignore_mismatch;
imp.cuas_by_horizon = this.cuas_by_horizon; imp.cuas_by_horizon = this.cuas_by_horizon;
......
...@@ -5882,6 +5882,15 @@ if (debugLevel < -100) { ...@@ -5882,6 +5882,15 @@ if (debugLevel < -100) {
UasLogReader uasLogReader, UasLogReader uasLogReader,
String [] scene_titles, // recreate slice_titles from scene titles? String [] scene_titles, // recreate slice_titles from scene titles?
final int debugLevel) { final int debugLevel) {
CuasMotion.processMovingTargetsMulti(
clt_parameters, // CLTParameters clt_parameters,
batch_mode, // final boolean batch_mode,
this, // QuadCLT parentCLT, //
fpixels, // final float [][] fpixels,
uasLogReader, // UasLogReader uasLogReader,
scene_titles, // String [] scene_titles, // recreate slice_titles from scene titles?
debugLevel); // final int debugLevel)
/*
CuasMotion.processMovingTargets( CuasMotion.processMovingTargets(
clt_parameters, // CLTParameters clt_parameters, clt_parameters, // CLTParameters clt_parameters,
batch_mode, // final boolean batch_mode, batch_mode, // final boolean batch_mode,
...@@ -5890,6 +5899,7 @@ if (debugLevel < -100) { ...@@ -5890,6 +5899,7 @@ if (debugLevel < -100) {
uasLogReader, // UasLogReader uasLogReader, uasLogReader, // UasLogReader uasLogReader,
scene_titles, // String [] scene_titles, // recreate slice_titles from scene titles? scene_titles, // String [] scene_titles, // recreate slice_titles from scene titles?
debugLevel); // final int debugLevel) debugLevel); // final int debugLevel)
*/
} }
} }
...@@ -5034,9 +5034,7 @@ public class QuadCLTCPU { ...@@ -5034,9 +5034,7 @@ public class QuadCLTCPU {
System.out.println("Configuration parameters are saved to " + save_path); System.out.println("Configuration parameters are saved to " + save_path);
return; return;
} }
} }
} }
return; 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