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
00ba5f14
Commit
00ba5f14
authored
Sep 28, 2021
by
Andrey Filippov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Tested basic DSI generation for LWIR
parent
9a970304
Changes
9
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
4212 additions
and
2741 deletions
+4212
-2741
EyesisCorrectionParameters.java
...com/elphel/imagej/cameras/EyesisCorrectionParameters.java
+30
-6
PolynomialApproximation.java
...ava/com/elphel/imagej/common/PolynomialApproximation.java
+12
-8
CLTPass3d.java
src/main/java/com/elphel/imagej/tileprocessor/CLTPass3d.java
+29
-14
ExtrinsicAdjustment.java
.../com/elphel/imagej/tileprocessor/ExtrinsicAdjustment.java
+1
-1
ImageDttCPU.java
...ain/java/com/elphel/imagej/tileprocessor/ImageDttCPU.java
+2823
-1873
QuadCLT.java
src/main/java/com/elphel/imagej/tileprocessor/QuadCLT.java
+144
-77
QuadCLTCPU.java
...main/java/com/elphel/imagej/tileprocessor/QuadCLTCPU.java
+495
-336
TileProcessor.java
...n/java/com/elphel/imagej/tileprocessor/TileProcessor.java
+217
-19
TwoQuadCLT.java
...main/java/com/elphel/imagej/tileprocessor/TwoQuadCLT.java
+461
-407
No files found.
src/main/java/com/elphel/imagej/cameras/EyesisCorrectionParameters.java
View file @
00ba5f14
...
...
@@ -160,7 +160,8 @@ public class EyesisCorrectionParameters {
public
boolean
clt_batch_genMl
=
true
;
// Generate ML output
public
boolean
clt_batch_dbg1
=
true
;
// Generate debug images if a single set is selected
public
boolean
clt_batch_dsi
=
true
;
// Create and save DSI combo image with the model
public
boolean
clt_batch_dsi_aux
=
false
;
// Calculate and save aux camera DSI (currently it is offset from the main/rig data
public
boolean
clt_batch_dsi_aux
=
false
;
// Calculate and save aux camera DSI (currently it is offset from the main/rig data
public
boolean
clt_batch_dsi_aux_full
=
false
;
// more than just preExpandCLTQuad3d() (same as for Lazy Eye
public
boolean
clt_batch_save_extrinsics
=
true
;
// Save cameras extrinsic parameters with the model
public
boolean
clt_batch_save_all
=
true
;
// Save all parameters with the model
...
...
@@ -302,6 +303,7 @@ public class EyesisCorrectionParameters {
cp
.
clt_batch_dsi
=
this
.
clt_batch_dsi
;
cp
.
clt_batch_dsi_aux
=
this
.
clt_batch_dsi_aux
;
cp
.
clt_batch_dsi_aux_full
=
this
.
clt_batch_dsi_aux_full
;
cp
.
clt_batch_save_extrinsics
=
this
.
clt_batch_save_extrinsics
;
cp
.
clt_batch_save_all
=
this
.
clt_batch_save_all
;
...
...
@@ -482,6 +484,7 @@ public class EyesisCorrectionParameters {
properties
.
setProperty
(
prefix
+
"clt_batch_dsi"
,
this
.
clt_batch_dsi
+
""
);
properties
.
setProperty
(
prefix
+
"clt_batch_dsi_aux"
,
this
.
clt_batch_dsi_aux
+
""
);
properties
.
setProperty
(
prefix
+
"clt_batch_dsi_aux_full"
,
this
.
clt_batch_dsi_aux_full
+
""
);
properties
.
setProperty
(
prefix
+
"clt_batch_save_extrinsics"
,
this
.
clt_batch_save_extrinsics
+
""
);
properties
.
setProperty
(
prefix
+
"clt_batch_save_all"
,
this
.
clt_batch_save_all
+
""
);
...
...
@@ -640,6 +643,7 @@ public class EyesisCorrectionParameters {
if
(
properties
.
getProperty
(
prefix
+
"clt_batch_dsi"
)!=
null
)
this
.
clt_batch_dsi
=
Boolean
.
parseBoolean
(
properties
.
getProperty
(
prefix
+
"clt_batch_dsi"
));
if
(
properties
.
getProperty
(
prefix
+
"clt_batch_dsi_aux"
)!=
null
)
this
.
clt_batch_dsi_aux
=
Boolean
.
parseBoolean
(
properties
.
getProperty
(
prefix
+
"clt_batch_dsi_aux"
));
if
(
properties
.
getProperty
(
prefix
+
"clt_batch_dsi_aux_full"
)!=
null
)
this
.
clt_batch_dsi_aux_full
=
Boolean
.
parseBoolean
(
properties
.
getProperty
(
prefix
+
"clt_batch_dsi_aux_full"
));
if
(
properties
.
getProperty
(
prefix
+
"clt_batch_save_extrinsics"
)!=
null
)
this
.
clt_batch_save_extrinsics
=
Boolean
.
parseBoolean
(
properties
.
getProperty
(
prefix
+
"clt_batch_save_extrinsics"
));
if
(
properties
.
getProperty
(
prefix
+
"clt_batch_save_all"
)!=
null
)
this
.
clt_batch_save_all
=
Boolean
.
parseBoolean
(
properties
.
getProperty
(
prefix
+
"clt_batch_save_all"
));
...
...
@@ -1015,6 +1019,10 @@ public class EyesisCorrectionParameters {
gd
.
addCheckbox
(
"Include/genarate separate aux camera DSI data in the combo DSI"
,
this
.
clt_batch_dsi_aux
,
"8-rig: DSI for the AUX camera is offset (by the rig baseline) from the main and rig DSI. Aux DSI requires extra processing time."
+
" EO+LWIR - generate a separate GT+AUX file"
);
gd
.
addCheckbox
(
"Additional steps to calculate Auf DSI (more than for LY adjustment)"
,
this
.
clt_batch_dsi_aux_full
,
"(Not yet tested)"
);
gd
.
addCheckbox
(
"Save field adjustment data with the model"
,
this
.
clt_batch_save_extrinsics
,
"This data can be used to restore specific filed-adjusted cameras extrinsics used when the model was generated"
);
gd
.
addCheckbox
(
"Save all parameters with the model"
,
this
.
clt_batch_save_all
,
...
...
@@ -1103,6 +1111,7 @@ public class EyesisCorrectionParameters {
this
.
clt_batch_dbg1
=
gd
.
getNextBoolean
();
// 29
this
.
clt_batch_dsi
=
gd
.
getNextBoolean
();
this
.
clt_batch_dsi_aux
=
gd
.
getNextBoolean
();
this
.
clt_batch_dsi_aux_full
=
gd
.
getNextBoolean
();
this
.
clt_batch_save_extrinsics
=
gd
.
getNextBoolean
();
this
.
clt_batch_save_all
=
gd
.
getNextBoolean
();
if
(
clt_parameters
!=
null
)
{
...
...
@@ -1291,6 +1300,10 @@ public class EyesisCorrectionParameters {
extensions
[
0
]
=
sourceSuffix
;
prefixes
[
0
]
=
sourcePrefix
;
MultipleExtensionsFileFilter
setFilter
=
new
MultipleExtensionsFileFilter
(
prefixes
,
extensions
,
"Image sets"
);
MultipleExtensionsFileFilter
setFilterMain
=
new
MultipleExtensionsFileFilter
(
new
String
[]
{
prefixes
[
0
]},
new
String
[]
{
extensions
[
0
]},
"Image sets main"
);
MultipleExtensionsFileFilter
setFilterAux
=
new
MultipleExtensionsFileFilter
(
new
String
[]
{
prefixes
[
1
]},
new
String
[]
{
extensions
[
1
]},
"Image sets main"
);
DirectoryChoser
dc
=
new
DirectoryChoser
(
setFilter
,
...
...
@@ -1319,16 +1332,27 @@ public class EyesisCorrectionParameters {
ArrayList
<
File
>
setFilesList
=
new
ArrayList
<
File
>();
// list of set files
for
(
int
nFile
=
0
;
nFile
<
files
.
length
;
nFile
++)
{
// String [] setChnFiles = files[nFile].list(setFilter);
File
[]
setChnFiles
=
files
[
nFile
].
listFiles
(
setFilter
);
File
[]
setChnFiles
=
files
[
nFile
].
listFiles
(
setFilter
);
File
[]
setMainChnFiles
=
files
[
nFile
].
listFiles
(
setFilterMain
);
File
[]
setAuxChnFiles
=
files
[
nFile
].
listFiles
(
setFilterAux
);
int
num_match
=
setChnFiles
.
length
;
if
(
(
num_match
==
num_chn_files
)
||
// all files for main and aux
(
num_match
==
num_chn_main
)
||
// only main camera files
(
num_match
==
num_chn_aux
))
// only aux camera files
{
// only use sets of exact number of files
if
(
num_match
==
num_chn_files
)
{
// || // all files for main and aux
// (setMainChnFiles.length == num_chn_main) || // has all needed main camera files
// (setAuxChnFiles.length == num_chn_aux)) // has all needed camera files
// { // only use sets of exact number of files
setDirList
.
add
(
files
[
nFile
]);
for
(
File
f:
setChnFiles
)
{
setFilesList
.
add
(
f
);
}
}
else
if
((
setMainChnFiles
.
length
==
num_chn_main
)
||
(
setAuxChnFiles
.
length
==
num_chn_aux
))
{
setDirList
.
add
(
files
[
nFile
]);
if
(
setMainChnFiles
.
length
==
num_chn_main
)
{
for
(
File
f:
setMainChnFiles
)
setFilesList
.
add
(
f
);
}
if
(
setAuxChnFiles
.
length
==
num_chn_aux
)
{
for
(
File
f:
setAuxChnFiles
)
setFilesList
.
add
(
f
);
}
}
}
String
[]
sourceSetPaths
=
new
String
[
setDirList
.
size
()];
...
...
src/main/java/com/elphel/imagej/common/PolynomialApproximation.java
View file @
00ba5f14
...
...
@@ -269,7 +269,7 @@ public class PolynomialApproximation {
this
.
debugLevel
);
}
public
double
[][]
quadraticApproximation
(
public
double
[][]
quadraticApproximation
(
// no use
double
[][][]
data
,
boolean
forceLinear
,
// use linear approximation
int
debugLevel
...
...
@@ -312,8 +312,8 @@ public class PolynomialApproximation {
1.0
E
-
15
,
// threshold ratio of matrix determinant to norm for quadratic approximation (det too low - fail)
this
.
debugLevel
);
}
public
double
[][]
quadraticApproximation
(
/*
public double [][] quadraticApproximation(
// no use
double [][][] data,
boolean forceLinear, // use linear approximation
double thresholdLin, // threshold ratio of matrix determinant to norm for linear approximation (det too low - fail)
...
...
@@ -328,7 +328,7 @@ public class PolynomialApproximation {
1.0E-15, // threshold ratio of matrix determinant to norm for quadratic approximation (det too low - fail)
this.debugLevel);
}
*/
public
double
[][]
quadraticApproximation
(
double
[][][]
data
,
boolean
forceLinear
,
// use linear approximation
...
...
@@ -441,8 +441,12 @@ public class PolynomialApproximation {
}
}
}
int
zDim
=
data
[
0
][
1
].
length
;
int
zDim
=
0
;
// =data[0][1].length;
for
(
int
i
=
0
;
i
<
data
.
length
;
i
++)
if
(
data
[
i
]
!=
null
){
zDim
=
data
[
i
][
1
].
length
;
break
;
}
double
w
,
z
,
x
,
x2
,
x3
,
x4
,
y
,
y2
,
y3
,
y4
,
wz
;
int
i
,
j
,
n
=
0
;
...
...
@@ -465,7 +469,7 @@ public class PolynomialApproximation {
SZ02
[
i
]=
0.0
;
SZ20
[
i
]=
0.0
;
}
for
(
i
=
0
;
i
<
data
.
length
;
i
++)
{
for
(
i
=
0
;
i
<
data
.
length
;
i
++)
if
(
data
[
i
]
!=
null
)
{
w
=(
data
[
i
].
length
>
2
)?
data
[
i
][
2
][
0
]:
1.0
;
if
(
w
>
0
)
{
n
++;
...
...
@@ -585,7 +589,7 @@ public class PolynomialApproximation {
}
return
ABCDEF
;
}
// calcu
al
te "volume" made of the matrix row-vectors, placed orthogonally
// calcu
la
te "volume" made of the matrix row-vectors, placed orthogonally
// to be compared to determinant
public
double
normMatix
(
double
[][]
a
)
{
double
d
,
norm
=
1.0
;
...
...
src/main/java/com/elphel/imagej/tileprocessor/CLTPass3d.java
View file @
00ba5f14
...
...
@@ -64,14 +64,15 @@ public class CLTPass3d{
// texture_selection is only used for the GPU and if not null means it is for the GPU
public
boolean
[]
texture_selection
=
null
;
// use by the GPU to set texture to generate
public
double
[][]
max_tried_disparity
=
null
;
//[ty][tx] used for combined passes, shows maximal disparity for this tile, regardless of results
public
double
[][]
max_tried_disparity
=
null
;
//[ty][tx] used for combined passes, shows maximal disparity for this tile, regardless of results
public
int
clust_radius
=
0
;
// 0 - no clusters, 1 = 1x1 (same as 0, just different program), 2 - 3x3, 3 - 5x5
public
boolean
is_combo
=
false
;
public
boolean
is_measured
=
false
;
public
String
texture
=
null
;
// relative (to x3d) path
public
Rectangle
texture_bounds
;
// in tiles, not pixels !
public
int
dbg_index
;
public
int
disparity_index
=
ImageDtt
.
DISPARITY_INDEX_CM
;
// may also be ImageDtt.DISPARITY_INDEX_POLY
public
int
lma_disparity_index
=
ImageDtt
.
DISPARITY_INDEX_POLY
;
// set to -1 to ignore and always use just CM (also applies to lma_strength - next)
public
int
lma_disparity_index
=
ImageDtt
.
DISPARITY_INDEX_POLY
;
// set to -1 to ignore and always use just CM (also applies to lma_strength - next)
public
double
[][]
tiles_RBGA
=
null
;
SuperTiles
superTiles
=
null
;
...
...
@@ -96,7 +97,14 @@ public class CLTPass3d{
}
}
public
int
getClustRadius
()
{
return
clust_radius
;
}
public
void
setClustRadius
(
int
clust_radius
)
{
this
.
clust_radius
=
clust_radius
;
}
public
TileProcessor
getTileProcessor
()
{
return
this
.
tileProcessor
;
...
...
@@ -606,32 +614,38 @@ public class CLTPass3d{
return
calc_disparity_combo
;
}
}
public
double
[]
getDisparityLMA
()
{
if
(
calc_disparity
==
null
)
conditionDisparity
();
// sets has_lma;
double
[]
disparityLMA
=
calc_disparity
.
clone
();
for
(
int
i
=
0
;
i
<
disparityLMA
.
length
;
i
++)
{
if
(!
has_lma
[
i
])
{
disparityLMA
[
i
]
=
Double
.
NaN
;
}
}
return
disparityLMA
;
}
// methods to "condition" measured disparity values
public
void
conditionDisparity
()
{
/*
conditionDisparity(disparity_index);
}
public void conditionDisparity(int disparity_index) // only called from above
{
*/
int
tilesX
=
tileProcessor
.
getTilesX
();
int
tilesY
=
tileProcessor
.
getTilesY
();
double
corr_magic_scale
=
tileProcessor
.
getMagicScale
();
double
corr_magic_scale_LMA
=
1.0
;
// int lma_disparity_index = ImageDtt.DISPARITY_INDEX_POLY;
// this.disparity_index = disparity_index;
calc_disparity
=
new
double
[
tilesY
*
tilesX
];
calc_disparity_hor
=
new
double
[
tilesY
*
tilesX
];
calc_disparity_vert
=
new
double
[
tilesY
*
tilesX
];
double
[]
lma_disparity
=
(
lma_disparity_index
>=
0
)
?
disparity_map
[
lma_disparity_index
]
:
null
;
double
[]
lma_strength
=
(
lma_disparity_index
>=
0
)
?
disparity_map
[
lma_disparity_index
+
1
]
:
null
;
has_lma
=
(
lma_disparity
!=
null
)
?
new
boolean
[
tilesX
*
tilesY
]
:
null
;
for
(
int
i
=
0
;
i
<
tilesY
;
i
++){
for
(
int
j
=
0
;
j
<
tilesX
;
j
++){
int
indx
=
i
*
tilesX
+
j
;
if
((
lma_disparity
!=
null
)
&&
!
Double
.
isNaN
(
lma_disparity
[
indx
]))
{
if
((
lma_disparity
!=
null
)
&&
!
Double
.
isNaN
(
lma_disparity
[
indx
])
&&
(
lma_strength
[
indx
]
>
0.0
)
)
{
calc_disparity
[
indx
]
=
lma_disparity
[
indx
]/
corr_magic_scale_LMA
+
this
.
disparity
[
i
][
j
];
has_lma
[
indx
]
=
true
;
}
else
{
calc_disparity
[
indx
]
=
disparity_map
[
disparity_index
][
indx
]/
corr_magic_scale
+
this
.
disparity
[
i
][
j
];
}
...
...
@@ -654,10 +668,11 @@ public class CLTPass3d{
int
tilesX
=
tileProcessor
.
getTilesX
();
int
tilesY
=
tileProcessor
.
getTilesY
();
double
[]
lma_disparity
=
(
lma_disparity_index
>=
0
)
?
disparity_map
[
lma_disparity_index
]
:
null
;
double
[]
lma_strength
=
(
lma_disparity_index
>=
0
)
?
disparity_map
[
lma_disparity_index
+
1
]
:
null
;
boolean
[]
lma_defined
=
new
boolean
[
tilesX
*
tilesY
];
if
(
lma_disparity
!=
null
)
{
for
(
int
i
=
0
;
i
<
lma_disparity
.
length
;
i
++)
{
lma_defined
[
i
]
=
!
Double
.
isNaN
(
lma_disparity
[
i
]);
lma_defined
[
i
]
=
!
Double
.
isNaN
(
lma_disparity
[
i
])
&&
(
lma_strength
[
i
]
>
0
)
;
}
}
return
lma_defined
;
...
...
src/main/java/com/elphel/imagej/tileprocessor/ExtrinsicAdjustment.java
View file @
00ba5f14
...
...
@@ -2439,7 +2439,7 @@ public class ExtrinsicAdjustment {
this
.
last_ymfx
);
// modifies this.last_ymfx (weights and subtracts fx)
this
.
initial_rms
=
this
.
last_rms
.
clone
();
this
.
good_or_bad_rms
=
this
.
last_rms
.
clone
();
if
(
debug_level
>
-
1
)
{
if
(
debug_level
>
1
)
{
showDerivatives
(
0
);
showDerivatives
(
1
);
showDerivatives
(
2
);
...
...
src/main/java/com/elphel/imagej/tileprocessor/ImageDttCPU.java
View file @
00ba5f14
This diff is collapsed.
Click to expand it.
src/main/java/com/elphel/imagej/tileprocessor/QuadCLT.java
View file @
00ba5f14
This diff is collapsed.
Click to expand it.
src/main/java/com/elphel/imagej/tileprocessor/QuadCLTCPU.java
View file @
00ba5f14
This diff is collapsed.
Click to expand it.
src/main/java/com/elphel/imagej/tileprocessor/TileProcessor.java
View file @
00ba5f14
This diff is collapsed.
Click to expand it.
src/main/java/com/elphel/imagej/tileprocessor/TwoQuadCLT.java
View file @
00ba5f14
This diff is collapsed.
Click to expand it.
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