Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
I
imagej-elphel
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
3
Issues
3
List
Board
Labels
Milestones
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Elphel
imagej-elphel
Commits
8a35a76a
Commit
8a35a76a
authored
Jan 15, 2026
by
Andrey Filippov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Improving terrain view generation
parent
347ad4b0
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
282 additions
and
52 deletions
+282
-52
CuasRanging.java
src/main/java/com/elphel/imagej/cuas/CuasRanging.java
+1
-0
ErsCorrection.java
...n/java/com/elphel/imagej/tileprocessor/ErsCorrection.java
+3
-0
IntersceneMatchParameters.java
...lphel/imagej/tileprocessor/IntersceneMatchParameters.java
+22
-3
OpticalFlow.java
...ain/java/com/elphel/imagej/tileprocessor/OpticalFlow.java
+243
-49
TwoQuadCLT.java
...main/java/com/elphel/imagej/tileprocessor/TwoQuadCLT.java
+13
-0
No files found.
src/main/java/com/elphel/imagej/cuas/CuasRanging.java
View file @
8a35a76a
...
...
@@ -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,
...
...
src/main/java/com/elphel/imagej/tileprocessor/ErsCorrection.java
View file @
8a35a76a
...
...
@@ -527,6 +527,9 @@ public class ErsCorrection extends GeometryCorrection {
return
scene
.
getErsATR_d2t
();
}
public
boolean
contains
(
String
timestamp
)
{
return
(
scenes_poses
.
get
(
timestamp
)
!=
null
);
}
/**
...
...
src/main/java/com/elphel/imagej/tileprocessor/IntersceneMatchParameters.java
View file @
8a35a76a
...
...
@@ -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
;
...
...
src/main/java/com/elphel/imagej/tileprocessor/OpticalFlow.java
View file @
8a35a76a
...
...
@@ -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,12 +7373,29 @@ 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, // boolean um_mono,
clt_parameters.imp.add_average, // boolean insert_average,
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,
...
...
@@ -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,11 +7432,30 @@ 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, // boolean um_mono,
clt_parameters.imp.add_average, // boolean insert_average,
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,
...
...
@@ -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)
...
...
@@ -7479,26 +7518,20 @@ public class OpticalFlow {
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,
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,
1
,
// int mode3d, // for older compatibility mode3d = -1 for RAW, 0 - INF, 1 - FG, 2 BG
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,
scenes_suffix
,
// String suffix_in
,
terrain_disparity
,
// double []
ref_disparity,
quadCLTs
,
// QuadCLT [] quadCLTs,
master_CLT
,
// ref_index, // int ref_index,
threadsMax
,
// int threadsMax,
debugLevel
);
// int debugLevel);
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)
...
...
@@ -7536,26 +7569,20 @@ public class OpticalFlow {
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,
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,
1
,
// int mode3d, // for older compatibility mode3d = -1 for RAW, 0 - INF, 1 - FG, 2 BG
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,
scenes_suffix
,
// String suffix_in
,
terrain_disparity
,
// double []
ref_disparity,
quadCLTs
,
// QuadCLT [] quadCLTs,
master_CLT
,
// ref_index, // int ref_index,
threadsMax
,
// int threadsMax,
debugLevel
);
// int debugLevel);
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,
...
...
@@ -9037,11 +9065,77 @@ 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
++)
{
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
,
...
...
src/main/java/com/elphel/imagej/tileprocessor/TwoQuadCLT.java
View file @
8a35a76a
...
...
@@ -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"
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment