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
379f3835
Commit
379f3835
authored
May 21, 2025
by
Andrey Filippov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Saving center CLT and weights
parent
c216c7e4
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
73 additions
and
8 deletions
+73
-8
OpticalFlow.java
...ain/java/com/elphel/imagej/tileprocessor/OpticalFlow.java
+46
-8
QuadCLT.java
src/main/java/com/elphel/imagej/tileprocessor/QuadCLT.java
+7
-0
QuadCLTCPU.java
...main/java/com/elphel/imagej/tileprocessor/QuadCLTCPU.java
+20
-0
No files found.
src/main/java/com/elphel/imagej/tileprocessor/OpticalFlow.java
View file @
379f3835
...
...
@@ -5915,11 +5915,12 @@ public class OpticalFlow {
cuas_atr
=
new
double
[]
{
center_ATR
[
0
][
0
],
center_ATR
[
0
][
1
],
center_ATR
[
0
][
2
]};
}
boolean
combine_clt
=
true
;
boolean
combine_clt
=
(
cuas_atr
[
0
]
!=
0
)
||
(
cuas_atr
[
1
]
!=
0
)
||
(
cuas_atr
[
2
]
!=
0
)
;
if
(
combine_clt
)
{
boolean
apply_clt
=
true
;
// set GPU with data
boolean
show_clt
=
true
;
boolean
merge_clt
=
true
;
boolean
save_clt
=
true
;
QuadCLT
ref_clt
=
quadCLTs
[
ref_index
];
int
sensor_mask_clt
=
-
1
;
// all
...
...
@@ -5937,9 +5938,10 @@ public class OpticalFlow {
dls
,
// double [][] dls
quadCLTs
[
ref_index
],
// QuadCLT scene,
debugLevel
);
float
[][]
combo_seq_clt
=
getTDComboSceneSequence
(
boolean
save_weights
=
true
;
float
[][]
combo_seq_clt
_w
=
getTDComboSceneSequence
(
clt_parameters
,
// CLTParameters clt_parameters,
save_weights
,
// boolean save_weights, // output corresponding weights for each data
merge_clt
,
// boolean merge_all,
sensor_mask_clt
,
// int sensor_mask,
null
,
// Rectangle fov_tiles,
...
...
@@ -5949,6 +5951,36 @@ public class OpticalFlow {
quadCLTs
,
// QuadCLT [] quadCLTs,
ref_clt
,
// QuadCLT refCLT, // should be the same instance if one of quadCLTs
debugLevel
);
// int debugLevel)
float
[][]
combo_seq_clt
=
save_weights
?
new
float
[
combo_seq_clt_w
.
length
/
2
][]:
combo_seq_clt_w
;
if
(
save_weights
)
{
// remove second half (weights as integer numbers)
for
(
int
i
=
0
;
i
<
combo_seq_clt
.
length
;
i
++)
{
combo_seq_clt
[
i
]
=
combo_seq_clt_w
[
i
];
}
}
if
(
save_clt
)
{
int
[]
wh_c
=
ref_clt
.
getWHC
(
false
);
//final int tile_size_td = 4 * GPUTileProcessor.DTT_SIZE * GPUTileProcessor.DTT_SIZE;
final
int
width_clt
=
wh_c
[
0
]
*
2
;
// to make image dimensions similar
final
int
height_clt
=
combo_seq_clt
[
0
].
length
/
width_clt
;
String
[]
clt_titles
=
new
String
[
combo_seq_clt_w
.
length
];
for
(
int
i
=
0
;
i
<
combo_seq_clt
.
length
;
i
++)
{
clt_titles
[
i
]
=
"chn-"
+
i
;
if
(
save_weights
)
{
clt_titles
[
i
+
combo_seq_clt
.
length
]
=
"weight-"
+
i
;
}
}
String
suffix_clt
=
"-clt_combo"
;
if
(
save_weights
)
{
suffix_clt
+=
"_weights"
;
}
ref_clt
.
saveFloatArrayInModelDirectory
(
// error
suffix_clt
,
// String suffix,
clt_titles
,
// combo_dsn_titles_full, // null, // String [] labels, // or null
combo_seq_clt_w
,
// dbg_data, // float [][] data,
width_clt
,
// int width,
height_clt
);
// int height)
}
int
[]
whc
=
new
int
[
3
];
if
(
apply_clt
)
{
// set GPU with data
quadCLTs
[
ref_index
].
setComboToTD
(
...
...
@@ -8169,8 +8201,9 @@ public class OpticalFlow {
public
static
float
[][]
getTDComboSceneSequence
(
CLTParameters
clt_parameters
,
boolean
merge_all
,
int
sensor_mask
,
final
boolean
save_weights
,
// output corresponding weights for each data
final
boolean
merge_all
,
final
int
sensor_mask
,
Rectangle
fov_tiles
,
double
[]
stereo_xyz
,
// offset reference camera {x,y,z}
double
[]
stereo_atr_in
,
// offset reference orientation (cuas)
...
...
@@ -8222,12 +8255,14 @@ public class OpticalFlow {
sc0
=
nscene
;
break
;
}
final
float
[][]
sumFclt
=
new
float
[
merge_all
?
1
:
quadCLTs
[
sc0
].
getNumSensors
()][
quadCLTs
[
sc0
].
getCltSize
(
false
)];
final
int
[][]
numAcc
=
new
int
[
sumFclt
.
length
][
sumFclt
[
0
].
length
];
final
int
num_slices
=
merge_all
?
1
:
quadCLTs
[
sc0
].
getNumSensors
();
final
float
[][]
sumFclt
=
new
float
[
num_slices
*
(
save_weights
?
2
:
1
)][
quadCLTs
[
sc0
].
getCltSize
(
false
)];
final
int
[][]
numAcc
=
new
int
[
num_slices
][
sumFclt
[
0
].
length
];
// next two to improve multithreading performance
final
int
tile_size_td
=
4
*
GPUTileProcessor
.
DTT_SIZE
*
GPUTileProcessor
.
DTT_SIZE
;
final
int
tiles_td
=
sumFclt
[
0
].
length
/
tile_size_td
;
final
int
tiles_td_all
=
tiles_td
*
sumFclt
.
length
;
// usually sumFclt.length==1
final
int
tiles_td_all
=
tiles_td
*
num_slices
;
// usually sumFclt.length==1
final
Thread
[]
threads
=
ImageDtt
.
newThreadArray
(
THREADS_MAX
);
final
AtomicInteger
ai
=
new
AtomicInteger
(
0
);
...
...
@@ -8363,6 +8398,9 @@ public class OpticalFlow {
}
else
{
sumFclt
[
nsens
][
indx
]
=
Float
.
NaN
;
}
if
(
save_weights
)
{
sumFclt
[
nsens
+
num_slices
][
indx
]
=
numAcc
[
nsens
][
indx
];
}
}
}
}
...
...
src/main/java/com/elphel/imagej/tileprocessor/QuadCLT.java
View file @
379f3835
...
...
@@ -2616,6 +2616,7 @@ public class QuadCLT extends QuadCLTCPU {
public
int
getCltSize
(
boolean
use_ref
)
{
// per sensor, in floats
return
gpuQuad
.
getCltSize
(
use_ref
);
}
public
int
getNumSensors
()
{
// Use QCC - this one may be null
if
(
gpuQuad
!=
null
)
{
return
gpuQuad
.
getNumSensors
();
...
...
@@ -2623,6 +2624,12 @@ public class QuadCLT extends QuadCLTCPU {
return
super
.
getNumSensors
();
}
public
int
[]
getWHC
(
boolean
use_reference
)
{
final
int
[]
width_height
=
gpuQuad
.
getWH
(
use_reference
);
final
int
num_colors
=
gpuQuad
.
getNumColors
();
return
new
int
[]
{
width_height
[
0
],
width_height
[
1
],
num_colors
};
}
/**
* Get individual or combined transform domain data from the GPU
* @param sensor_mask bitmask of the sensors to use
...
...
src/main/java/com/elphel/imagej/tileprocessor/QuadCLTCPU.java
View file @
379f3835
...
...
@@ -5117,6 +5117,26 @@ public class QuadCLTCPU {
return
imp
;
}
public
ImagePlus
saveFloatArrayInModelDirectory
(
String
suffix
,
String
[]
labels
,
// or null
float
[][]
data
,
int
width
,
int
height
)
{
String
x3d_path
=
getX3dDirectory
();
String
file_name
=
image_name
+
suffix
;
String
file_path
=
x3d_path
+
Prefs
.
getFileSeparator
()
+
file_name
+
".tiff"
;
ImageStack
imageStack
=
ShowDoubleFloatArrays
.
makeStack
(
data
,
width
,
height
,
labels
,
false
);
ImagePlus
imp
=
new
ImagePlus
(
file_name
,
imageStack
);
FileSaver
fs
=
new
FileSaver
(
imp
);
fs
.
saveAsTiff
(
file_path
);
System
.
out
.
println
(
"saveFloatArrayInModelDirectory(): saved "
+
file_path
);
return
imp
;
}
public
ImagePlus
saveDoubleArrayInTopModelDirectory
(
String
suffix
,
String
[]
labels
,
// or null
...
...
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