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
f62718b1
Commit
f62718b1
authored
Oct 23, 2020
by
Andrey Filippov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Before Java 1.8
parent
3f43f2ac
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
509 additions
and
122 deletions
+509
-122
Eyesis_Correction.java
.../java/com/elphel/imagej/correction/Eyesis_Correction.java
+80
-0
ErsCorrection.java
...n/java/com/elphel/imagej/tileprocessor/ErsCorrection.java
+39
-12
GeometryCorrection.java
...a/com/elphel/imagej/tileprocessor/GeometryCorrection.java
+4
-2
IntersceneLma.java
...n/java/com/elphel/imagej/tileprocessor/IntersceneLma.java
+25
-9
OpticalFlow.java
...ain/java/com/elphel/imagej/tileprocessor/OpticalFlow.java
+287
-95
OpticalFlowParameters.java
...om/elphel/imagej/tileprocessor/OpticalFlowParameters.java
+8
-3
TwoQuadCLT.java
...main/java/com/elphel/imagej/tileprocessor/TwoQuadCLT.java
+66
-1
No files found.
src/main/java/com/elphel/imagej/correction/Eyesis_Correction.java
View file @
f62718b1
...
...
@@ -702,6 +702,7 @@ private Panel panel1,
addButton
(
"Inter Test"
,
panelClt5
,
color_stop
);
addButton
(
"Inter Pairs"
,
panelClt5
,
color_process
);
addButton
(
"Inter LMA"
,
panelClt5
,
color_stop
);
addButton
(
"Inter Series"
,
panelClt5
,
color_process
);
plugInFrame
.
add
(
panelClt5
);
}
...
...
@@ -5116,6 +5117,14 @@ private Panel panel1,
CLT_PARAMETERS
.
batch_run
=
true
;
interPairsLMA
();
return
;
/* ======================================================================== */
}
else
if
(
label
.
equals
(
"Inter Series"
))
{
DEBUG_LEVEL
=
MASTER_DEBUG_LEVEL
;
EYESIS_CORRECTIONS
.
setDebug
(
DEBUG_LEVEL
);
CLT_PARAMETERS
.
batch_run
=
true
;
interSeriesLMA
();
return
;
/* ======================================================================== */
}
else
if
(
label
.
equals
(
"Inter LMA"
))
{
DEBUG_LEVEL
=
MASTER_DEBUG_LEVEL
;
...
...
@@ -6636,6 +6645,77 @@ private Panel panel1,
}
public
boolean
interSeriesLMA
()
{
long
startTime
=
System
.
nanoTime
();
// load needed sensor and kernels files
if
(!
prepareRigImages
())
return
false
;
String
configPath
=
getSaveCongigPath
();
if
(
configPath
.
equals
(
"ABORT"
))
return
false
;
setAllProperties
(
PROPERTIES
);
// batchRig may save properties with the model. Extrinsics will be updated, others should be set here
if
(
DEBUG_LEVEL
>
-
2
){
System
.
out
.
println
(
"++++++++++++++ Testing Interscene processing ++++++++++++++"
);
}
if
(
CLT_PARAMETERS
.
useGPU
())
{
// only init GPU instances if it is used
if
(
GPU_TILE_PROCESSOR
==
null
)
{
try
{
GPU_TILE_PROCESSOR
=
new
GPUTileProcessor
(
CORRECTION_PARAMETERS
.
tile_processor_gpu
);
}
catch
(
Exception
e
)
{
System
.
out
.
println
(
"Failed to initialize GPU class"
);
// TODO Auto-generated catch block
e
.
printStackTrace
();
return
false
;
}
//final int debugLevel);
}
if
(
CLT_PARAMETERS
.
useGPU
(
false
)
&&
(
QUAD_CLT
!=
null
)
&&
(
GPU_QUAD
==
null
))
{
// if GPU main is needed
try
{
GPU_QUAD
=
GPU_TILE_PROCESSOR
.
new
GpuQuad
(
QUAD_CLT
,
4
,
3
);
}
catch
(
Exception
e
)
{
System
.
out
.
println
(
"Failed to initialize GpuQuad class"
);
// TODO Auto-generated catch block
e
.
printStackTrace
();
return
false
;
}
//final int debugLevel);
QUAD_CLT
.
setGPU
(
GPU_QUAD
);
}
}
try
{
TWO_QUAD_CLT
.
interSeriesLMA
(
QUAD_CLT
,
// QuadCLT quadCLT_main,
// QUAD_CLT_AUX, // QuadCLT quadCLT_aux,
CLT_PARAMETERS
,
// EyesisCorrectionParameters.DCTParameters dct_parameters,
DEBAYER_PARAMETERS
,
//EyesisCorrectionParameters.DebayerParameters debayerParameters,
COLOR_PROC_PARAMETERS
,
//EyesisCorrectionParameters.ColorProcParameters colorProcParameters,
COLOR_PROC_PARAMETERS_AUX
,
//EyesisCorrectionParameters.ColorProcParameters colorProcParameters_aux,
CHANNEL_GAINS_PARAMETERS
,
//CorrectionColorProc.ColorGainsParameters channelGainParameters,
RGB_PARAMETERS
,
//EyesisCorrectionParameters.RGBParameters rgbParameters,
EQUIRECTANGULAR_PARAMETERS
,
// EyesisCorrectionParameters.EquirectangularParameters equirectangularParameters,
PROPERTIES
,
// Properties properties,
true
,
// false, // boolean reset_from_extrinsics,
THREADS_MAX
,
//final int threadsMax, // maximal number of threads to launch
UPDATE_STATUS
,
//final boolean updateStatus,
DEBUG_LEVEL
);
}
catch
(
Exception
e
)
{
// TODO Auto-generated catch block
e
.
printStackTrace
();
}
//final int debugLevel);
if
(
configPath
!=
null
)
{
saveTimestampedProperties
(
// save config again
configPath
,
// full path or null
null
,
// use as default directory if path==null
true
,
PROPERTIES
);
}
System
.
out
.
println
(
"batchRig(): Processing finished at "
+
IJ
.
d2s
(
0.000000001
*(
System
.
nanoTime
()-
startTime
),
3
)+
" sec, --- Free memory="
+
Runtime
.
getRuntime
().
freeMemory
()+
" (of "
+
Runtime
.
getRuntime
().
totalMemory
()+
")"
);
return
true
;
}
...
...
src/main/java/com/elphel/imagej/tileprocessor/ErsCorrection.java
View file @
f62718b1
...
...
@@ -232,7 +232,20 @@ public class ErsCorrection extends GeometryCorrection {
public
double
[]
getErsATR_d2t
()
{
return
ers_watr_center_d2t
;
}
public
void
setErsDt
(
double
[]
ers_xyz_dt
,
double
[]
ers_atr_dt
)
{
this
.
ers_wxyz_center_dt
=
ers_xyz_dt
;
this
.
ers_watr_center_dt
=
ers_atr_dt
;
}
public
void
setErsD2t
(
double
[]
ers_xyz_d2t
,
double
[]
ers_atr_d2t
)
{
this
.
ers_wxyz_center_d2t
=
ers_xyz_d2t
;
this
.
ers_watr_center_d2t
=
ers_atr_d2t
;
}
...
...
@@ -286,7 +299,7 @@ public class ErsCorrection extends GeometryCorrection {
String
prefix
=
parent_prefix
+
SCENES_PREFIX
+
"_"
;
for
(
Enumeration
<?>
e
=
properties
.
propertyNames
();
e
.
hasMoreElements
();)
{
String
key
=
(
String
)
e
.
nextElement
();
if
(
key
.
startsWith
(
prefix
)
)
{
if
(
key
.
startsWith
(
prefix
)
&&
!
key
.
endsWith
(
"t"
))
{
// _dt, _d2t
timestamps
.
add
(
key
.
substring
(
prefix
.
length
()));
}
}
...
...
@@ -899,15 +912,6 @@ public class ErsCorrection extends GeometryCorrection {
if
(
xyzw
==
null
)
{
return
null
;
}
if
(
xyzw
[
3
]
==
0.0
)
{
// infinity
/*
if (xyzw[2] > 0) {
for (int i = 0; i < 3; i++) {
xyzw[i] = -xyzw[i];
}
}
*/
}
if
(
xyzw
[
2
]
>
0
)
{
return
null
;
// can not match object behind the camera
}
...
...
@@ -1914,6 +1918,23 @@ public class ErsCorrection extends GeometryCorrection {
}
}
public
static
double
[][]
combineXYZATR
(
double
[]
reference_xyz
,
double
[]
reference_atr
,
double
[]
scene_xyz
,
double
[]
scene_atr
)
{
Rotation
ref_rotation
=
new
Rotation
(
RotationOrder
.
YXZ
,
ROT_CONV
,
reference_atr
[
0
],
reference_atr
[
1
],
reference_atr
[
2
]);
Rotation
scene_rotation
=
new
Rotation
(
RotationOrder
.
YXZ
,
ROT_CONV
,
scene_atr
[
0
],
scene_atr
[
1
],
scene_atr
[
2
]);
Vector3D
ref_offset
=
new
Vector3D
(
reference_xyz
);
Vector3D
scene_offset
=
new
Vector3D
(
scene_xyz
);
Vector3D
offset
=
ref_offset
.
add
(
ref_rotation
.
applyTo
(
scene_offset
));
Rotation
rotation
=
ref_rotation
.
applyTo
(
scene_rotation
);
double
[]
angles
=
rotation
.
getAngles
(
RotationOrder
.
YXZ
,
ROT_CONV
);
double
[]
xyz
=
offset
.
toArray
();
return
new
double
[][]
{
xyz
,
angles
};
}
public
double
[]
getImageCoordinatesERS
(
double
[]
xyzw
,
...
...
@@ -2155,6 +2176,9 @@ public class ErsCorrection extends GeometryCorrection {
double
[][]
derivatives
=
new
double
[
DP_NUM_PARS
+
1
][];
// includes [0] - pXpYD vector
// scene pX, pY, Disparity
derivatives
[
0
]
=
pXpYD_scene
;
if
(
Double
.
isNaN
(
pXpYD_scene
[
0
])
||
Double
.
isNaN
(
pXpYD_scene
[
1
])
||
Double
.
isNaN
(
pXpYD_scene
[
2
]))
{
return
null
;
}
// derivatives by the reference parameters, starting with /dpX, /dpY, /dd
for
(
int
indx
=
DW_DPX
;
indx
<=
DW_DZ
;
indx
++)
{
int
vindx
=
indx
+
1
;
...
...
@@ -2167,6 +2191,9 @@ public class ErsCorrection extends GeometryCorrection {
}
else
{
derivatives
[
vindx
]
=
matrixTimesVector
(
dpscene_dxyz
,
reference_vectors
[
vindx
]).
toArray
();
}
if
(
Double
.
isNaN
(
derivatives
[
vindx
][
0
])
||
Double
.
isNaN
(
derivatives
[
vindx
][
1
])
||
Double
.
isNaN
(
derivatives
[
vindx
][
2
]))
{
return
null
;
}
}
for
(
int
indx
=
DP_DSVAZ
;
indx
<
DP_NUM_PARS
;
indx
++)
{
// 15,16, ...
int
indx_out
=
indx
+
1
;
// 16, 17,
...
...
@@ -2216,7 +2243,7 @@ public class ErsCorrection extends GeometryCorrection {
double
pYcd
=
pXpYD
[
1
]
-
0.5
*
this
.
pixelCorrectionHeight
;
double
r_scale
=
0.001
*
this
.
pixelSize
/
this
.
distortionRadius
;
double
rDn
=
Math
.
sqrt
(
pXcd
*
pXcd
+
pYcd
*
pYcd
)
*
r_scale
;
// relative to distortion radius
double
rND2RD
=
correctDistortions
?(
getRByRDist
(
rDn
,
false
)):
1.0
;
double
rND2RD
=
correctDistortions
?(
getRByRDist
(
rDn
,
false
)):
1.0
;
// NaN
// rD - in mm
// double rD = rDn * this.distortionRadius; // Math.sqrt(pXcd*pXcd + pYcd*pYcd)*0.001*this.pixelSize; // distorted radius in a virtual center camera
// pXc, pYc - in pixels
...
...
src/main/java/com/elphel/imagej/tileprocessor/GeometryCorrection.java
View file @
f62718b1
...
...
@@ -4403,13 +4403,15 @@ matrix([[-0.125, -0.125, 0.125, 0.125, -0.125, 0.125, -0. , -0. , -0.
}
if
(
rDist
<
0
)
{
// not used in lwir
if
(
debug
)
System
.
out
.
println
(
"getRByRDist("
+
IJ
.
d2s
(
rDist
,
3
)+
"): rDist < 0"
);
r
eturn
Double
.
NaN
;
r
Dist
=
0.0
;
//
Double.NaN;
}
double
findex
=
rDist
/
this
.
stepR
;
int
index
=(
int
)
Math
.
floor
(
findex
);
if
(
index
>=(
this
.
rByRDist
.
length
-
2
))
{
// not used in lwir
if
(
debug
)
System
.
out
.
println
(
"getRByRDist("
+
IJ
.
d2s
(
rDist
,
3
)+
"): index="
+
index
+
">="
+(
this
.
rByRDist
.
length
-
2
));
return
Double
.
NaN
;
// happens for 3D points far offcenter, should be filtered out by FoV
return
this
.
rByRDist
.
length
-
1
;
// return Double.NaN;
}
double
mu
=
findex
-
index
;
double
mu2
=
mu
*
mu
;
...
...
src/main/java/com/elphel/imagej/tileprocessor/IntersceneLma.java
View file @
f62718b1
...
...
@@ -176,7 +176,7 @@ public class IntersceneLma {
scenesCLT
[
1
],
// final QuadCLT scene_QuadClt,
scenesCLT
[
0
],
// final QuadCLT reference_QuadClt,
debug_level
);
// final int debug_level)
double
[][]
wjtj
=
getWJtJlambda
(
// USED in lwir
double
[][]
wjtj
=
getWJtJlambda
(
// USED in lwir
all NAN
0.0
,
// final double lambda,
last_jt
);
// final double [][] jt)
for
(
int
i
=
0
;
i
<
parameters_vector
.
length
;
i
++)
{
...
...
@@ -252,7 +252,7 @@ public class IntersceneLma {
}
}
else
{
// improved over initial ?
if
(
last_rms
[
0
]
<
initial_rms
[
0
])
{
if
(
last_rms
[
0
]
<
initial_rms
[
0
])
{
// NaN
rslt
[
0
]
=
true
;
if
(
debug_level
>
0
)
System
.
out
.
println
(
"Step "
+
iter
+
": Failed to converge, but result improved over initial"
);
}
else
{
...
...
@@ -270,6 +270,16 @@ public class IntersceneLma {
}
}
}
if
((
debug_level
>
-
2
)
&&
!
rslt
[
0
])
{
// failed
if
((
debug_level
>
1
)
||
(
iter
==
1
)
||
last_run
)
{
System
.
out
.
println
(
"LMA failed on iteration = "
+
iter
);
String
[]
lines
=
printOldNew
(
true
);
// boolean allvectors)
for
(
String
line
:
lines
)
{
System
.
out
.
println
(
line
);
}
}
System
.
out
.
println
();
}
return
rslt
[
0
]?
iter
:
-
1
;
}
...
...
@@ -487,6 +497,9 @@ public class IntersceneLma {
double
full_weight
=
asum_weight
.
sum
();
pure_weight
=
s_pure
/
full_weight
;
final
double
s
=
1.0
/
asum_weight
.
sum
();
if
(
Double
.
isNaN
(
s
))
{
System
.
out
.
println
(
"normalizeWeights(): s == NaN"
);
}
ai
.
set
(
0
);
for
(
int
ithread
=
0
;
ithread
<
threads
.
length
;
ithread
++)
{
threads
[
ithread
]
=
new
Thread
()
{
...
...
@@ -578,13 +591,16 @@ public class IntersceneLma {
scene_rot_matrix
,
// Matrix scene_rot_matrix, // single rotation (direct) matrix for the scene
debug_level
);
// int debug_level);
if
(
deriv_params
!=
null
)
{
fx
[
2
*
iMTile
+
0
]
=
deriv_params
[
0
][
0
];
// pX
fx
[
2
*
iMTile
+
1
]
=
deriv_params
[
0
][
1
];
// pY
if
(
jt
!=
null
)
{
for
(
int
i
=
0
;
i
<
par_indices
.
length
;
i
++)
{
int
indx
=
par_indices
[
i
]
+
1
;
jt
[
i
][
2
*
iMTile
+
0
]
=
deriv_params
[
indx
][
0
];
// pX
jt
[
i
][
2
*
iMTile
+
1
]
=
deriv_params
[
indx
][
1
];
// pY (disparity is not used)
boolean
bad_tile
=
false
;
if
(!
bad_tile
)
{
fx
[
2
*
iMTile
+
0
]
=
deriv_params
[
0
][
0
];
// pX
fx
[
2
*
iMTile
+
1
]
=
deriv_params
[
0
][
1
];
// pY
if
(
jt
!=
null
)
{
for
(
int
i
=
0
;
i
<
par_indices
.
length
;
i
++)
{
int
indx
=
par_indices
[
i
]
+
1
;
jt
[
i
][
2
*
iMTile
+
0
]
=
deriv_params
[
indx
][
0
];
// pX
jt
[
i
][
2
*
iMTile
+
1
]
=
deriv_params
[
indx
][
1
];
// pY (disparity is not used)
}
}
}
}
...
...
src/main/java/com/elphel/imagej/tileprocessor/OpticalFlow.java
View file @
f62718b1
...
...
@@ -26,6 +26,7 @@ package com.elphel.imagej.tileprocessor;
import
java.util.Arrays
;
import
java.util.Comparator
;
import
java.util.concurrent.atomic.AtomicInteger
;
import
java.util.concurrent.atomic.DoubleAccumulator
;
import
com.elphel.imagej.cameras.CLTParameters
;
import
com.elphel.imagej.common.DoubleGaussianBlur
;
...
...
@@ -537,8 +538,8 @@ public class OpticalFlow {
final
int
best_num
,
final
double
ref_stdev
,
final
int
debug_level
)
final
int
debug_level
,
final
boolean
enable_debug_images
)
{
final
TileProcessor
tp
=
reference_QuadClt
.
getTileProcessor
();
final
int
transform_size
=
tp
.
getTileSize
();
...
...
@@ -644,7 +645,7 @@ public class OpticalFlow {
}
final
int
macroTilesX
=
tp
.
getTilesX
()/
transform_size
;
String
flowXYS_title
=
(
debug_level
>
0
)?(
"vectorXYS_"
+
scene_QuadClt
.
getImageName
()+
"-ref"
+
reference_QuadClt
.
getImageName
()):
null
;
String
flowXYS_title
=
(
enable_debug_images
&&
(
debug_level
>
0
)
)?(
"vectorXYS_"
+
scene_QuadClt
.
getImageName
()+
"-ref"
+
reference_QuadClt
.
getImageName
()):
null
;
double
[][]
vectorXYConfidence
=
attachVectorConfidence
(
flowXY
,
// final double [][] flowXY,
...
...
@@ -931,12 +932,11 @@ public class OpticalFlow {
}
int
iYMmax
=
(
int
)
Math
.
round
(
yMax
);
int
iXMmax
=
(
int
)
Math
.
round
(
xMax
);
if
(
iYMmax
>=
transform_size
)
{
iYMmax
=
transform_size
-
1
;
}
if
(
iXMmax
>=
transform_size
)
{
iXMmax
=
transform_size
-
1
;
}
if
(
iYMmax
<
0
)
iYMmax
=
0
;
if
(
iYMmax
>=
transform_size
)
iYMmax
=
transform_size
-
1
;
if
(
iXMmax
<
0
)
iXMmax
=
0
;
if
(
iXMmax
>=
transform_size
)
iXMmax
=
transform_size
-
1
;
double
dMax
=
corr2d_tile
[
iYMmax
*
corr_size
+
iXMmax
];
// negative
double
s1
=
0.0
,
s2
=
0.0
;
for
(
int
i
=
0
;
i
<
corr2d_tile
.
length
;
i
++)
{
...
...
@@ -2043,6 +2043,73 @@ public class OpticalFlow {
}
public
void
compareRefSceneTiles
(
String
suffix
,
boolean
blur_reference
,
double
[][][]
scene_xyzatr
,
// includeS reference (last)
double
[][][]
scene_ers_dt
,
// includeS reference (last)
QuadCLT
[]
scenes
,
int
iscale
)
// 8
{
int
nscenes
=
scenes
.
length
;
int
indx_ref
=
nscenes
-
1
;
double
[][][]
dsrbg
=
new
double
[
nscenes
][][];
String
[]
time_stamps
=
new
String
[
nscenes
];
// [0] - last scene before the reference one
for
(
int
i
=
0
;
i
<
nscenes
;
i
++)
{
int
indx
=
dsrbg
.
length
-
i
-
1
;
if
((
i
==
0
)
&&
!
blur_reference
)
{
dsrbg
[
0
]=
scenes
[
indx_ref
].
getDSRBG
();
}
else
{
time_stamps
[
i
]
=
scenes
[
indx
].
getImageName
();
ErsCorrection
ers_scene
=
scenes
[
indx
].
getErsCorrection
();
double
[]
ers_scene_original_xyz_dt
=
ers_scene
.
getErsXYZ_dt
();
double
[]
ers_scene_original_atr_dt
=
ers_scene
.
getErsATR_dt
();
ers_scene
.
setErsDt
(
scene_ers_dt
[
indx
][
0
],
// double [] ers_xyz_dt,
scene_ers_dt
[
indx
][
1
]);
// double [] ers_atr_dt)(ers_scene_original_xyz_dt);
ers_scene
.
setupERS
();
dsrbg
[
i
]
=
transformCameraVew
(
// shifts previous image correctly (right)
scene_xyzatr
[
indx
][
0
],
// double [] camera_xyz, // camera center in world coordinates
scene_xyzatr
[
indx
][
1
],
//double [] camera_atr, // camera orientation relative to world frame
scenes
[
indx
],
// QuadCLT camera_QuadClt,
scenes
[
indx_ref
],
// reference
iscale
);
ers_scene
.
setErsDt
(
ers_scene_original_xyz_dt
,
// double [] ers_xyz_dt,
ers_scene_original_atr_dt
);
// double [] ers_atr_dt)(ers_scene_original_xyz_dt);
ers_scene
.
setupERS
();
}
}
TileProcessor
tp
=
scenes
[
indx_ref
].
getTileProcessor
();
int
tilesX
=
tp
.
getTilesX
();
int
tilesY
=
tp
.
getTilesY
();
String
[]
dsrbg_titles
=
{
"d"
,
"s"
,
"r"
,
"b"
,
"g"
};
int
nslices
=
dsrbg_titles
.
length
;
// combine this scene with warped previous one
String
[]
rtitles
=
new
String
[
nscenes
*
nslices
];
double
[][]
dbg_rslt
=
new
double
[
rtitles
.
length
][];
for
(
int
nslice
=
0
;
nslice
<
nslices
;
nslice
++)
{
for
(
int
nscene
=
0
;
nscene
<
nscenes
;
nscene
++)
{
rtitles
[
nscenes
*
nslice
+
nscene
]
=
dsrbg_titles
[
nslice
]+
"-"
+
time_stamps
[
nscene
];
dbg_rslt
[
nscenes
*
nslice
+
nscene
]
=
dsrbg
[
nscene
][
nslice
];
}
}
String
title
=
"previous_frames_matching"
+
suffix
;
(
new
ShowDoubleFloatArrays
()).
showArrays
(
dbg_rslt
,
tilesX
,
tilesY
,
true
,
title
,
rtitles
);
}
/**
* Show macrotiles in comparison, typically reference to scene ones
* @param title Image stack title.
...
...
@@ -2162,39 +2229,101 @@ public class OpticalFlow {
* @return Per-tile array of resampled {disparity,strength,red,blue,green} values (or nulls).
*/
public
double
[][]
transformCameraVew
(
double
[]
scene_xyz
,
// camera center in world coordinates
double
[]
scene_atr
,
// camera orientation relative to world frame
QuadCLT
scene_QuadClt
,
QuadCLT
reference_QuadClt
,
int
iscale
)
final
double
[]
scene_xyz
,
// camera center in world coordinates
final
double
[]
scene_atr
,
// camera orientation relative to world frame
final
QuadCLT
scene_QuadClt
,
final
QuadCLT
reference_QuadClt
,
final
int
iscale
)
{
final
double
line_error
=
0.5
;
TileProcessor
tp
=
reference_QuadClt
.
getTileProcessor
();
int
tilesX
=
tp
.
getTilesX
();
int
tilesY
=
tp
.
getTilesY
();
int
tiles
=
tilesX
*
tilesY
;
int
transform_size
=
tp
.
getTileSize
();
int
rel_num_passes
=
10
;
int
num_passes
=
transform_size
;
// * 2;
int
stilesX
=
iscale
*
tilesX
;
int
stilesY
=
iscale
*
tilesY
;
int
stiles
=
stilesX
*
stilesY
;
double
sigma
=
0.5
*
iscale
;
double
scale
=
1.0
*
iscale
/
transform_size
;
double
[][]
dsrbg_camera
=
scene_QuadClt
.
getDSRBG
();
/// double [][] dsrbg_reference = reference_QuadClt.getDSRBG();
double
[][]
ds
=
new
double
[
dsrbg_camera
.
length
][
stiles
];
final
int
tilesX
=
tp
.
getTilesX
();
final
int
tilesY
=
tp
.
getTilesY
();
final
int
tiles
=
tilesX
*
tilesY
;
final
int
transform_size
=
tp
.
getTileSize
();
final
int
rel_num_passes
=
10
;
final
int
num_passes
=
transform_size
;
// * 2;
final
int
stilesX
=
iscale
*
tilesX
;
final
int
stilesY
=
iscale
*
tilesY
;
final
int
stiles
=
stilesX
*
stilesY
;
final
double
sigma
=
0.5
*
iscale
;
final
double
scale
=
1.0
*
iscale
/
transform_size
;
final
double
[][]
dsrbg_camera
=
scene_QuadClt
.
getDSRBG
();
final
double
[][]
ds
=
new
double
[
dsrbg_camera
.
length
][
stiles
];
for
(
int
i
=
0
;
i
<
ds
.
length
;
i
++)
{
for
(
int
j
=
0
;
j
<
ds
[
i
].
length
;
j
++)
{
ds
[
i
][
j
]
=
Double
.
NaN
;
}
}
ErsCorrection
ersReferenceCorrection
=
reference_QuadClt
.
getErsCorrection
();
ErsCorrection
ersSceneCorrection
=
scene_QuadClt
.
getErsCorrection
();
final
ErsCorrection
ersReferenceCorrection
=
reference_QuadClt
.
getErsCorrection
();
final
ErsCorrection
ersSceneCorrection
=
scene_QuadClt
.
getErsCorrection
();
ersReferenceCorrection
.
setupERS
();
// just in case - setUP using instance paRAMETERS
ersSceneCorrection
.
setupERS
();
double
[]
zbuffer
=
new
double
[
tiles
];
final
Thread
[]
threads
=
ImageDtt
.
newThreadArray
(
threadsMax
);
final
AtomicInteger
ai
=
new
AtomicInteger
(
0
);
final
double
[]
zbuffer
=
new
double
[
tiles
];
// DoubleAccumulator admax = new DoubleAccumulator (Double::max, Double.NEGATIVE_INFINITY);
// DoubleAccumulator admax = new DoubleAccumulator (Double::max, Double.NEGATIVE_INFINITY);
for
(
int
ithread
=
0
;
ithread
<
threads
.
length
;
ithread
++)
{
threads
[
ithread
]
=
new
Thread
()
{
public
void
run
()
{
for
(
int
nTile
=
ai
.
getAndIncrement
();
nTile
<
tiles
;
nTile
=
ai
.
getAndIncrement
())
if
(
dsrbg_camera
[
QuadCLT
.
DSRBG_STRENGTH
][
nTile
]
>
0.0
)
{
double
disparity
=
dsrbg_camera
[
QuadCLT
.
DSRBG_DISPARITY
][
nTile
];
if
(!
Double
.
isNaN
(
disparity
))
{
int
tileY
=
nTile
/
tilesX
;
int
tileX
=
nTile
%
tilesX
;
double
centerX
=
tileX
*
transform_size
+
transform_size
/
2
;
// - shiftX;
double
centerY
=
tileY
*
transform_size
+
transform_size
/
2
;
// - shiftY;
if
(
disparity
<
0
)
{
disparity
=
0.0
;
}
double
[]
pXpYD
=
ersSceneCorrection
.
getImageCoordinatesERS
(
// ersCorrection - reference
reference_QuadClt
,
// QuadCLT cameraQuadCLT, // camera station that got image to be to be matched
centerX
,
// double px, // pixel coordinate X in the reference view
centerY
,
// double py, // pixel coordinate Y in the reference view
disparity
,
// double disparity, // reference disparity
true
,
// boolean distortedView, // This camera view is distorted (diff.rect), false - rectilinear
scene_xyz
,
// double [] reference_xyz, // this view position in world coordinates (typically ZERO3)
scene_atr
,
// double [] reference_atr, // this view orientation relative to world frame (typically ZERO3)
true
,
// boolean distortedCamera, // camera view is distorted (false - rectilinear)
ZERO3
,
// double [] camera_xyz, // camera center in world coordinates
ZERO3
,
// double [] camera_atr, // camera orientation relative to world frame
line_error
);
// LINE_ERR); // double line_err) // threshold error in scan lines (1.0)
if
(
pXpYD
!=
null
)
{
int
px
=
(
int
)
Math
.
round
(
pXpYD
[
0
]/
transform_size
);
int
py
=
(
int
)
Math
.
round
(
pXpYD
[
1
]/
transform_size
);
int
spx
=
(
int
)
Math
.
round
(
pXpYD
[
0
]*
scale
);
int
spy
=
(
int
)
Math
.
round
(
pXpYD
[
1
]*
scale
);
if
((
px
>=
0
)
&&
(
py
>=
0
)
&&
(
px
<
tilesX
)
&
(
py
<
tilesY
))
{
//Z-buffer
if
(!(
pXpYD
[
2
]
<
zbuffer
[
px
+
py
*
tilesX
]))
{
zbuffer
[
px
+
py
*
tilesX
]
=
pXpYD
[
2
];
if
((
spx
>=
0
)
&&
(
spy
>=
0
)
&&
(
spx
<
stilesX
)
&
(
spy
<
stilesY
))
{
int
sTile
=
spx
+
spy
*
stilesX
;
ds
[
QuadCLT
.
DSRBG_DISPARITY
][
sTile
]
=
pXpYD
[
2
];
//reduce*
for
(
int
i
=
QuadCLT
.
DSRBG_STRENGTH
;
i
<
dsrbg_camera
.
length
;
i
++)
{
ds
[
i
][
sTile
]
=
dsrbg_camera
[
i
][
nTile
];
// reduce *
}
}
}
}
}
}
}
}
};
}
ImageDtt
.
startAndJoin
(
threads
);
for
(
int
tileY
=
0
;
tileY
<
tilesY
;
tileY
++)
{
for
(
int
tileX
=
0
;
tileX
<
tilesX
;
tileX
++)
{
int
nTile
=
tileX
+
tileY
*
tilesX
;
...
...
@@ -2426,7 +2555,118 @@ public class OpticalFlow {
debug_level
+
1
);
}
}
public
void
adjustSeries
(
CLTParameters
clt_parameters
,
double
k_prev
,
QuadCLT
[]
scenes
,
// ordered by increasing timestamps
int
debug_level
)
{
double
[][][]
scenes_xyzatr
=
new
double
[
scenes
.
length
][][];
// previous scene relative to the next one
// double [][][] ers_xyzatr = new double [scenes.length][][]; // previous scene relative to the next one
QuadCLT
reference_QuadClt
=
scenes
[
scenes
.
length
-
1
];
// last acquired
ErsCorrection
ers_reference
=
reference_QuadClt
.
getErsCorrection
();
// modify LMA parameters to freeze reference ERS, remove pull on scene ERS
boolean
[]
param_select2
=
clt_parameters
.
ilp
.
ilma_lma_select
.
clone
();
// final boolean[] param_select,
double
[]
param_regweights2
=
clt_parameters
.
ilp
.
ilma_regularization_weights
;
// final double [] param_regweights,
// freeze reference ERS, free scene ERS
for
(
int
j
=
0
;
j
<
3
;
j
++)
{
param_select2
[
ErsCorrection
.
DP_DVX
+
j
]
=
false
;
param_select2
[
ErsCorrection
.
DP_DVAZ
+
j
]
=
false
;
param_regweights2
[
ErsCorrection
.
DP_DSVX
+
j
]
=
0.0
;
param_regweights2
[
ErsCorrection
.
DP_DSVAZ
+
j
]
=
0.0
;
}
for
(
int
i
=
scenes
.
length
-
3
;
i
>=
0
;
i
--)
{
QuadCLT
scene_QuadClt
=
scenes
[
i
];
String
last_known_ts
=
scenes
[
i
+
1
].
getImageName
();
// it should be present in the reference scene scenes
String
scene_ts
=
scenes
[
i
].
getImageName
();
// it should be present in the scenes[i+1] scenes
ErsCorrection
ers_scene_last_known
=
scenes
[
i
+
1
].
getErsCorrection
();
ErsCorrection
ers_scene
=
scene_QuadClt
.
getErsCorrection
();
double
[]
last_known_xyz
=
ers_reference
.
getSceneXYZ
(
last_known_ts
);
double
[]
last_known_atr
=
ers_reference
.
getSceneATR
(
last_known_ts
);
double
[]
new_from_last_xyz
=
ers_scene_last_known
.
getSceneXYZ
(
scene_ts
);
double
[]
new_from_last_atr
=
ers_scene_last_known
.
getSceneATR
(
scene_ts
);
// combine two rotations and two translations
double
[][]
combo_XYZATR
=
ErsCorrection
.
combineXYZATR
(
last_known_xyz
,
// double [] reference_xyz,
last_known_atr
,
// double [] reference_atr,
new_from_last_xyz
,
// double [] scene_xyz,
new_from_last_atr
);
// double [] scene_atr)
// before adjusting - save original ERS, restart afterwards
double
[]
ers_scene_original_xyz_dt
=
ers_scene
.
getErsXYZ_dt
();
double
[]
ers_scene_original_atr_dt
=
ers_scene
.
getErsATR_dt
();
// ers should be correct for both
scenes_xyzatr
[
i
]
=
adjustPairsLMA
(
clt_parameters
,
// CLTParameters clt_parameters,
reference_QuadClt
,
// QuadCLT reference_QuadCLT,
scene_QuadClt
,
// QuadCLT scene_QuadCLT,
combo_XYZATR
[
0
],
// xyz
combo_XYZATR
[
1
],
// atr
param_select2
,
// final boolean[] param_select,
param_regweights2
,
// final double [] param_regweights,
debug_level
);
// int debug_level)
if
(
debug_level
>
-
1
)
{
System
.
out
.
println
(
"Pass 1 scene "
+
i
+
" (of "
+
scenes
.
length
+
") "
+
reference_QuadClt
.
getImageName
()
+
"/"
+
scene_QuadClt
.
getImageName
()+
" Done."
);
}
ers_reference
.
addScene
(
scene_QuadClt
.
getImageName
(),
scenes_xyzatr
[
i
][
0
],
scenes_xyzatr
[
i
][
1
],
ers_scene
.
getErsXYZ_dt
(),
ers_scene
.
getErsATR_dt
()
);
// restore original ers data
ers_scene
.
setErsDt
(
ers_scene_original_xyz_dt
,
// double [] ers_xyz_dt,
ers_scene_original_atr_dt
);
// double [] ers_atr_dt)(ers_scene_original_xyz_dt);
ers_scene
.
setupERS
();
if
(
debug_level
>
-
1
)
{
System
.
out
.
println
(
"Pass multi scene "
+
i
+
" (of "
+
scenes
.
length
+
") "
+
reference_QuadClt
.
getImageName
()
+
"/"
+
scene_QuadClt
.
getImageName
()+
" Done."
);
}
}
reference_QuadClt
.
saveInterProperties
(
// save properties for interscene processing (extrinsics, ers, ...)
null
,
// String path, // full name with extension or w/o path to use x3d directory
debug_level
+
1
);
if
(
debug_level
>
-
1
)
{
System
.
out
.
println
(
"adjustSeries(): preparing image set..."
);
int
nscenes
=
scenes
.
length
;
int
indx_ref
=
nscenes
-
1
;
double
[][][]
all_scenes_xyzatr
=
new
double
[
scenes
.
length
][][];
// includes reference (last)
double
[][][]
all_scenes_ers_dt
=
new
double
[
scenes
.
length
][][];
// includes reference (last)
all_scenes_xyzatr
[
indx_ref
]
=
new
double
[][]
{
ZERO3
,
ZERO3
};
all_scenes_ers_dt
[
indx_ref
]
=
new
double
[][]
{
ers_reference
.
getErsXYZ_dt
(),
ers_reference
.
getErsATR_dt
()};
for
(
int
i
=
0
;
i
<
nscenes
;
i
++)
if
(
i
!=
indx_ref
)
{
String
ts
=
scenes
[
i
].
getImageName
();
all_scenes_xyzatr
[
i
]
=
new
double
[][]
{
ers_reference
.
getSceneXYZ
(
ts
),
ers_reference
.
getSceneATR
(
ts
)};
all_scenes_ers_dt
[
i
]
=
new
double
[][]
{
ers_reference
.
getSceneErsXYZ_dt
(
ts
),
ers_reference
.
getSceneErsATR_dt
(
ts
)};
}
compareRefSceneTiles
(
""
,
// String suffix,
false
,
// boolean blur_reference,
all_scenes_xyzatr
,
// double [][][] scene_xyzatr, // does not include reference
all_scenes_ers_dt
,
// double [][][] scene_ers_dt, // does not include reference
scenes
,
// QuadCLT [] scenes,
8
);
// int iscale) // 8
}
if
(
debug_level
>
-
1
)
{
System
.
out
.
println
(
"adjustSeries() Done."
);
}
}
double
[][]
getPoseFromErs
(
double
k_prev
,
QuadCLT
reference_QuadCLT
,
...
...
@@ -2491,63 +2731,10 @@ public class OpticalFlow {
TileProcessor
tp
=
reference_QuadCLT
.
getTileProcessor
();
final
int
iscale
=
8
;
boolean
blur_reference
=
false
;
/*
double ts = reference_QuadCLT.getTimeStamp();
double ts_prev = ts;
double [] camera_xyz0 = ZERO3.clone();
double [] camera_atr0 = ZERO3.clone();
ErsCorrection ersCorrection = reference_QuadCLT.getErsCorrection();
String this_image_name = reference_QuadCLT.getImageName();
if (debug_level > 0) {
System.out.println("\n"+this_image_name+":\n"+ersCorrection.extrinsic_corr.toString());
System.out.println(String.format("%s: ers_wxyz_center= %f, %f, %f", this_image_name,
ersCorrection.ers_wxyz_center[0], ersCorrection.ers_wxyz_center[1],ersCorrection.ers_wxyz_center[2] ));
System.out.println(String.format("%s: ers_wxyz_center_dt= %f, %f, %f", this_image_name,
ersCorrection.ers_wxyz_center_dt[0], ersCorrection.ers_wxyz_center_dt[1],ersCorrection.ers_wxyz_center_dt[2] ));
System.out.println(String.format("%s: ers_wxyz_center_d2t= %f, %f, %f", this_image_name,
ersCorrection.ers_wxyz_center_d2t[0], ersCorrection.ers_wxyz_center_d2t[1],ersCorrection.ers_wxyz_center_d2t[2] ));
System.out.println(String.format("%s: ers_watr_center_dt= %f, %f, %f", this_image_name,
ersCorrection.ers_watr_center_dt[0], ersCorrection.ers_watr_center_dt[1],ersCorrection.ers_watr_center_dt[2] ));
System.out.println(String.format("%s: ers_watr_center_d2t= %f, %f, %f", this_image_name,
ersCorrection.ers_watr_center_d2t[0], ersCorrection.ers_watr_center_d2t[1],ersCorrection.ers_watr_center_d2t[2] ));
}
double dt = 0.0;
if (scene_QuadCLT == null) {
scene_QuadCLT = reference_QuadCLT;
}
ErsCorrection ersCorrectionPrev = (ErsCorrection) (scene_QuadCLT.geometryCorrection);
if (scene_QuadCLT != null) {
ts_prev = scene_QuadCLT.getTimeStamp();
dt = ts-ts_prev;
if (dt < 0) {
k_prev = (1.0-k_prev);
}
if (Math.abs(dt) > 0.15) { // at least two frames TODO: use number of lines* line_time * ...?
k_prev = 0.5;
System.out.println("Non-consecutive frames, dt = "+dt);
}
double [] wxyz_center_dt_prev = ersCorrectionPrev.ers_wxyz_center_dt;
double [] watr_center_dt_prev = ersCorrectionPrev.ers_watr_center_dt; // is twice omega!
double [] wxyz_delta = new double[3];
double [] watr_delta = new double[3];
for (int i = 0; i <3; i++) {
// wxyz_delta[i] = corr_scale * dt * (k_prev * wxyz_center_dt_prev[i] + (1.0-k_prev) * ersCorrection.ers_wxyz_center_dt[i]);
// watr_delta[i] = corr_scale * dt * (k_prev * watr_center_dt_prev[i] + (1.0-k_prev) * ersCorrection.ers_watr_center_dt[i]);
wxyz_delta[i] = dt * (k_prev * wxyz_center_dt_prev[i] + (1.0-k_prev) * ersCorrection.ers_wxyz_center_dt[i]);
watr_delta[i] = 0.5 * dt * (k_prev * watr_center_dt_prev[i] + (1.0-k_prev) * ersCorrection.ers_watr_center_dt[i]);
}
watr_delta[0] = -watr_delta[0]; /// TESTING!
watr_delta[2] = -watr_delta[2]; /// TESTING!
camera_xyz0 = wxyz_delta;
camera_atr0 = watr_delta;
}
*/
int
tilesX
=
tp
.
getTilesX
();
int
tilesY
=
tp
.
getTilesY
();
if
(
debug_level
>
0
)
{
if
(
clt_parameters
.
ofp
.
enable_debug_images
&&
(
debug_level
>
0
)
)
{
compareRefSceneTiles
(
"before_LMA"
,
// String suffix,
blur_reference
,
// boolean blur_reference,
...
...
@@ -2600,9 +2787,11 @@ public class OpticalFlow {
clt_parameters
.
ofp
.
min_change
,
// final double min_change,
clt_parameters
.
ofp
.
best_neibs_num
,
// final int best_num,
clt_parameters
.
ofp
.
ref_stdev
,
// final double ref_stdev,
clt_parameters
.
ofp
.
debug_level_iterate
);
// final int debug_level)
clt_parameters
.
ofp
.
debug_level_iterate
,
// final int debug_level)
clt_parameters
.
ofp
.
enable_debug_images
);
//final boolean enable_debug_images)
if
(
debug_level
>
2
)
{
if
(
clt_parameters
.
ofp
.
enable_debug_images
&&
(
debug_level
>
2
)
)
{
String
dbg_title
=
"OpticalFlow-"
+
scene_QuadCLT
.
getImageName
()+
"-"
+
reference_QuadCLT
.
getImageName
()+
"-iteration_"
+
nlma
;;
showVectorXYConfidence
(
dbg_title
,
// String title,
...
...
@@ -2621,7 +2810,7 @@ public class OpticalFlow {
if
(
debug_level
>
1
)
{
System
.
out
.
println
(
"Removed "
+
n2
+
" outliers in a second pass, total removed:"
+(
n
+
n2
));
}
if
(
debug_level
>
0
)
{
if
(
clt_parameters
.
ofp
.
enable_debug_images
&&
(
debug_level
>
0
)
)
{
if
((
debug_level
>
1
)
||
(
nlma
==
0
))
{
String
dbg_title
=
"OpticalFlowFiltered-"
+
scene_QuadCLT
.
getImageName
()+
"-"
+
reference_QuadCLT
.
getImageName
()+
"-iteration_"
+
nlma
;
showVectorXYConfidence
(
...
...
@@ -2657,12 +2846,12 @@ public class OpticalFlow {
last_run
,
// boolean last_run,
clt_parameters
.
ilp
.
ilma_debug_level
);
// int debug_level)
if
(
lmaResult
<
0
)
{
System
.
out
.
println
(
"LMA failed
"
);
System
.
out
.
println
(
"LMA failed
, nlma="
+
nlma
);
break
;
}
camera_xyz0
=
intersceneLma
.
getSceneXYZ
(
false
);
// true for initial values
camera_atr0
=
intersceneLma
.
getSceneATR
(
false
);
// true for initial values
if
(
debug_level
>
1
)
{
if
(
clt_parameters
.
ofp
.
enable_debug_images
&&
(
debug_level
>
1
)
)
{
compareRefSceneTiles
(
"iteration_"
+
nlma
,
// String suffix,
blur_reference
,
// boolean blur_reference,
...
...
@@ -2676,7 +2865,8 @@ public class OpticalFlow {
break
;
}
}
if
(
debug_level
==
1
)
{
if
(
clt_parameters
.
ofp
.
enable_debug_images
&&
(
debug_level
==
1
))
{
/// if (!clt_parameters.ofp.enable_debug_images || (clt_parameters.ofp.enable_debug_images && (debug_level == 1))) {
compareRefSceneTiles
(
"after_lma"
,
// String suffix,
blur_reference
,
// boolean blur_reference,
...
...
@@ -2829,7 +3019,8 @@ public class OpticalFlow {
clt_parameters
.
ofp
.
min_change
,
// final double min_change,
clt_parameters
.
ofp
.
best_neibs_num
,
// final int best_num,
clt_parameters
.
ofp
.
ref_stdev
,
// final double ref_stdev,
clt_parameters
.
ofp
.
debug_level_iterate
);
// final int debug_level)
clt_parameters
.
ofp
.
debug_level_iterate
,
// final int debug_level)
clt_parameters
.
ofp
.
enable_debug_images
);
//final boolean enable_debug_images)
if
(
debug_level
>
2
)
{
String
dbg_title
=
"OpticalFlow-"
+
scene_QuadCLT
.
getImageName
()+
"-"
+
reference_QuadCLT
.
getImageName
()+
"-iteration_"
+
nlma
;;
...
...
@@ -3120,7 +3311,8 @@ public class OpticalFlow {
clt_parameters
.
ofp
.
min_change
,
// final double min_change,
clt_parameters
.
ofp
.
best_neibs_num
,
// final int best_num,
clt_parameters
.
ofp
.
ref_stdev
,
// final double ref_stdev,
clt_parameters
.
ofp
.
debug_level_iterate
);
// final int debug_level)
clt_parameters
.
ofp
.
debug_level_iterate
,
// final int debug_level)
clt_parameters
.
ofp
.
enable_debug_images
);
//final boolean enable_debug_images)
if
(
debug_level
>
-
2
)
{
String
dbg_title
=
"OpticalFlow-"
+
scene_QuadCLT
.
getImageName
()+
"-"
+
reference_QuadCLT
.
getImageName
();
...
...
src/main/java/com/elphel/imagej/tileprocessor/OpticalFlowParameters.java
View file @
f62718b1
...
...
@@ -72,6 +72,7 @@ public class OpticalFlowParameters {
public
int
debug_level_optical
=
1
;
public
int
debug_level_iterate
=
-
1
;
public
boolean
enable_debug_images
=
true
;
public
void
dialogQuestions
(
GenericJTabbedDialog
gd
)
{
gd
.
addMessage
(
"Intraframe ERS to pose"
);
...
...
@@ -159,7 +160,8 @@ public class OpticalFlowParameters {
gd
.
addNumericField
(
"Debug level correlation iterations"
,
this
.
debug_level_iterate
,
0
,
4
,
""
,
"Apply during Optical Flow refinement itgerations"
);
gd
.
addCheckbox
(
"Enable debug images"
,
this
.
enable_debug_images
,
"When false - no debug images will be generated regardless of debug level"
);
}
public
void
dialogAnswers
(
GenericJTabbedDialog
gd
)
{
...
...
@@ -202,6 +204,7 @@ public class OpticalFlowParameters {
this
.
test_corr_rad_max
=
(
int
)
gd
.
getNextNumber
();
this
.
debug_level_optical
=
(
int
)
gd
.
getNextNumber
();
this
.
debug_level_iterate
=
(
int
)
gd
.
getNextNumber
();
this
.
enable_debug_images
=
gd
.
getNextBoolean
();
}
...
...
@@ -243,7 +246,7 @@ public class OpticalFlowParameters {
properties
.
setProperty
(
prefix
+
"test_corr_rad_max"
,
this
.
test_corr_rad_max
+
""
);
properties
.
setProperty
(
prefix
+
"debug_level_optical"
,
this
.
debug_level_optical
+
""
);
properties
.
setProperty
(
prefix
+
"debug_level_iterate"
,
this
.
debug_level_iterate
+
""
);
properties
.
setProperty
(
prefix
+
"enable_debug_images"
,
this
.
enable_debug_images
+
""
);
}
public
void
getProperties
(
String
prefix
,
Properties
properties
){
...
...
@@ -285,7 +288,8 @@ public class OpticalFlowParameters {
if
(
properties
.
getProperty
(
prefix
+
"test_corr_rad_max"
)!=
null
)
this
.
test_corr_rad_max
=
Integer
.
parseInt
(
properties
.
getProperty
(
prefix
+
"test_corr_rad_max"
));
if
(
properties
.
getProperty
(
prefix
+
"debug_level_optical"
)!=
null
)
this
.
debug_level_optical
=
Integer
.
parseInt
(
properties
.
getProperty
(
prefix
+
"debug_level_optical"
));
if
(
properties
.
getProperty
(
prefix
+
"debug_level_iterate"
)!=
null
)
this
.
debug_level_iterate
=
Integer
.
parseInt
(
properties
.
getProperty
(
prefix
+
"debug_level_iterate"
));
if
(
properties
.
getProperty
(
prefix
+
"enable_debug_images"
)!=
null
)
this
.
enable_debug_images
=
Boolean
.
parseBoolean
(
properties
.
getProperty
(
prefix
+
"enable_debug_images"
));
}
@Override
public
OpticalFlowParameters
clone
()
throws
CloneNotSupportedException
{
...
...
@@ -325,6 +329,7 @@ public class OpticalFlowParameters {
ofp
.
test_corr_rad_max
=
this
.
test_corr_rad_max
;
ofp
.
debug_level_optical
=
this
.
debug_level_optical
;
ofp
.
debug_level_iterate
=
this
.
debug_level_iterate
;
ofp
.
enable_debug_images
=
this
.
enable_debug_images
;
return
ofp
;
}
...
...
src/main/java/com/elphel/imagej/tileprocessor/TwoQuadCLT.java
View file @
f62718b1
...
...
@@ -8391,7 +8391,6 @@ if (debugLevel > -100) return true; // temporarily !
}
public
void
TestInterLMA
(
QuadCLT
quadCLT_main
,
// tiles should be set
CLTParameters
clt_parameters
,
...
...
@@ -8484,6 +8483,72 @@ if (debugLevel > -100) return true; // temporarily !
System
.
out
.
println
(
"End of test"
);
}
public
void
interSeriesLMA
(
QuadCLT
quadCLT_main
,
// tiles should be set
CLTParameters
clt_parameters
,
EyesisCorrectionParameters
.
DebayerParameters
debayerParameters
,
ColorProcParameters
colorProcParameters
,
ColorProcParameters
colorProcParameters_aux
,
CorrectionColorProc
.
ColorGainsParameters
channelGainParameters
,
EyesisCorrectionParameters
.
RGBParameters
rgbParameters
,
EyesisCorrectionParameters
.
EquirectangularParameters
equirectangularParameters
,
Properties
properties
,
boolean
reset_from_extrinsics
,
final
int
threadsMax
,
// maximal number of threads to launch
final
boolean
updateStatus
,
final
int
debugLevel
)
throws
Exception
{
if
((
quadCLT_main
!=
null
)
&&
(
quadCLT_main
.
getGPU
()
!=
null
))
{
quadCLT_main
.
getGPU
().
resetGeometryCorrection
();
quadCLT_main
.
gpuResetCorrVector
();
// .getGPU().resetGeometryCorrectionVector();
}
// final boolean batch_mode = clt_parameters.batch_run;
this
.
startTime
=
System
.
nanoTime
();
String
[]
sourceFiles0
=
quadCLT_main
.
correctionsParameters
.
getSourcePaths
();
QuadCLT
.
SetChannels
[]
set_channels_main
=
quadCLT_main
.
setChannels
(
debugLevel
);
if
((
set_channels_main
==
null
)
||
(
set_channels_main
.
length
==
0
))
{
System
.
out
.
println
(
"No files to process (of "
+
sourceFiles0
.
length
+
")"
);
return
;
}
QuadCLT
.
SetChannels
[]
set_channels
=
quadCLT_main
.
setChannels
(
debugLevel
);
QuadCLT
[]
quadCLTs
=
new
QuadCLT
[
set_channels
.
length
];
for
(
int
i
=
0
;
i
<
quadCLTs
.
length
;
i
++)
{
quadCLTs
[
i
]
=
quadCLT_main
.
spawnQuadCLT
(
set_channels
[
i
].
set_name
,
clt_parameters
,
colorProcParameters
,
//
threadsMax
,
debugLevel
);
// temporarily fix wrong sign:
ErsCorrection
ers
=
(
ErsCorrection
)
(
quadCLTs
[
i
].
getGeometryCorrection
());
// if (reset_from_extrinsics) {
// System.out.println("Reset ERS parameters from intraframe extrinsics");
// ers.setupERSfromExtrinsics();
// }
quadCLTs
[
i
].
setDSRBG
(
clt_parameters
,
// CLTParameters clt_parameters,
threadsMax
,
// int threadsMax, // maximal number of threads to launch
updateStatus
,
// boolean updateStatus,
debugLevel
);
// int debugLevel)
/// quadCLTs[i].showDSIMain();
}
OpticalFlow
opticalFlow
=
new
OpticalFlow
(
threadsMax
,
// int threadsMax, // maximal number of threads to launch
updateStatus
);
// boolean updateStatus);
opticalFlow
.
adjustSeries
(
clt_parameters
,
// CLTParameters clt_parameters,
clt_parameters
.
ofp
.
k_prev
,
// k_prev,
quadCLTs
,
// QuadCLT [] scenes, // ordered by increasing timestamps
clt_parameters
.
ofp
.
debug_level_optical
);
// 1); // -1); // int debug_level);
System
.
out
.
println
(
"End of interSeriesLMA()"
);
}
public
void
batchLwirRig
(
...
...
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