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