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
33977018
Commit
33977018
authored
Jun 16, 2022
by
Andrey Filippov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Working on extended window (more than reference scene sesnor view)
parent
b4d88911
Changes
8
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
480 additions
and
123 deletions
+480
-123
GpuQuad.java
src/main/java/com/elphel/imagej/gpu/GpuQuad.java
+172
-75
ImagejJp4Tiff.java
src/main/java/com/elphel/imagej/readers/ImagejJp4Tiff.java
+1
-1
ImageDtt.java
src/main/java/com/elphel/imagej/tileprocessor/ImageDtt.java
+3
-20
IntersceneMatchParameters.java
...lphel/imagej/tileprocessor/IntersceneMatchParameters.java
+18
-4
MultisceneLY.java
...in/java/com/elphel/imagej/tileprocessor/MultisceneLY.java
+3
-0
OpticalFlow.java
...ain/java/com/elphel/imagej/tileprocessor/OpticalFlow.java
+178
-7
QuadCLT.java
src/main/java/com/elphel/imagej/tileprocessor/QuadCLT.java
+97
-12
QuadCLTCPU.java
...main/java/com/elphel/imagej/tileprocessor/QuadCLTCPU.java
+8
-4
No files found.
src/main/java/com/elphel/imagej/gpu/GpuQuad.java
View file @
33977018
This diff is collapsed.
Click to expand it.
src/main/java/com/elphel/imagej/readers/ImagejJp4Tiff.java
View file @
33977018
...
@@ -95,7 +95,7 @@ public class ImagejJp4Tiff {
...
@@ -95,7 +95,7 @@ public class ImagejJp4Tiff {
// private static final int FIXCH6_MAXVAL = 23367; // higher - subtract 4096, <19271 -add 4096
// private static final int FIXCH6_MAXVAL = 23367; // higher - subtract 4096, <19271 -add 4096
private
static
final
int
FIXCH6_EXPECTED
=
21319
;
// expected value
private
static
final
int
FIXCH6_EXPECTED
=
21319
;
// expected value
private
static
final
String
FIXCH6_EARLIEST
=
"2021-12-01 00:00:00.000"
;
private
static
final
String
FIXCH6_EARLIEST
=
"2021-12-01 00:00:00.000"
;
private
static
final
String
FIXCH6_LATEST
=
"2022-
04
-01 00:00:00.000"
;
private
static
final
String
FIXCH6_LATEST
=
"2022-
12
-01 00:00:00.000"
;
// -- Fields --
// -- Fields --
...
...
src/main/java/com/elphel/imagej/tileprocessor/ImageDtt.java
View file @
33977018
...
@@ -141,35 +141,16 @@ public class ImageDtt extends ImageDttCPU {
...
@@ -141,35 +141,16 @@ public class ImageDtt extends ImageDttCPU {
final
boolean
macro_mode
=
macro_scale
!=
1
;
// correlate tile data instead of the pixel data
final
boolean
macro_mode
=
macro_scale
!=
1
;
// correlate tile data instead of the pixel data
// final int quad = getNumSensors(); // 4; // number of subcameras
// final int numcol = 3; // number of colors // keep the same, just do not use [0] and [1], [2] - green
final
int
numcol
=
isMonochrome
()?
1
:
3
;
final
int
numcol
=
isMonochrome
()?
1
:
3
;
final
int
width
=
gpuQuad
.
getImageWidth
();
final
int
width
=
gpuQuad
.
getImageWidth
();
final
int
height
=
gpuQuad
.
getImageHeight
();
final
int
height
=
gpuQuad
.
getImageHeight
();
final
int
tilesX
=
gpuQuad
.
getTilesX
();
// width/transform_size;
final
int
tilesX
=
gpuQuad
.
getTilesX
();
// width/transform_size;
final
int
tilesY
=
gpuQuad
.
getTilesY
();
// final int tilesY=height/transform_size;
final
int
tilesY
=
gpuQuad
.
getTilesY
();
// final int tilesY=height/transform_size;
//// final int nTilesInChn=tilesX*tilesY;
//// final double [][][][][][] clt_data = new double[quad][numcol][tilesY][tilesX][][];
final
Thread
[]
threads
=
newThreadArray
(
threadsMax
);
final
Thread
[]
threads
=
newThreadArray
(
threadsMax
);
final
AtomicInteger
ai
=
new
AtomicInteger
(
0
);
final
AtomicInteger
ai
=
new
AtomicInteger
(
0
);
final
double
[]
col_weights
=
new
double
[
numcol
];
// colors are RBG
final
double
[]
col_weights
=
new
double
[
numcol
];
// colors are RBG
final
double
[][]
dbg_distort
=
debug_distort
?
(
new
double
[
4
*
getNumSensors
()][
tilesX
*
tilesY
])
:
null
;
final
double
[][]
dbg_distort
=
debug_distort
?
(
new
double
[
4
*
getNumSensors
()][
tilesX
*
tilesY
])
:
null
;
// not yet used with GPU
/**
final double [][] corr_wnd = Corr2dLMA.getCorrWnd(
transform_size,
imgdtt_params.lma_wnd);
final double [] corr_wnd_inv_limited = (imgdtt_params.lma_min_wnd <= 1.0)? new double [corr_wnd.length * corr_wnd[0].length]: null;
if (corr_wnd_inv_limited != null) {
double inv_pwr = imgdtt_params.lma_wnd_pwr - (imgdtt_params.lma_wnd - 1.0); // compensate for lma_wnd
for (int i = imgdtt_params.lma_hard_marg; i < (corr_wnd.length - imgdtt_params.lma_hard_marg); i++) {
for (int j = imgdtt_params.lma_hard_marg; j < (corr_wnd.length - imgdtt_params.lma_hard_marg); j++) {
corr_wnd_inv_limited[i * (corr_wnd.length) + j] = 1.0/Math.max(Math.pow(corr_wnd[i][j],inv_pwr), imgdtt_params.lma_min_wnd);
}
}
}
*/
// keep for now for mono, find out what do they mean for macro mode
// keep for now for mono, find out what do they mean for macro mode
if
(
isMonochrome
())
{
if
(
isMonochrome
())
{
...
@@ -1173,6 +1154,7 @@ public class ImageDtt extends ImageDttCPU {
...
@@ -1173,6 +1154,7 @@ public class ImageDtt extends ImageDttCPU {
* @param globalDebugLevel
* @param globalDebugLevel
*/
*/
public
void
setReferenceTD
(
public
void
setReferenceTD
(
final
int
[]
wh
,
// null (use sensor dimensions) or pair {width, height} in pixels
final
ImageDttParameters
imgdtt_params
,
// Now just extra correlation parameters, later will include, most others
final
ImageDttParameters
imgdtt_params
,
// Now just extra correlation parameters, later will include, most others
final
boolean
use_reference_buffer
,
final
boolean
use_reference_buffer
,
final
TpTask
[]
tp_tasks
,
final
TpTask
[]
tp_tasks
,
...
@@ -1203,7 +1185,8 @@ public class ImageDtt extends ImageDttCPU {
...
@@ -1203,7 +1185,8 @@ public class ImageDtt extends ImageDttCPU {
tp_tasks
,
tp_tasks
,
false
);
// boolean use_aux // while is it in class member? - just to be able to free
false
);
// boolean use_aux // while is it in class member? - just to be able to free
// Skipping if ((fdisp_dist != null) || (fpxpy != null)) {...
// Skipping if ((fdisp_dist != null) || (fpxpy != null)) {...
gpuQuad
.
execConvertDirect
(
use_reference_buffer
);
// put results into a "reference" buffer
// int [] wh = null;
gpuQuad
.
execConvertDirect
(
use_reference_buffer
,
wh
);
// put results into a "reference" buffer
}
}
...
...
src/main/java/com/elphel/imagej/tileprocessor/IntersceneMatchParameters.java
View file @
33977018
...
@@ -33,8 +33,10 @@ public class IntersceneMatchParameters {
...
@@ -33,8 +33,10 @@ public class IntersceneMatchParameters {
public
boolean
force_ref_dsi
=
false
;
// true;
public
boolean
force_ref_dsi
=
false
;
// true;
public
boolean
force_orientations
=
false
;
public
boolean
force_orientations
=
false
;
public
boolean
force_interscene
=
false
;
// true;
public
boolean
force_interscene
=
false
;
// true;
public
boolean
export_images
=
true
;
// 16-slice images (same disparity, COMBO_DSN_INDX_DISP_FG and COMBO_DSN_INDX_DISP_BG_ALL,
public
boolean
export_images
=
true
;
// pseudo-color 16-slice images (same disparity, COMBO_DSN_INDX_DISP_FG and COMBO_DSN_INDX_DISP_BG_ALL,
public
boolean
show_images
=
false
;
public
boolean
show_images
=
false
;
// color, infinity
public
boolean
show_images_bgfg
=
false
;
// bg and fg
public
boolean
show_images_mono
=
false
;
// float, monochrome 16-slice images (same disparity, COMBO_DSN_INDX_DISP_FG and COMBO_DSN_INDX_DISP_BG_ALL,
public
boolean
show_ranges
=
true
;
public
boolean
show_ranges
=
true
;
public
double
range_disparity_offset
=
-
0.08
;
public
double
range_disparity_offset
=
-
0.08
;
...
@@ -112,8 +114,12 @@ public class IntersceneMatchParameters {
...
@@ -112,8 +114,12 @@ public class IntersceneMatchParameters {
"Force interscene calculation (+ML export) even if it was performed before."
);
"Force interscene calculation (+ML export) even if it was performed before."
);
gd
.
addCheckbox
(
"Export all-sensor images"
,
this
.
export_images
,
gd
.
addCheckbox
(
"Export all-sensor images"
,
this
.
export_images
,
"Export multi-slice images: with constant disparity, with foreground disparity, and with background disparity"
);
"Export multi-slice images: with constant disparity, with foreground disparity, and with background disparity"
);
gd
.
addCheckbox
(
"Show exported images"
,
this
.
show_images
,
gd
.
addCheckbox
(
"Show exported images (same disparity)"
,
this
.
show_images
,
"Display generated/saved images"
);
"Display generated/saved image set, pseudocolors"
);
gd
.
addCheckbox
(
"Show exported FG/BG"
,
this
.
show_images_bgfg
,
"Show foreground and background exported images"
);
gd
.
addCheckbox
(
"Show floating-point monochrome images"
,
this
.
show_images_mono
,
"Display generated/saved monochrome images"
);
gd
.
addCheckbox
(
"Show distances in meters"
,
this
.
show_ranges
,
gd
.
addCheckbox
(
"Show distances in meters"
,
this
.
show_ranges
,
"Calculate strength, distance, X, and Y in meters"
);
"Calculate strength, distance, X, and Y in meters"
);
...
@@ -226,6 +232,8 @@ public class IntersceneMatchParameters {
...
@@ -226,6 +232,8 @@ public class IntersceneMatchParameters {
this
.
force_interscene
=
gd
.
getNextBoolean
();
this
.
force_interscene
=
gd
.
getNextBoolean
();
this
.
export_images
=
gd
.
getNextBoolean
();
this
.
export_images
=
gd
.
getNextBoolean
();
this
.
show_images
=
gd
.
getNextBoolean
();
this
.
show_images
=
gd
.
getNextBoolean
();
this
.
show_images_bgfg
=
gd
.
getNextBoolean
();
this
.
show_images_mono
=
gd
.
getNextBoolean
();
this
.
show_ranges
=
gd
.
getNextBoolean
();
this
.
show_ranges
=
gd
.
getNextBoolean
();
this
.
range_disparity_offset
=
gd
.
getNextNumber
();
this
.
range_disparity_offset
=
gd
.
getNextNumber
();
this
.
range_min_strength
=
gd
.
getNextNumber
();
this
.
range_min_strength
=
gd
.
getNextNumber
();
...
@@ -282,6 +290,8 @@ public class IntersceneMatchParameters {
...
@@ -282,6 +290,8 @@ public class IntersceneMatchParameters {
properties
.
setProperty
(
prefix
+
"force_interscene"
,
this
.
force_interscene
+
""
);
// boolean
properties
.
setProperty
(
prefix
+
"force_interscene"
,
this
.
force_interscene
+
""
);
// boolean
properties
.
setProperty
(
prefix
+
"export_images"
,
this
.
export_images
+
""
);
// boolean
properties
.
setProperty
(
prefix
+
"export_images"
,
this
.
export_images
+
""
);
// boolean
properties
.
setProperty
(
prefix
+
"show_images"
,
this
.
show_images
+
""
);
// boolean
properties
.
setProperty
(
prefix
+
"show_images"
,
this
.
show_images
+
""
);
// boolean
properties
.
setProperty
(
prefix
+
"show_images_bgfg"
,
this
.
show_images_bgfg
+
""
);
// boolean
properties
.
setProperty
(
prefix
+
"show_images_mono"
,
this
.
show_images_mono
+
""
);
// boolean
properties
.
setProperty
(
prefix
+
"show_ranges"
,
this
.
show_ranges
+
""
);
// boolean
properties
.
setProperty
(
prefix
+
"show_ranges"
,
this
.
show_ranges
+
""
);
// boolean
properties
.
setProperty
(
prefix
+
"range_disparity_offset"
,
this
.
range_disparity_offset
+
""
);
// double
properties
.
setProperty
(
prefix
+
"range_disparity_offset"
,
this
.
range_disparity_offset
+
""
);
// double
...
@@ -337,6 +347,8 @@ public class IntersceneMatchParameters {
...
@@ -337,6 +347,8 @@ public class IntersceneMatchParameters {
if
(
properties
.
getProperty
(
prefix
+
"force_interscene"
)!=
null
)
this
.
force_interscene
=
Boolean
.
parseBoolean
(
properties
.
getProperty
(
prefix
+
"force_interscene"
));
if
(
properties
.
getProperty
(
prefix
+
"force_interscene"
)!=
null
)
this
.
force_interscene
=
Boolean
.
parseBoolean
(
properties
.
getProperty
(
prefix
+
"force_interscene"
));
if
(
properties
.
getProperty
(
prefix
+
"export_images"
)!=
null
)
this
.
export_images
=
Boolean
.
parseBoolean
(
properties
.
getProperty
(
prefix
+
"export_images"
));
if
(
properties
.
getProperty
(
prefix
+
"export_images"
)!=
null
)
this
.
export_images
=
Boolean
.
parseBoolean
(
properties
.
getProperty
(
prefix
+
"export_images"
));
if
(
properties
.
getProperty
(
prefix
+
"show_images"
)!=
null
)
this
.
show_images
=
Boolean
.
parseBoolean
(
properties
.
getProperty
(
prefix
+
"show_images"
));
if
(
properties
.
getProperty
(
prefix
+
"show_images"
)!=
null
)
this
.
show_images
=
Boolean
.
parseBoolean
(
properties
.
getProperty
(
prefix
+
"show_images"
));
if
(
properties
.
getProperty
(
prefix
+
"show_images_bgfg"
)!=
null
)
this
.
show_images_bgfg
=
Boolean
.
parseBoolean
(
properties
.
getProperty
(
prefix
+
"show_images_bgfg"
));
if
(
properties
.
getProperty
(
prefix
+
"show_images_mono"
)!=
null
)
this
.
show_images_mono
=
Boolean
.
parseBoolean
(
properties
.
getProperty
(
prefix
+
"show_images_mono"
));
if
(
properties
.
getProperty
(
prefix
+
"show_ranges"
)!=
null
)
this
.
show_images
=
Boolean
.
parseBoolean
(
properties
.
getProperty
(
prefix
+
"show_ranges"
));
if
(
properties
.
getProperty
(
prefix
+
"show_ranges"
)!=
null
)
this
.
show_images
=
Boolean
.
parseBoolean
(
properties
.
getProperty
(
prefix
+
"show_ranges"
));
if
(
properties
.
getProperty
(
prefix
+
"range_disparity_offset"
)!=
null
)
this
.
range_disparity_offset
=
Double
.
parseDouble
(
properties
.
getProperty
(
prefix
+
"range_disparity_offset"
));
if
(
properties
.
getProperty
(
prefix
+
"range_disparity_offset"
)!=
null
)
this
.
range_disparity_offset
=
Double
.
parseDouble
(
properties
.
getProperty
(
prefix
+
"range_disparity_offset"
));
if
(
properties
.
getProperty
(
prefix
+
"range_min_strength"
)!=
null
)
this
.
range_min_strength
=
Double
.
parseDouble
(
properties
.
getProperty
(
prefix
+
"range_min_strength"
));
if
(
properties
.
getProperty
(
prefix
+
"range_min_strength"
)!=
null
)
this
.
range_min_strength
=
Double
.
parseDouble
(
properties
.
getProperty
(
prefix
+
"range_min_strength"
));
...
@@ -392,6 +404,8 @@ public class IntersceneMatchParameters {
...
@@ -392,6 +404,8 @@ public class IntersceneMatchParameters {
imp
.
force_interscene
=
this
.
force_interscene
;
imp
.
force_interscene
=
this
.
force_interscene
;
imp
.
export_images
=
this
.
export_images
;
imp
.
export_images
=
this
.
export_images
;
imp
.
show_images
=
this
.
show_images
;
imp
.
show_images
=
this
.
show_images
;
imp
.
show_images_bgfg
=
this
.
show_images_bgfg
;
imp
.
show_images_mono
=
this
.
show_images_mono
;
imp
.
show_ranges
=
this
.
show_ranges
;
imp
.
show_ranges
=
this
.
show_ranges
;
imp
.
range_disparity_offset
=
this
.
range_disparity_offset
;
imp
.
range_disparity_offset
=
this
.
range_disparity_offset
;
imp
.
range_min_strength
=
this
.
range_min_strength
;
imp
.
range_min_strength
=
this
.
range_min_strength
;
...
...
src/main/java/com/elphel/imagej/tileprocessor/MultisceneLY.java
View file @
33977018
package
com
.
elphel
.
imagej
.
tileprocessor
;
package
com
.
elphel
.
imagej
.
tileprocessor
;
import
java.awt.Rectangle
;
import
java.util.Arrays
;
import
java.util.Arrays
;
import
java.util.concurrent.atomic.AtomicInteger
;
import
java.util.concurrent.atomic.AtomicInteger
;
...
@@ -237,6 +238,7 @@ public class MultisceneLY {
...
@@ -237,6 +238,7 @@ public class MultisceneLY {
String
ts
=
scenes
[
nscene
].
getImageName
();
String
ts
=
scenes
[
nscene
].
getImageName
();
if
(
nscene
==
last_scene_index
)
{
if
(
nscene
==
last_scene_index
)
{
scenes_pXpYD
[
nscene
]
=
OpticalFlow
.
transformToScenePxPyD
(
scenes_pXpYD
[
nscene
]
=
OpticalFlow
.
transformToScenePxPyD
(
null
,
// final Rectangle [] extra_woi, // show larger than sensor WOI (or null)
disparity_ref
,
// final double [] disparity_ref, // invalid tiles - NaN in disparity (maybe it should not be masked by margins?)
disparity_ref
,
// final double [] disparity_ref, // invalid tiles - NaN in disparity (maybe it should not be masked by margins?)
OpticalFlow
.
ZERO3
,
// final double [] scene_xyz, // camera center in world coordinates
OpticalFlow
.
ZERO3
,
// final double [] scene_xyz, // camera center in world coordinates
OpticalFlow
.
ZERO3
,
// final double [] scene_atr, // camera orientation relative to world frame
OpticalFlow
.
ZERO3
,
// final double [] scene_atr, // camera orientation relative to world frame
...
@@ -253,6 +255,7 @@ public class MultisceneLY {
...
@@ -253,6 +255,7 @@ public class MultisceneLY {
scene_ers_atr_dt
);
// double [] ers_atr_dt)(ers_scene_original_xyz_dt);
scene_ers_atr_dt
);
// double [] ers_atr_dt)(ers_scene_original_xyz_dt);
//setupERS() will be inside transformToScenePxPyD()
//setupERS() will be inside transformToScenePxPyD()
scenes_pXpYD
[
nscene
]
=
OpticalFlow
.
transformToScenePxPyD
(
// will be null for disparity == NaN, total size - tilesX*tilesY
scenes_pXpYD
[
nscene
]
=
OpticalFlow
.
transformToScenePxPyD
(
// will be null for disparity == NaN, total size - tilesX*tilesY
null
,
// final Rectangle [] extra_woi, // show larger than sensor WOI (or null)
disparity_ref
,
// final double [] disparity_ref, // invalid tiles - NaN in disparity (maybe it should not be masked by margins?)
disparity_ref
,
// final double [] disparity_ref, // invalid tiles - NaN in disparity (maybe it should not be masked by margins?)
scene_xyz
,
// final double [] scene_xyz, // camera center in world coordinates
scene_xyz
,
// final double [] scene_xyz, // camera center in world coordinates
scene_atr
,
// final double [] scene_atr, // camera orientation relative to world frame
scene_atr
,
// final double [] scene_atr, // camera orientation relative to world frame
...
...
src/main/java/com/elphel/imagej/tileprocessor/OpticalFlow.java
View file @
33977018
This diff is collapsed.
Click to expand it.
src/main/java/com/elphel/imagej/tileprocessor/QuadCLT.java
View file @
33977018
This diff is collapsed.
Click to expand it.
src/main/java/com/elphel/imagej/tileprocessor/QuadCLTCPU.java
View file @
33977018
...
@@ -1175,12 +1175,15 @@ public class QuadCLTCPU {
...
@@ -1175,12 +1175,15 @@ public class QuadCLTCPU {
}
}
public
void
saveImagePlusInModelDirectory
(
public
void
saveImagePlusInModelDirectory
(
String
suffix
,
String
suffix
,
// null - use title from the imp
ImagePlus
imp
)
ImagePlus
imp
)
{
{
String
x3d_path
=
getX3dDirectory
();
String
x3d_path
=
getX3dDirectory
();
String
file_name
=
image_name
+
suffix
;
String
file_name
=
(
suffix
==
null
)
?
imp
.
getTitle
():(
image_name
+
suffix
);
String
file_path
=
x3d_path
+
Prefs
.
getFileSeparator
()
+
file_name
+
".tiff"
;
String
file_path
=
x3d_path
+
Prefs
.
getFileSeparator
()
+
file_name
;
// + ".tiff";
if
(!
file_path
.
endsWith
(
".tiff"
))
{
file_path
+=
".tiff"
;
}
FileSaver
fs
=
new
FileSaver
(
imp
);
FileSaver
fs
=
new
FileSaver
(
imp
);
fs
.
saveAsTiff
(
file_path
);
fs
.
saveAsTiff
(
file_path
);
System
.
out
.
println
(
"saveDoubleArrayInModelDirectory(): saved "
+
file_path
);
System
.
out
.
println
(
"saveDoubleArrayInModelDirectory(): saved "
+
file_path
);
...
@@ -7122,7 +7125,8 @@ public class QuadCLTCPU {
...
@@ -7122,7 +7125,8 @@ public class QuadCLTCPU {
float
[]
alpha
=
null
;
// (0..1.0)
float
[]
alpha
=
null
;
// (0..1.0)
if
(
iclt_data
.
length
>
3
)
alpha
=
iclt_data
[
3
];
if
(
iclt_data
.
length
>
3
)
alpha
=
iclt_data
[
3
];
if
(
isLwir
())
{
if
(
isLwir
())
{
if
(!
colorProcParameters
.
lwir_pseudocolor
)
{
//// if (!colorProcParameters.lwir_pseudocolor) {
if
(!
toRGB
)
{
ImageProcessor
ip
=
new
FloatProcessor
(
width
,
height
);
ImageProcessor
ip
=
new
FloatProcessor
(
width
,
height
);
ip
.
setPixels
(
iclt_data
[
0
]);
ip
.
setPixels
(
iclt_data
[
0
]);
ip
.
resetMinAndMax
();
ip
.
resetMinAndMax
();
...
...
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