Commit 8a35a76a authored by Andrey Filippov's avatar Andrey Filippov

Improving terrain view generation

parent 347ad4b0
......@@ -152,6 +152,7 @@ public class CuasRanging {
true, // center_CLT.hasCenterClt(), // boolean mode_cuas,
false, // clt_parameters.imp.um_mono, // boolean um_mono,
clt_parameters.imp.calculate_average, // boolean insert_average, // then add new parameter, keep add average
null, // int [] average_range,
average_channels, // average_slice,
clt_parameters.imp.subtract_average, // boolean subtract_average,
clt_parameters.imp.running_average, // int running_average,
......
......@@ -527,6 +527,9 @@ public class ErsCorrection extends GeometryCorrection {
return scene.getErsATR_d2t();
}
public boolean contains(String timestamp) {
return (scenes_poses.get(timestamp) != null);
}
/**
......
......@@ -1140,7 +1140,10 @@ min_str_neib_fpn 0.35
public double video_bitrate_m = 50; // video bitrate in megabits/sec
public String video_codec_combo = "vp8"; // applies when combining videos
public int video_crf_combo = 40; // lower - better, larger file size applies when combining videos
public boolean add_average = true;
public boolean add_average = true; // calculate and add average of all scenes
public boolean add_center_average = true; // calculate and add average of the center fraction of all scenes
public double center_avg_frac = 0.5; // center fraction of all scenes
public boolean calculate_average = false; // Calculate average from the slices. False - use CLT average if available.
public boolean subtract_average = false;
public int running_average = 0;
......@@ -3292,7 +3295,12 @@ min_str_neib_fpn 0.35
gd.addNumericField("Video CRF for combining", this.video_crf_combo, 0,3,"",
"Quality - the lower the better. 40 - OK. Applies when merging segments.");
gd.addCheckbox ("Insert average slice", this.add_average,
"Insert average slice before scene slices");
"Calculate and insert averaging of all scenes in a sequence as the first slice.");
gd.addCheckbox ("Insert average of the center scenes", this.add_center_average,
"Calculate and insert averaging of the center scenes in a sequence as the second slice slice.");
gd.addNumericField("Center fraction of all scenes", this.center_avg_frac, 5,7,"pix",
"Second average slice of the center scenes. 0.5 means averaging from 25% to 75% af the scene sequence .");
gd.addCheckbox ("Calculate average from slices", this.calculate_average,
"Calculate average slice from other slices. If false - try to use average CLT if available.");
gd.addCheckbox ("Subtract average", this.subtract_average,
......@@ -4544,6 +4552,8 @@ min_str_neib_fpn 0.35
this.video_codec_combo= gd.getNextString();
this.video_crf_combo = (int) gd.getNextNumber();
this.add_average = gd.getNextBoolean();
this.add_center_average = gd.getNextBoolean();
this.center_avg_frac = gd.getNextNumber();
this.calculate_average = gd.getNextBoolean();
this.subtract_average = gd.getNextBoolean();
this.running_average = (int) gd.getNextNumber();
......@@ -5746,6 +5756,8 @@ min_str_neib_fpn 0.35
properties.setProperty(prefix+"video_codec_combo", this.video_codec_combo+""); // String
properties.setProperty(prefix+"video_crf_combo", this.video_crf_combo+""); // int
properties.setProperty(prefix+"add_average", this.add_average+""); // boolean
properties.setProperty(prefix+"add_center_average", this.add_center_average+""); // boolean
properties.setProperty(prefix+"center_avg_frac", this.center_avg_frac+""); // double
properties.setProperty(prefix+"calculate_average", this.calculate_average+""); // boolean
properties.setProperty(prefix+"subtract_average", this.subtract_average+""); // boolean
properties.setProperty(prefix+"running_average", this.running_average+""); // int
......@@ -6942,8 +6954,12 @@ min_str_neib_fpn 0.35
if (properties.getProperty(prefix+"video_codec_combo")!=null) this.video_codec_combo=(String) properties.getProperty(prefix+"video_codec_combo");
if (properties.getProperty(prefix+"video_crf_combo")!=null) this.video_crf_combo=Integer.parseInt(properties.getProperty(prefix+"video_crf_combo"));
if (properties.getProperty(prefix+"add_average")!=null) this.add_average=Boolean.parseBoolean(properties.getProperty(prefix+"add_average"));
if (properties.getProperty(prefix+"add_center_average")!=null) this.add_center_average=Boolean.parseBoolean(properties.getProperty(prefix+"add_center_average"));
if (properties.getProperty(prefix+"center_avg_frac")!=null) this.center_avg_frac=Double.parseDouble(properties.getProperty(prefix+"center_avg_frac"));
if (properties.getProperty(prefix+"calculate_average")!=null) this.calculate_average=Boolean.parseBoolean(properties.getProperty(prefix+"calculate_average"));
//
if (properties.getProperty(prefix+"subtract_average")!=null) this.subtract_average=Boolean.parseBoolean(properties.getProperty(prefix+"subtract_average"));
if (properties.getProperty(prefix+"running_average")!=null) this.running_average=Integer.parseInt(properties.getProperty(prefix+"running_average"));
if (properties.getProperty(prefix+"extract_center_orientation")!=null)this.extract_center_orientation=Boolean.parseBoolean(properties.getProperty(prefix+"extract_center_orientation"));
......@@ -8113,6 +8129,9 @@ min_str_neib_fpn 0.35
imp.video_codec_combo = this.video_codec_combo;
imp.video_crf_combo = this.video_crf_combo;
imp.add_average = this.add_average;
imp.add_center_average = this.add_center_average;
imp.center_avg_frac = this.center_avg_frac;
imp.calculate_average = this.calculate_average;
imp.subtract_average = this.subtract_average;
imp.running_average = this.running_average;
......
......@@ -6840,6 +6840,7 @@ public class OpticalFlow {
master_CLT.hasCenterClt(), // boolean mode_cuas,
false, // clt_parameters.imp.um_mono, // boolean um_mono,
clt_parameters.imp.calculate_average, // boolean insert_average, // then add new parameter, keep add average
null, // int [] average_range,
average_channels, // average_slice,
clt_parameters.imp.subtract_average, // boolean subtract_average,
clt_parameters.imp.running_average, // int running_average,
......@@ -7372,13 +7373,30 @@ public class OpticalFlow {
} else {
double [] terrain_disparity = combo_dsn_final[COMBO_DSN_INDX_TERRAIN];
String scenes_suffix_disp = master_CLT.getImageName()+"-TERRAIN-DISP"+extra_suffix;
ImagePlus imp_terrain_disp = renderSceneSequence(
clt_parameters, // CLTParameters clt_parameters,
false, // boolean um_mono,
null, // float [][] average_slice, // [channel][pixel]
clt_parameters.imp.subtract_average, // boolean subtract_average,
clt_parameters.imp.running_average, // int running_average,
null, // Rectangle fov_tiles,
1, // int mode3d, // for older compatibility mode3d = -1 for RAW, 0 - INF, 1 - FG, 2 BG
false, // boolean toRGB,
null, // double [][] ground_xyzatr,
1, // int sensor_mask,
scenes_suffix_disp, // String suffix_in,
terrain_disparity, // double [] ref_disparity,
quadCLTs, // QuadCLT [] quadCLTs,
master_CLT, // QuadCLT ref_scene, // int ref_index,
debugLevel); // int debugLevel) {
/*
ImagePlus imp_terrain_disp = renderSceneSequence(
clt_parameters, // CLTParameters clt_parameters,
false, // master_CLT.hasCenterClt(), // boolean mode_cuas,
false, // master_CLT.hasCenterClt(), // boolean mode_cuas,
false, // boolean um_mono,
clt_parameters.imp.add_average, // boolean insert_average,
null, // float [] average_slice,
new int[0], // int [] average_range,
null, // float [] average_slice,
clt_parameters.imp.subtract_average, // boolean subtract_average,
clt_parameters.imp.running_average, // int running_average,
null, // Rectangle fov_tiles,
......@@ -7393,6 +7411,7 @@ public class OpticalFlow {
master_CLT, // ref_index, // int ref_index,
threadsMax, // int threadsMax,
debugLevel); // int debugLevel);
*/
master_CLT.saveImagePlusInModelDirectory(
null, // "GPU-SHIFTED-D"+clt_parameters.disparity, // String suffix,
imp_terrain_disp); // imp_scenes); // ImagePlus imp)
......@@ -7413,12 +7432,31 @@ public class OpticalFlow {
} else {
double [] terrain_disparity = combo_dsn_final[COMBO_DSN_INDX_TERRAIN];
String scenes_suffix_disp = master_CLT.getImageName()+"-TERRAIN-DISP";
ImagePlus imp_terrain_disp = renderSceneSequence(
clt_parameters, // CLTParameters clt_parameters,
false, // boolean um_mono,
null, // float [][] average_slice, // [channel][pixel]
clt_parameters.imp.subtract_average, // boolean subtract_average,
clt_parameters.imp.running_average, // int running_average,
null, // Rectangle fov_tiles,
1, // int mode3d, // for older compatibility mode3d = -1 for RAW, 0 - INF, 1 - FG, 2 BG
false, // boolean toRGB,
null, // double [][] ground_xyzatr,
1, // int sensor_mask,
scenes_suffix_disp, // String suffix_in,
terrain_disparity, // double [] ref_disparity,
quadCLTs, // QuadCLT [] quadCLTs,
master_CLT, // QuadCLT ref_scene, // int ref_index,
debugLevel); // int debugLevel) {
/*
ImagePlus imp_terrain_disp = renderSceneSequence(
clt_parameters, // CLTParameters clt_parameters,
false, // master_CLT.hasCenterClt(), // boolean mode_cuas,
false, // master_CLT.hasCenterClt(), // boolean mode_cuas,
false, // boolean um_mono,
clt_parameters.imp.add_average, // boolean insert_average,
null, // float [] average_slice,
new int[0], // int [] average_range,
null, // float [] average_slice,
clt_parameters.imp.subtract_average, // boolean subtract_average,
clt_parameters.imp.running_average, // int running_average,
null, // Rectangle fov_tiles,
......@@ -7433,6 +7471,7 @@ public class OpticalFlow {
master_CLT, // ref_index, // int ref_index,
threadsMax, // int threadsMax,
debugLevel); // int debugLevel);
*/
master_CLT.saveImagePlusInModelDirectory(
null, // "GPU-SHIFTED-D"+clt_parameters.disparity, // String suffix,
imp_terrain_disp); // imp_scenes); // ImagePlus imp)
......@@ -7478,27 +7517,21 @@ public class OpticalFlow {
double [] terrain_disparity = combo_dsn_final[COMBO_DSN_INDX_TERRAIN];
String scenes_suffix = master_CLT.getImageName()+"-TERRAIN"+extra_suffix; // quadCLTs[quadCLTs.length-1][quadCLTs.length-1].getImageName()+"-TERRAIN";
ImagePlus imp_terrain = renderSceneSequence(
clt_parameters, // CLTParameters clt_parameters,
false, // master_CLT.hasCenterClt(), // boolean mode_cuas,
false, // boolean um_mono,
clt_parameters.imp.add_average, // boolean insert_average,
null, // float [] average_slice,
clt_parameters, // CLTParameters clt_parameters,
false, // boolean um_mono,
null, // float [][] average_slice, // [channel][pixel]
clt_parameters.imp.subtract_average, // boolean subtract_average,
clt_parameters.imp.running_average, // int running_average,
null, // Rectangle fov_tiles,
1, // int mode3d,
false, // boolean toRGB,
ignp, // double [][] ground_xyzatr,
ZERO3, //ignp[0], // ZERO3, // stereo_offset, // ZERO3, // stereo_offset, // ZERO3, // double [] stereo_offset, // offset reference camera {x,y,z}
null, //gnp[1], // ZERO3, //stereo_atr, // null, // stereo_atr, // null, // double [] stereo_atr, // offset reference orientation (cuas)
null, // ignp, // new double [][] {stereo_offset,stereo_atr}, //
1, // int sensor_mask,
scenes_suffix, // String suffix,
terrain_disparity, // selected_disparity, // double [] ref_disparity,
quadCLTs, // QuadCLT [] quadCLTs,
master_CLT, // ref_index, // int ref_index,
threadsMax, // int threadsMax,
debugLevel); // int debugLevel);
null, // Rectangle fov_tiles,
1, // int mode3d, // for older compatibility mode3d = -1 for RAW, 0 - INF, 1 - FG, 2 BG
false, // boolean toRGB,
ignp, // double [][] ground_xyzatr,
1, // int sensor_mask,
scenes_suffix, // String suffix_in,
terrain_disparity, // double [] ref_disparity,
quadCLTs, // QuadCLT [] quadCLTs,
master_CLT, // QuadCLT ref_scene, // int ref_index,
debugLevel); // int debugLevel) {
master_CLT.saveImagePlusInModelDirectory(
null, // "GPU-SHIFTED-D"+clt_parameters.disparity, // String suffix,
imp_terrain); // imp_scenes); // ImagePlus imp)
......@@ -7535,27 +7568,21 @@ public class OpticalFlow {
double [] terrain_disparity = combo_dsn_final[COMBO_DSN_INDX_TERRAIN];
String scenes_suffix = master_CLT.getImageName()+"-TERRAIN"; // quadCLTs[quadCLTs.length-1][quadCLTs.length-1].getImageName()+"-TERRAIN";
ImagePlus imp_terrain = renderSceneSequence(
clt_parameters, // CLTParameters clt_parameters,
false, // master_CLT.hasCenterClt(), // boolean mode_cuas,
false, // boolean um_mono,
clt_parameters.imp.add_average, // boolean insert_average,
null, // float [] average_slice,
clt_parameters, // CLTParameters clt_parameters,
false, // boolean um_mono,
null, // float [][] average_slice, // [channel][pixel]
clt_parameters.imp.subtract_average, // boolean subtract_average,
clt_parameters.imp.running_average, // int running_average,
null, // Rectangle fov_tiles,
1, // int mode3d,
false, // boolean toRGB,
ignp, // double [][] ground_xyzatr,
ZERO3, //ignp[0], // ZERO3, // stereo_offset, // ZERO3, // stereo_offset, // ZERO3, // double [] stereo_offset, // offset reference camera {x,y,z}
null, //gnp[1], // ZERO3, //stereo_atr, // null, // stereo_atr, // null, // double [] stereo_atr, // offset reference orientation (cuas)
null, // ignp, // new double [][] {stereo_offset,stereo_atr}, //
1, // int sensor_mask,
scenes_suffix, // String suffix,
terrain_disparity, // selected_disparity, // double [] ref_disparity,
quadCLTs, // QuadCLT [] quadCLTs,
master_CLT, // ref_index, // int ref_index,
threadsMax, // int threadsMax,
debugLevel); // int debugLevel);
null, // Rectangle fov_tiles,
1, // int mode3d, // for older compatibility mode3d = -1 for RAW, 0 - INF, 1 - FG, 2 BG
false, // boolean toRGB,
ignp, // double [][] ground_xyzatr,
1, // int sensor_mask,
scenes_suffix, // String suffix_in,
terrain_disparity, // double [] ref_disparity,
quadCLTs, // QuadCLT [] quadCLTs,
master_CLT, // QuadCLT ref_scene, // int ref_index,
debugLevel); // int debugLevel) {
master_CLT.saveImagePlusInModelDirectory(
null, // "GPU-SHIFTED-D"+clt_parameters.disparity, // String suffix,
imp_terrain); // imp_scenes); // ImagePlus imp)
......@@ -7574,6 +7601,7 @@ public class OpticalFlow {
master_CLT.hasCenterClt(), // boolean mode_cuas,
false, // boolean um_mono,
clt_parameters.imp.add_average, // boolean insert_average,
null, // int [] average_range,
null, // average_slice,
clt_parameters.imp.subtract_average, // boolean subtract_average,
clt_parameters.imp.running_average, // int running_average,
......@@ -9036,12 +9064,78 @@ public class OpticalFlow {
}
return min_max_xyzatr;
}
public static ImagePlus renderSceneSequence(
CLTParameters clt_parameters,
// boolean mode_cuas,
boolean um_mono,
// boolean calculate_average, // now only with float pixels
// int [] average_range,
float [][] average_slice, // [channel][pixel]
boolean subtract_average,
int running_average,
Rectangle fov_tiles,
int mode3d, // for older compatibility mode3d = -1 for RAW, 0 - INF, 1 - FG, 2 BG
boolean toRGB,
double [][] ground_xyzatr,
// double [] stereo_xyz, // offset reference camera {x,y,z}
// double [] stereo_atr_in, // offset reference orientation (cuas)
int sensor_mask,
String suffix_in,
double [] ref_disparity,
QuadCLT [] quadCLTs,
QuadCLT ref_scene, // int ref_index,
// int threadsMax,
int debugLevel) {
QuadCLT[] selected_scenes = selectScenes(quadCLTs, ref_scene);
int num_scenes = selected_scenes.length;
if (num_scenes == 0) {
return null;
}
boolean add_average = clt_parameters.imp.add_average; // calculate and add average of all scenes
boolean add_center_average = clt_parameters.imp.add_center_average; // additionally, calculate and add average of the center fraction of all scenes
double center_avg_frac = clt_parameters.imp.center_avg_frac;// center fraction of all scenes
int [] average_range = (add_center_average && add_average) ? new int[2]:null;
if (average_range != null) {
average_range[0] = (int) Math.round (num_scenes * (1 - center_avg_frac)/2);
average_range[0] = Math.max(0, average_range[0]);
average_range[0] = Math.min(num_scenes-1, average_range[0]);
average_range[1] = num_scenes-1 - average_range[0];
average_range[1] = Math.max(average_range[0],average_range[1]);
average_range[1] = Math.min(num_scenes-1, average_range[1]);
}
return renderSceneSequence(
clt_parameters, // CLTParameters clt_parameters,
false, // boolean mode_cuas,
um_mono, // boolean um_mono,
add_average, // boolean calculate_average, // now only with float pixels
average_range, // int [] average_range,
average_slice, // float [][] average_slice, // [channel][pixel]
subtract_average, // boolean subtract_average,
running_average, // int running_average,
fov_tiles, // Rectangle fov_tiles,
mode3d, // int mode3d, // for older compatibility mode3d = -1 for RAW, 0 - INF, 1 - FG, 2 BG
toRGB, // boolean toRGB,
ground_xyzatr, // double [][] ground_xyzatr,
ZERO3, // double [] stereo_xyz, // offset reference camera {x,y,z}
null, // double [] stereo_atr_in, // offset reference orientation (cuas)
null, // double [][] post_rotate,
sensor_mask, // int sensor_mask,
suffix_in, // String suffix_in,
ref_disparity, // double [] ref_disparity,
selected_scenes, // QuadCLT [] quadCLTs,
ref_scene, // QuadCLT ref_scene, // int ref_index,
ImageDtt.THREADS_MAX, // int threadsMax,
debugLevel); // int debugLevel)
}
public static ImagePlus renderSceneSequence(
CLTParameters clt_parameters,
boolean mode_cuas,
boolean um_mono,
boolean calculate_average, // now only with float pixels
int [] average_range,
float [][] average_slice, // [channel][pixel]
boolean subtract_average,
int running_average,
......@@ -9062,6 +9156,7 @@ public class OpticalFlow {
mode_cuas, // boolean mode_cuas,
um_mono, // boolean um_mono,
calculate_average, // boolean calculate_average, // now only with float pixels
average_range, // int [] average_range,
average_slice, //float [][] average_slice, // [channel][pixel]
subtract_average, // boolean subtract_average,
running_average, // int running_average,
......@@ -9085,6 +9180,7 @@ public class OpticalFlow {
boolean mode_cuas,
boolean um_mono,
boolean calculate_average, // now only with float pixels
int [] average_range,
float [][] average_slice, // [channel][pixel]
boolean subtract_average,
int running_average,
......@@ -9277,6 +9373,10 @@ public class OpticalFlow {
ref_scene, // final QuadCLT reference_QuadClt, // now - may be null - for testing if scene is rotated ref
threadsMax); // int threadsMax)
}
int num_avg_slices = 0;
int avg_first_scene = 0;
int avg_last_scene = quadCLTs.length - 1;
for (int nscene = 0; nscene < quadCLTs.length ; nscene++) if (quadCLTs[nscene] != null){
if (nscene== dbg_scene) {
System.out.println("renderSceneSequence(): nscene = "+nscene);
......@@ -9387,15 +9487,41 @@ public class OpticalFlow {
QuadCLT.THREADS_MAX, // int threadsMax,
debugLevel); // int debugLevel)
}
if (stack_scenes == null) {
if (stack_scenes == null) { // not yet started the stack, got first image
stack_scenes = new ImageStack(imp_scene.getWidth(),imp_scene.getHeight());
if (insert_average) {
for (int i = 0; i < channels.length; i++) {
stack_scenes.addSlice(
"average-"+i,
new float[((float[])imp_scene.getStack().getPixels(i+1)).length]);
if (channels.length == 1) {
stack_scenes.addSlice(
"average",
new float[((float[])imp_scene.getStack().getPixels(i+1)).length]); // will be overwritten with actual averages
} else {
stack_scenes.addSlice(
"average-"+i,
new float[((float[])imp_scene.getStack().getPixels(i+1)).length]);
}
}
num_avg_slices++;
if (average_range != null) {
int last_predicted_scene = quadCLTs.length - 1; // possible nulls will be skipped, so final stack may be smaller
if (average_range.length == 0) {
average_range = new int [] {last_predicted_scene/4, (3*last_predicted_scene)/4};
}
for (int i = 0; i < channels.length; i++) {
if (channels.length == 1) {
stack_scenes.addSlice(
"average-"+average_range[0]+":"+average_range[1],
new float[((float[])imp_scene.getStack().getPixels(i+1)).length]); // will be overwritten with actual averages
} else {
stack_scenes.addSlice(
"average-chn"+i+"-"+average_range[0]+":"+average_range[1],
new float[((float[])imp_scene.getStack().getPixels(i+1)).length]);
}
}
num_avg_slices++;
}
}
}
for (int i = 0; i < channels.length; i++) {
stack_scenes.addSlice(
......@@ -9404,6 +9530,44 @@ public class OpticalFlow {
}
}
if (insert_average) { // calculate average to average slices (one per channel)
// calculate average from all scenes
int num_scenes = (stack_scenes.getSize() / channels.length) - num_avg_slices; // remove averages (1 or 2)
for (int navg = 0; navg < num_avg_slices; navg++) {
if ((navg == 0) && (average_slice != null)) { // pre-calculated average
for (int nchn = 0; nchn < channels.length; nchn++) {
float [] avg_slice = (float[]) stack_scenes.getPixels(nchn+1);
System.arraycopy(
average_slice[nchn],
0,
avg_slice,
0,
average_slice[nchn].length);
}
} else {
int first_scene = (navg == 0) ? 0: Math.max(0, average_range[0]);
int last_scene = (navg == 0) ? num_scenes-1: Math.min(num_scenes-1, average_range[1]);
for (int nchn = 0; nchn < channels.length; nchn++) {
float [] avg_slice = (float[]) stack_scenes.getPixels(nchn + navg*channels.length +1);
int [] avg_n = new int[avg_slice.length];
int num_pix = avg_slice.length;
for (int nscene = first_scene; nscene <= last_scene; nscene++) {
float [] fpixels = (float[]) stack_scenes.getPixels(nchn + (nscene + num_avg_slices)*channels.length + 1);
for (int npix = 0; npix < num_pix; npix++) if (!Float.isNaN(fpixels[npix])){
avg_slice[npix] += fpixels[npix];
avg_n[npix]++;
}
}
for (int npix = 0; npix < num_pix; npix++) {
if (avg_n[npix] > 0) {
avg_slice[npix] /= avg_n[npix];
}else {
avg_slice[npix] = Float.NaN;
}
}
}
}
}
/*
if (average_slice != null) {
for (int nchn = 0; nchn < channels.length; nchn++) {
float [] avg_slice = (float[]) stack_scenes.getPixels(nchn+1);
......@@ -9415,13 +9579,28 @@ public class OpticalFlow {
average_slice[nchn].length);
}
} else {
int num_scenes = (stack_scenes.getSize() / channels.length) -1; // remove average
int num_scenes = (stack_scenes.getSize() / channels.length) - num_avg_slices; // remove averages (1 or 2)
// single-threaded
int first_scene = 0;
int last_scene = num_scenes - 1;
if (average_range != null) {
if (average_range.length == 0) {
average_range = new int [] {last_scene/4, (3*last_scene)/4};
}
first_scene = Math.max(first_scene, average_range[0]);
last_scene = Math.min(last_scene, average_range[1]);
}
for (int nchn = 0; nchn < channels.length; nchn++) {
String label_avg = (channels.length==1) ? "average":("average-"+nchn);
if ((first_scene != 0) || (last_scene != (num_scenes - 1))) {
label_avg+="-+"+first_scene+":"+last_scene;
}
stack_scenes.setSliceLabel(label_avg, nchn+1);
float [] avg_slice = (float[]) stack_scenes.getPixels(nchn+1);
int [] avg_n = new int[avg_slice.length];
int num_pix = avg_slice.length;
for (int nscene = 0; nscene < num_scenes; nscene++) {
for (int nscene = first_scene; nscene <= last_scene; nscene++) {
float [] fpixels = (float[]) stack_scenes.getPixels(nchn + (nscene+1)*channels.length + 1);
for (int npix = 0; npix < num_pix; npix++) if (!Float.isNaN(fpixels[npix])){
avg_slice[npix] += fpixels[npix];
......@@ -9437,6 +9616,7 @@ public class OpticalFlow {
}
}
}
*/
// seems that fpixels are automatically updated in the images
}
if (running_average >1) {
......@@ -9500,6 +9680,20 @@ public class OpticalFlow {
return imp_scenes;
}
public static QuadCLT[] selectScenes(
QuadCLT[] quadCLTs,
QuadCLT ref_scene) {
ArrayList<QuadCLT> scene_list = new ArrayList<QuadCLT>();
ErsCorrection ers_reference = ref_scene.getErsCorrection();
for (QuadCLT scene:quadCLTs) if (scene != null){
if (ers_reference.contains(scene.getImageName())) {
scene_list.add(scene);
}
}
return scene_list.toArray(new QuadCLT[0]);
}
public static ImagePlus applyUM (
final String title, // should include -UM...
final ImagePlus imp,
......
......@@ -8620,6 +8620,7 @@ if (debugLevel > -100) return true; // temporarily !
IJ.d2s(0.000000001*(System.nanoTime()-start_time_all),3)+" sec from the overall start\n");
break;
}
// first_in_series = false; // at least once success in this series
System.out.println("adding to video_sets_list start="+start_ref_pointers[0]+", end="+ref_index); // start_ref_pointers[1]);
// if ((video_list != null) && (video_list.length>0) && (video_list[0] == null)) {
......@@ -8634,7 +8635,19 @@ if (debugLevel > -100) return true; // temporarily !
start_ref_pointers[0], // int earliest_scene,
ref_index)); // start_ref_pointers[1])); // int reference_scene);
// testing half-step
if (start_ref_pointers[0] >= (min_num_scenes-1)) {
System.out.println("testing half-step: start_ref_pointers[0]="+start_ref_pointers[0]+
", start_ref_pointers[1]="+start_ref_pointers[1]+", ref_index="+ref_index);
int offset = (start_ref_pointers[1] - start_ref_pointers[0])/2;
start_ref_pointers[0] += offset;
start_ref_pointers[1] += offset;
System.out.println("testing half-step: start_ref_pointers[0]="+start_ref_pointers[0]+
", start_ref_pointers[1]="+start_ref_pointers[1]+", ref_index="+ref_index);
}
String series_action = (start_ref_pointers[0] < (min_num_scenes-1))?"is FINISHED ":("will continue down from scene "+(start_ref_pointers[0]));
System.out.println("\n ----- PROCESSING SCENE SEQUENCE "+nseq+" (last is "+(num_seq-1)+") "+series_action+" in "+
IJ.d2s(0.000000001*(System.nanoTime()-start_time_seq),3)+" sec ("+
IJ.d2s(0.000000001*(System.nanoTime()-start_time_all),3)+" sec from the overall start\n");
......
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