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
aa48f730
Commit
aa48f730
authored
Dec 27, 2017
by
Andrey Filippov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Comparison file generation for mclt16x16_bayer
parent
59128ef9
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
921 additions
and
542 deletions
+921
-542
ImageDtt.java
src/main/java/ImageDtt.java
+921
-542
No files found.
src/main/java/ImageDtt.java
View file @
aa48f730
...
...
@@ -22,6 +22,7 @@
**
*/
import
java.util.concurrent.atomic.AtomicInteger
;
import
Jama.Matrix
;
import
ij.ImageStack
;
...
...
@@ -193,6 +194,7 @@ public class ImageDtt {
for
(
int
ithread
=
0
;
ithread
<
threads
.
length
;
ithread
++)
{
threads
[
ithread
]
=
new
Thread
()
{
@Override
public
void
run
()
{
DttRad2
dtt
=
new
DttRad2
(
dct_size
);
dtt
.
set_window
(
window_type
);
...
...
@@ -426,6 +428,7 @@ public class ImageDtt {
for
(
int
ithread
=
0
;
ithread
<
threads
.
length
;
ithread
++)
{
threads
[
ithread
]
=
new
Thread
()
{
@Override
public
void
run
()
{
int
tileY
,
tileX
;
for
(
int
nTile
=
ai
.
getAndIncrement
();
nTile
<
nTiles
;
nTile
=
ai
.
getAndIncrement
())
{
...
...
@@ -505,6 +508,7 @@ public class ImageDtt {
for
(
int
ithread
=
0
;
ithread
<
threads
.
length
;
ithread
++)
{
threads
[
ithread
]
=
new
Thread
()
{
@Override
public
void
run
()
{
int
tileY
,
tileX
;
for
(
int
nTile
=
ai
.
getAndIncrement
();
nTile
<
nTiles
;
nTile
=
ai
.
getAndIncrement
())
{
...
...
@@ -619,6 +623,7 @@ public class ImageDtt {
for
(
int
ithread
=
0
;
ithread
<
threads
.
length
;
ithread
++)
{
threads
[
ithread
]
=
new
Thread
()
{
@Override
public
void
run
()
{
int
tileY
,
tileX
;
for
(
int
nTile
=
ai
.
getAndIncrement
();
nTile
<
nTiles
;
nTile
=
ai
.
getAndIncrement
())
{
...
...
@@ -688,6 +693,7 @@ public class ImageDtt {
ai
.
set
(
0
);
for
(
int
ithread
=
0
;
ithread
<
threads
.
length
;
ithread
++)
{
threads
[
ithread
]
=
new
Thread
()
{
@Override
public
void
run
()
{
DttRad2
dtt
=
new
DttRad2
(
dct_size
);
dtt
.
set_window
(
window_type
);
...
...
@@ -750,6 +756,7 @@ public class ImageDtt {
}
for
(
int
ithread
=
0
;
ithread
<
threads
.
length
;
ithread
++)
{
threads
[
ithread
]
=
new
Thread
()
{
@Override
public
void
run
()
{
DttRad2
dtt
=
new
DttRad2
(
transform_size
);
dtt
.
set_window
(
window_type
);
...
...
@@ -860,6 +867,7 @@ public class ImageDtt {
}
for
(
int
ithread
=
0
;
ithread
<
threads
.
length
;
ithread
++)
{
threads
[
ithread
]
=
new
Thread
()
{
@Override
public
void
run
()
{
DttRad2
dtt
=
new
DttRad2
(
transform_size
);
dtt
.
set_window
(
window_type
);
...
...
@@ -971,9 +979,344 @@ public class ImageDtt {
return
clt_data
;
}
/*
*
*/
public
void
generateFPGACompareData
(
final
double
[][]
image_data
,
// for selected subcamera
final
double
[][]
colorCentersXY
,
// pixel centers per color (2 - green)
final
int
transform_size
,
final
int
width
,
DttRad2
dtt
){
int
height
=
image_data
[
0
].
length
/
width
;
double
[][][]
fpga_clt_data_in
=
new
double
[
3
][
4
][];
double
[][][]
fpga_clt_data_out
=
new
double
[
3
][
4
][];
double
[][][]
fpga_clt_data_rot
=
new
double
[
3
][
4
][];
// double [][] fpga_fract_shiftsXY = new double[3][];
double
[][]
fpga_centersXY
=
new
double
[
3
][
2
];
// int [][] color_int_shifts = new int [3][2];
double
[][][][]
fold_coeff
=
new
double
[
3
][][][];
int
[]
ctile_left
=
new
int
[
3
];
int
[]
ctile_top
=
new
int
[
3
];
double
[][]
residual_shift
=
new
double
[
3
][
2
];
int
[]
ishx
=
new
int
[
3
];
int
[]
ishy
=
new
int
[
3
];
double
[][]
fpga_full_tile
=
new
double
[
3
][
FPGA_TILE_SIZE
*
FPGA_TILE_SIZE
];
double
[][]
fpga_tile
=
new
double
[
3
][
4
*
transform_size
*
transform_size
];
for
(
int
chn
=
0
;
chn
<
3
;
chn
++)
for
(
int
j
=
0
;
j
<
2
;
j
++)
{
fpga_centersXY
[
chn
][
j
]
=
colorCentersXY
[
chn
][
j
];
// Round to FPGA precision
fpga_centersXY
[
chn
][
j
]
=
Math
.
round
(
128
*
fpga_centersXY
[
chn
][
j
])/
128.0
;
}
for
(
int
chn
=
0
;
chn
<
3
;
chn
++)
{
double
px
=
fpga_centersXY
[
chn
][
0
]
-
transform_size
;
double
py
=
fpga_centersXY
[
chn
][
1
]
-
transform_size
;
// Was wrong rounding, fractional part gets to +0.5
ctile_left
[
chn
]
=
(
int
)
-
Math
.
round
(-
px
);
ctile_top
[
chn
]
=
(
int
)
-
Math
.
round
(-
py
);
residual_shift
[
chn
][
0
]
=
-(
px
-
ctile_left
[
chn
]);
residual_shift
[
chn
][
1
]
=
-(
py
-
ctile_top
[
chn
]);
}
int
lt
=
(
FPGA_TILE_SIZE
-
2
*
transform_size
)/
2
;
for
(
int
chn
=
0
;
chn
<
3
;
chn
++){
for
(
int
i
=
0
;
i
<
FPGA_TILE_SIZE
;
i
++){
System
.
arraycopy
(
image_data
[
chn
],
((
ctile_top
[
GREEN_CHN
]
-
lt
)
+
i
)
*
width
+
(
ctile_left
[
GREEN_CHN
]
-
lt
),
fpga_full_tile
[
chn
],
FPGA_TILE_SIZE
*
i
,
FPGA_TILE_SIZE
);
}
}
for
(
int
chn
=
0
;
chn
<
3
;
chn
++){
if
((
ctile_left
[
chn
]
>=
0
)
&&
(
ctile_left
[
chn
]
<
(
width
-
transform_size
*
2
))
&&
(
ctile_top
[
chn
]
>=
0
)
&&
(
ctile_top
[
chn
]
<
(
height
-
transform_size
*
2
)))
{
for
(
int
i
=
0
;
i
<
transform_size
*
2
;
i
++){
System
.
arraycopy
(
image_data
[
chn
],
(
ctile_top
[
chn
]
+
i
)
*
width
+
ctile_left
[
chn
],
fpga_tile
[
chn
],
transform_size
*
2
*
i
,
transform_size
*
2
);
}
}
else
{
// copy by 1
for
(
int
i
=
0
;
i
<
transform_size
*
2
;
i
++){
int
pi
=
ctile_top
[
chn
]
+
i
;
if
(
pi
<
0
)
pi
&=
1
;
else
if
(
pi
>=
height
)
pi
=
height
-
2
+
(
pi
&
1
);
for
(
int
j
=
0
;
j
<
transform_size
*
2
;
j
++){
int
pj
=
ctile_left
[
chn
]
+
j
;
if
(
pj
<
0
)
pj
&=
1
;
else
if
(
pj
>=
width
)
pj
=
width
-
2
+
(
pj
&
1
);
fpga_tile
[
chn
][
transform_size
*
2
*
i
+
j
]
=
image_data
[
chn
][
pi
*
width
+
pj
];
}
}
}
}
// Fold and transform
for
(
int
chn
=
0
;
chn
<
3
;
chn
++){
fold_coeff
[
chn
]
=
dtt
.
get_shifted_fold_2d
(
// get_shifted_fold_2d(
transform_size
,
residual_shift
[
chn
][
0
],
residual_shift
[
chn
][
1
],
0
);
// debug level
}
for
(
int
chn
=
0
;
chn
<
3
;
chn
++){
for
(
int
dct_mode
=
0
;
dct_mode
<
4
;
dct_mode
++)
{
// fpga_clt_data_in[chn][dct_mode] = dtt.fold_tile_debug (fpga_tile[chn], transform_size, dct_mode, fold_coeff[chn]); // DCCT, DSCT, DCST, DSST
fpga_clt_data_in
[
chn
][
dct_mode
]
=
dtt
.
fold_tile
(
fpga_tile
[
chn
],
transform_size
,
dct_mode
,
fold_coeff
[
chn
]);
// DCCT, DSCT, DCST, DSST
}
}
for
(
int
chn
=
0
;
chn
<
3
;
chn
++)
if
(
chn
!=
GREEN_CHN
)
{
for
(
int
dct_mode
=
0
;
dct_mode
<
4
;
dct_mode
++)
{
for
(
int
i
=
0
;
i
<
64
;
i
++){
fpga_clt_data_in
[
chn
][
dct_mode
][
i
]
*=
2.0
;
//adding twice each number in FPGA for R and B
}
}
}
for
(
int
chn
=
0
;
chn
<
3
;
chn
++)
{
for
(
int
dct_mode
=
0
;
dct_mode
<
4
;
dct_mode
++)
{
fpga_clt_data_out
[
chn
][
dct_mode
]
=
fpga_clt_data_in
[
chn
][
dct_mode
].
clone
();
}
}
double
scale1
=
(
1
<<
(
FPGA_DTT_IN
-
9
));
// -1;
scale1
*=
1.0
*((
1
<<
FPGA_WND_BITS
)
-
1
)
/
(
1
<<
FPGA_WND_BITS
);
scale1
*=
1.0
*((
1
<<
FPGA_WND_BITS
)
-
1
)
/
(
1
<<
FPGA_WND_BITS
);
// scale1 *= 2.0;
System
.
out
.
println
(
"scale1="
+
scale1
);
for
(
int
chn
=
0
;
chn
<
3
;
chn
++)
{
for
(
int
dct_mode
=
0
;
dct_mode
<
4
;
dct_mode
++)
{
System
.
out
.
println
(
"Color="
+
chn
+
" fpga_clt_data_out[chn][dct_mode] = dtt.dttt_iv(..., scale1="
+
scale1
);
fpga_clt_data_out
[
chn
][
dct_mode
]
=
dtt
.
dttt_iv
(
fpga_clt_data_out
[
chn
][
dct_mode
],
dct_mode
,
transform_size
,
scale1
,
((
1
<<
25
)
-
1
));
// debug level
// fpga_clt_data_out[chn][dct_mode] = dtt.dttt_iv (fpga_clt_data_out[chn][dct_mode], dct_mode, transform_size);
}
}
for
(
int
chn
=
0
;
chn
<
3
;
chn
++)
{
for
(
int
dct_mode
=
0
;
dct_mode
<
4
;
dct_mode
++)
{
fpga_clt_data_rot
[
chn
][
dct_mode
]
=
fpga_clt_data_out
[
chn
][
dct_mode
].
clone
();
}
}
// Rotate for fractional shift:
for
(
int
chn
=
0
;
chn
<
3
;
chn
++)
{
fract_shift
(
// fractional shift in transform domain. Currently uses sin/cos - change to tables with 2? rotations
fpga_clt_data_rot
[
chn
],
// double [][] clt_tile,
transform_size
,
residual_shift
[
chn
][
0
],
// double shiftX,
residual_shift
[
chn
][
1
],
// double shiftY,
true
);
// debug
}
// int byr_shift = ((ctile_top[GREEN_CHN] & 1) <<1) | (ctile_left[GREEN_CHN] & 1);
//GREEN_CHN
// Printout
System
.
out
.
println
(
"// Debugging FPGA implementation"
);
for
(
int
chn
=
0
;
chn
<
3
;
chn
++)
{
System
.
out
.
println
(
"// residual_shift["
+
chn
+
"][0]="
+
residual_shift
[
chn
][
0
]+
", residual_shift["
+
chn
+
"][1]="
+
residual_shift
[
chn
][
1
]);
ishx
[
chn
]
=
(
int
)
Math
.
round
((
1
<<
(
FPGA_SHIFT_BITS
))
*
residual_shift
[
chn
][
0
]);
ishy
[
chn
]
=
(
int
)
Math
.
round
((
1
<<
(
FPGA_SHIFT_BITS
))
*
residual_shift
[
chn
][
1
]);
if
(
ishx
[
chn
]
>=
(
1
<<
(
FPGA_SHIFT_BITS
-
1
)))
ishx
[
chn
]
=
(
1
<<
(
FPGA_SHIFT_BITS
-
1
))
-
1
;
if
(
ishy
[
chn
]
>=
(
1
<<
(
FPGA_SHIFT_BITS
-
1
)))
ishy
[
chn
]
=
(
1
<<
(
FPGA_SHIFT_BITS
-
1
))
-
1
;
if
(
ishx
[
chn
]
<
-(
1
<<
(
FPGA_SHIFT_BITS
-
1
)))
ishx
[
chn
]
=
-(
1
<<
(
FPGA_SHIFT_BITS
-
1
));
if
(
ishy
[
chn
]
<
-(
1
<<
(
FPGA_SHIFT_BITS
-
1
)))
ishy
[
chn
]
=
-(
1
<<
(
FPGA_SHIFT_BITS
-
1
));
residual_shift
[
chn
][
0
]
=
ishx
[
chn
]
*
(
1.0
/(
1
<<
(
FPGA_SHIFT_BITS
)));
residual_shift
[
chn
][
1
]
=
ishy
[
chn
]
*
(
1.0
/(
1
<<
(
FPGA_SHIFT_BITS
)));
System
.
out
.
println
(
String
.
format
(
"%4x // color %d shift_x, %d bits"
,
ishx
[
chn
]
&
((
1
<<
(
FPGA_SHIFT_BITS
))
-
1
),
chn
,
FPGA_SHIFT_BITS
));
System
.
out
.
println
(
String
.
format
(
"%4x // color %d shift_y, %d bits"
,
ishy
[
chn
]
&
((
1
<<
(
FPGA_SHIFT_BITS
))
-
1
),
chn
,
FPGA_SHIFT_BITS
));
System
.
out
.
println
(
String
.
format
(
"%4x // color %d ctile_left"
,
ctile_left
[
chn
],
chn
));
System
.
out
.
println
(
String
.
format
(
"%4x // color %d ctile_top"
,
ctile_top
[
chn
],
chn
));
}
System
.
out
.
println
(
"\n// Full Bayer fpga tile data"
);
int
id
=
(
1
<<
(
FPGA_PIXEL_BITS
-
9
));
// 8
for
(
int
i
=
0
;
i
<
FPGA_TILE_SIZE
*
FPGA_TILE_SIZE
;
i
++)
{
double
d
=
0.0
;
for
(
int
fpga_chn
=
0
;
fpga_chn
<
3
;
fpga_chn
++){
d
+=
fpga_full_tile
[
fpga_chn
][
i
];
}
System
.
out
.
print
(
String
.
format
(
"%4x "
,(
int
)
Math
.
round
(
id
*
d
)));
if
(((
i
+
1
)
%
FPGA_TILE_SIZE
)
==
0
)
{
System
.
out
.
println
();
}
}
System
.
out
.
println
();
for
(
int
chn
=
0
;
chn
<
3
;
chn
++)
{
double
[]
fpga_pix_lim
=
{
0.0
,
0.0
};
for
(
int
i
=
0
;
i
<
256
;
i
++)
if
(
fpga_tile
[
chn
][
i
]
!=
0
){
if
(
fpga_tile
[
chn
][
i
]
>
fpga_pix_lim
[
0
])
fpga_pix_lim
[
0
]
=
fpga_tile
[
chn
][
i
];
if
(
fpga_tile
[
chn
][
i
]
<
fpga_pix_lim
[
1
])
fpga_pix_lim
[
1
]
=
fpga_tile
[
chn
][
i
];
}
System
.
out
.
println
(
String
.
format
(
"\n// Color # %d: Pixels input range: %f ... %f"
,
chn
,
fpga_pix_lim
[
1
],
fpga_pix_lim
[
0
]));
System
.
out
.
println
(
String
.
format
(
"//%x // shift_x, %d bits"
,
ishx
[
chn
]
&
((
1
<<
(
FPGA_SHIFT_BITS
))
-
1
),
FPGA_SHIFT_BITS
));
System
.
out
.
println
(
String
.
format
(
"//%x // shift_y, %d bits"
,
ishy
[
chn
]
&
((
1
<<
(
FPGA_SHIFT_BITS
))
-
1
),
FPGA_SHIFT_BITS
));
for
(
int
row
=
0
;
row
<
16
;
row
++){
for
(
int
col
=
0
;
col
<
16
;
col
++){
System
.
out
.
print
(
String
.
format
(
"%4x "
,(
int
)
Math
.
round
(
id
*
fpga_tile
[
chn
][
row
*
16
+
col
])));
}
System
.
out
.
println
();
}
System
.
out
.
println
();
}
System
.
out
.
println
();
for
(
int
chn
=
0
;
chn
<
3
;
chn
++)
{
System
.
out
.
println
(
"// Color="
+
chn
+
", signs table (per mode, per index - bitstring of variants, 0 - positive, 1 - negative)"
);
for
(
int
dct_mode
=
0
;
dct_mode
<
4
;
dct_mode
++)
{
for
(
int
i
=
0
;
i
<
64
;
i
++){
int
d
=
0
;
for
(
int
b
=
0
;
b
<
4
;
b
++){
if
(
fold_coeff
[
chn
][
dct_mode
][
i
][
b
]
<
0
){
d
|=
(
1
<<
b
);
}
}
System
.
out
.
print
(
String
.
format
(
"%x "
,
d
));
if
((
i
%
16
)
==
15
){
System
.
out
.
println
();
}
}
}
System
.
out
.
println
();
}
System
.
out
.
println
();
for
(
int
chn
=
0
;
chn
<
3
;
chn
++)
{
System
.
out
.
println
(
"// Color = "
+
chn
+
", absolute values, mode0 (CC), others are the same"
);
// for (int dct_mode = 0; dct_mode <4; dct_mode++) {
int
dct_mode
=
0
;
for
(
int
i
=
0
;
i
<
64
;
i
++){
for
(
int
b
=
0
;
b
<
4
;
b
++){
int
d
=
(
int
)
Math
.
round
(((
1
<<
FPGA_WND_BITS
)
-
1
)*
Math
.
abs
(
fold_coeff
[
chn
][
dct_mode
][
i
][
b
]));
System
.
out
.
print
(
String
.
format
(
"%5x "
,
d
&
((
1
<<
(
FPGA_WND_BITS
))
-
1
)));
}
if
((
i
%
4
)
==
3
){
System
.
out
.
println
();
}
}
System
.
out
.
println
();
// }
}
System
.
out
.
println
();
for
(
int
chn
=
0
;
chn
<
3
;
chn
++)
{
double
[]
fpga_dtt_lim
=
{
0.0
,
0.0
};
for
(
int
dct_mode
=
0
;
dct_mode
<
4
;
dct_mode
++)
{
for
(
int
i
=
0
;
i
<
64
;
i
++){
if
(
fpga_clt_data_in
[
chn
][
dct_mode
][
i
]
>
fpga_dtt_lim
[
0
])
fpga_dtt_lim
[
0
]
=
fpga_clt_data_in
[
chn
][
dct_mode
][
i
];
if
(
fpga_clt_data_in
[
chn
][
dct_mode
][
i
]
<
fpga_dtt_lim
[
1
])
fpga_dtt_lim
[
1
]
=
fpga_clt_data_in
[
chn
][
dct_mode
][
i
];
}
}
System
.
out
.
println
(
String
.
format
(
"// Color= %d, DTT input range: %f ... %f"
,
chn
,
fpga_dtt_lim
[
1
],
fpga_dtt_lim
[
0
]));
double
scale
=
(
1
<<
(
FPGA_DTT_IN
-
9
));
// -1;
scale
*=
1.0
*((
1
<<
FPGA_WND_BITS
)
-
1
)
/
(
1
<<
FPGA_WND_BITS
);
scale
*=
1.0
*((
1
<<
FPGA_WND_BITS
)
-
1
)
/
(
1
<<
FPGA_WND_BITS
);
scale
*=
2
;
// Increased twice in FPGA adding twice each number in FPGA
System
.
out
.
println
(
"Color="
+
chn
+
" fpga_clt_data_out[chn][dct_mode] = dtt.dttt_iv(..., scale="
+
scale
);
// if (chn != GREEN_CHN) scale *= 2; // adding twice each number in FPGA for R and B - done before
for
(
int
dct_mode
=
0
;
dct_mode
<
4
;
dct_mode
++)
{
for
(
int
i
=
0
;
i
<
64
;
i
++){
int
idd
=
(
int
)
Math
.
round
(
scale
*
fpga_clt_data_in
[
chn
][
dct_mode
][
i
]);
System
.
out
.
print
(
String
.
format
(
"%7x "
,
idd
&
((
1
<<
25
)
-
1
)));
if
((
i
%
8
)
==
7
)
System
.
out
.
println
();
}
System
.
out
.
println
();
}
System
.
out
.
println
();
}
System
.
out
.
println
();
for
(
int
chn
=
0
;
chn
<
3
;
chn
++)
{
double
[]
fpga_dtt_lim
=
{
0.0
,
0.0
};
for
(
int
dct_mode
=
0
;
dct_mode
<
4
;
dct_mode
++)
{
for
(
int
i
=
0
;
i
<
64
;
i
++){
if
(
fpga_clt_data_out
[
chn
][
dct_mode
][
i
]
>
fpga_dtt_lim
[
0
])
fpga_dtt_lim
[
0
]
=
fpga_clt_data_out
[
chn
][
dct_mode
][
i
];
if
(
fpga_clt_data_out
[
chn
][
dct_mode
][
i
]
<
fpga_dtt_lim
[
1
])
fpga_dtt_lim
[
1
]
=
fpga_clt_data_out
[
chn
][
dct_mode
][
i
];
}
}
System
.
out
.
println
(
String
.
format
(
"// Color = %d: DTT output range: %f ... %f"
,
chn
,
fpga_dtt_lim
[
1
],
fpga_dtt_lim
[
0
]));
// scale = (1 << (FPGA_DTT_IN - 9)); // -1;
// double scale = (1 << (FPGA_DTT_IN - 8)); // increased twice
double
scale
=
(
1
<<
(
FPGA_DTT_IN
-
9
));
// Do not increase - lead to overflow !
scale
*=
1.0
*((
1
<<
FPGA_WND_BITS
)
-
1
)
/
(
1
<<
FPGA_WND_BITS
);
scale
*=
1.0
*((
1
<<
FPGA_WND_BITS
)
-
1
)
/
(
1
<<
FPGA_WND_BITS
);
for
(
int
dct_mode
=
0
;
dct_mode
<
4
;
dct_mode
++)
{
for
(
int
i
=
0
;
i
<
64
;
i
++){
int
idd
=
(
int
)
Math
.
round
(
scale
*
fpga_clt_data_out
[
chn
][
dct_mode
][
i
]);
System
.
out
.
print
(
String
.
format
(
"%7x "
,
idd
&
((
1
<<
25
)
-
1
)));
if
((
i
%
8
)
==
7
)
System
.
out
.
println
();
}
System
.
out
.
println
();
}
System
.
out
.
println
();
System
.
out
.
println
(
"// Color = "
+
chn
+
" Testing symmetry of checkerboard patterns"
);
for
(
int
dct_mode
=
0
;
dct_mode
<
2
;
dct_mode
++)
{
for
(
int
i
=
0
;
i
<
64
;
i
++){
if
((
i
%
8
)
==
0
)
System
.
out
.
print
(
"// "
);
int
idd
=
(
int
)
Math
.
round
(
scale
*
fpga_clt_data_out
[
chn
][
dct_mode
][
i
]);
int
idd1
=
(
int
)
Math
.
round
(
scale
*
fpga_clt_data_out
[
chn
][
3
-
dct_mode
][
63
-
i
]);
System
.
out
.
print
(
String
.
format
(
"%7x "
,
(
idd
-
idd1
)
&
((
1
<<
25
)
-
1
)));
if
((
i
%
8
)
==
7
)
System
.
out
.
println
();
}
System
.
out
.
println
();
}
System
.
out
.
println
();
System
.
out
.
println
(
"// Color = "
+
chn
+
" Testing antisymmetry of checkerboard patterns"
);
for
(
int
dct_mode
=
0
;
dct_mode
<
2
;
dct_mode
++)
{
for
(
int
i
=
0
;
i
<
64
;
i
++){
if
((
i
%
8
)
==
0
)
System
.
out
.
print
(
"// "
);
int
idd
=
(
int
)
Math
.
round
(
scale
*
fpga_clt_data_out
[
chn
][
dct_mode
][
i
]);
int
idd1
=
(
int
)
Math
.
round
(
scale
*
fpga_clt_data_out
[
chn
][
3
-
dct_mode
][
63
-
i
]);
System
.
out
.
print
(
String
.
format
(
"%7x "
,
(
idd
+
idd1
)
&
((
1
<<
25
)
-
1
)));
if
((
i
%
8
)
==
7
)
System
.
out
.
println
();
}
System
.
out
.
println
();
}
System
.
out
.
println
();
}
System
.
out
.
println
();
for
(
int
chn
=
0
;
chn
<
3
;
chn
++)
{
// double scale = (1 << (FPGA_DTT_IN - 9)); // -1;
// double scale = (1 << (FPGA_DTT_IN - 8)); //
double
scale
=
(
1
<<
(
FPGA_DTT_IN
-
9
));
// Do not increase - lead to overflow !
// compensate for DTT scale
scale
*=
1.0
*((
1
<<
FPGA_WND_BITS
)
-
1
)
/
(
1
<<
FPGA_WND_BITS
);
scale
*=
1.0
*((
1
<<
FPGA_WND_BITS
)
-
1
)
/
(
1
<<
FPGA_WND_BITS
);
// compensate for rotator scale:
scale
*=
1.0
*((
1
<<
FPGA_WND_BITS
)
-
1
)
/
(
1
<<
FPGA_WND_BITS
);
scale
*=
1.0
*((
1
<<
FPGA_WND_BITS
)
-
1
)
/
(
1
<<
FPGA_WND_BITS
);
double
[]
fpga_dtt_lim
=
{
0.0
,
0.0
};
for
(
int
dct_mode
=
0
;
dct_mode
<
4
;
dct_mode
++)
{
for
(
int
j
=
0
;
j
<
64
;
j
++){
if
(
fpga_clt_data_rot
[
chn
][
dct_mode
][
j
]
>
fpga_dtt_lim
[
0
])
fpga_dtt_lim
[
0
]
=
fpga_clt_data_rot
[
chn
][
dct_mode
][
j
];
if
(
fpga_clt_data_rot
[
chn
][
dct_mode
][
j
]
<
fpga_dtt_lim
[
1
])
fpga_dtt_lim
[
1
]
=
fpga_clt_data_rot
[
chn
][
dct_mode
][
j
];
}
}
System
.
out
.
println
(
String
.
format
(
"// Color = %d: DTT rotated, shift_x=%f. shift_y = %f"
,
chn
,
residual_shift
[
chn
][
0
],
residual_shift
[
chn
][
1
]));
System
.
out
.
println
(
String
.
format
(
"// DTT rotated range: %f ... %f"
,
fpga_dtt_lim
[
1
],
fpga_dtt_lim
[
0
]));
// scale = (1 << (FPGA_DTT_IN - 9)); // -1;
for
(
int
dct_mode
=
0
;
dct_mode
<
4
;
dct_mode
++)
{
for
(
int
j
=
0
;
j
<
64
;
j
++){
int
idd
=
(
int
)
Math
.
round
(
scale
*
fpga_clt_data_rot
[
chn
][
dct_mode
][
j
]);
System
.
out
.
print
(
String
.
format
(
"%7x "
,
idd
&
((
1
<<
25
)
-
1
)));
if
((
j
%
8
)
==
7
)
System
.
out
.
println
();
}
System
.
out
.
println
();
}
}
}
public
double
[][][][][][]
clt_aberrations_quad_corr
(
...
...
@@ -1194,6 +1537,7 @@ public class ImageDtt {
final
Matrix
[]
corr_rots
=
geometryCorrection
.
getCorrVector
().
getRotMatrices
();
// get array of per-sensor rotation matrices
for
(
int
ithread
=
0
;
ithread
<
threads
.
length
;
ithread
++)
{
threads
[
ithread
]
=
new
Thread
()
{
@Override
public
void
run
()
{
DttRad2
dtt
=
new
DttRad2
(
transform_size
);
dtt
.
set_window
(
window_type
);
...
...
@@ -1301,7 +1645,29 @@ public class ImageDtt {
}
}
}
// if (macro_mode) ... else
if
(
FPGA_COMPARE_DATA
&&
(
globalDebugLevel
>
0
)
&&
(
tileX
==
debug_tileX
)
&&
(
tileY
==
debug_tileY
))
{
final
int
fpga_cam
=
0
;
double
[][]
manual_offsets
={
// { 1.3, -2.7},
// {-1.3, 2.7},
// { 0.0, 0.0}};
{
2.3
,
-
2.7
},
{-
0.3
,
2.7
},
{
0.0
,
0.0
}};
double
[][]
colorCentersXY
=
{
{
centersXY
[
fpga_cam
][
0
]
+
manual_offsets
[
0
][
0
],
centersXY
[
fpga_cam
][
1
]
+
manual_offsets
[
0
][
1
]},
// add manual offsets here
{
centersXY
[
fpga_cam
][
0
]
+
manual_offsets
[
1
][
0
],
centersXY
[
fpga_cam
][
1
]
+
manual_offsets
[
1
][
1
]},
{
centersXY
[
fpga_cam
][
0
]
+
manual_offsets
[
2
][
0
],
centersXY
[
fpga_cam
][
1
]
+
manual_offsets
[
2
][
1
]}
};
generateFPGACompareData
(
image_data
[
fpga_cam
],
// final double [][] image_data, // for selected subcamera
colorCentersXY
,
// final double [][] colorCentersXY, // pixel centers per color (2 - green)
transform_size
,
// final int transform_size,
width
,
// final int width
dtt
);
}
for
(
int
chn
=
0
;
chn
<
numcol
;
chn
++)
{
boolean
debug_for_fpga
=
FPGA_COMPARE_DATA
&&
(
globalDebugLevel
>
0
)
&&
(
tileX
==
debug_tileX
)
&&
(
tileY
==
debug_tileY
)
&&
(
chn
==
2
);
...
...
@@ -1476,6 +1842,8 @@ public class ImageDtt {
}
}
// calculate overexposed fraction
if
(
saturation_imp
!=
null
)
{
disparity_map
[
OVEREXPOSED
][
nTile
]
=
(
1.0
*
overexp_all
[
0
])
/
overexp_all
[
1
];
...
...
@@ -2585,6 +2953,7 @@ public class ImageDtt {
}
for
(
int
ithread
=
0
;
ithread
<
threads
.
length
;
ithread
++)
{
threads
[
ithread
]
=
new
Thread
()
{
@Override
public
void
run
()
{
DttRad2
dtt
=
new
DttRad2
(
dct_size
);
dtt
.
set_window
(
window_type
);
...
...
@@ -2684,6 +3053,7 @@ public class ImageDtt {
ai
.
set
(
0
);
for
(
int
ithread
=
0
;
ithread
<
threads
.
length
;
ithread
++)
{
threads
[
ithread
]
=
new
Thread
()
{
@Override
public
void
run
()
{
DttRad2
dtt
=
new
DttRad2
(
dct_size
);
dtt
.
set_window
(
window_type
);
...
...
@@ -2799,6 +3169,7 @@ public class ImageDtt {
ai
.
set
(
0
);
for
(
int
ithread
=
0
;
ithread
<
threads
.
length
;
ithread
++)
{
threads
[
ithread
]
=
new
Thread
()
{
@Override
public
void
run
()
{
int
tileY
,
tileX
;
int
n2
=
transform_size
*
2
;
...
...
@@ -2931,6 +3302,7 @@ public class ImageDtt {
final
AtomicInteger
ai
=
new
AtomicInteger
(
0
);
for
(
int
ithread
=
0
;
ithread
<
threads
.
length
;
ithread
++)
{
threads
[
ithread
]
=
new
Thread
()
{
@Override
public
void
run
()
{
int
tileY
,
tileX
;
for
(
int
nTile
=
ai
.
getAndIncrement
();
nTile
<
nTiles
;
nTile
=
ai
.
getAndIncrement
())
{
...
...
@@ -3006,6 +3378,7 @@ public class ImageDtt {
final
AtomicInteger
ai
=
new
AtomicInteger
(
0
);
for
(
int
ithread
=
0
;
ithread
<
threads
.
length
;
ithread
++)
{
threads
[
ithread
]
=
new
Thread
()
{
@Override
public
void
run
()
{
int
tileY
,
tileX
;
for
(
int
nTile
=
ai
.
getAndIncrement
();
nTile
<
nTiles
;
nTile
=
ai
.
getAndIncrement
())
{
...
...
@@ -3125,6 +3498,7 @@ public class ImageDtt {
for
(
int
ithread
=
0
;
ithread
<
threads
.
length
;
ithread
++)
{
threads
[
ithread
]
=
new
Thread
()
{
@Override
public
void
run
()
{
int
tileY
,
tileX
;
for
(
int
nTile
=
ai
.
getAndIncrement
();
nTile
<
nTiles
;
nTile
=
ai
.
getAndIncrement
())
{
...
...
@@ -3159,6 +3533,7 @@ public class ImageDtt {
for
(
int
ithread
=
0
;
ithread
<
threads
.
length
;
ithread
++)
{
threads
[
ithread
]
=
new
Thread
()
{
@Override
public
void
run
()
{
DttRad2
dtt
=
new
DttRad2
(
dct_size
);
int
tileY
,
tileX
;
...
...
@@ -3194,6 +3569,7 @@ public class ImageDtt {
for
(
int
ithread
=
0
;
ithread
<
threads
.
length
;
ithread
++)
{
threads
[
ithread
]
=
new
Thread
()
{
@Override
public
void
run
()
{
int
tileY
,
tileX
;
double
scale
=
0.25
;
...
...
@@ -3315,6 +3691,7 @@ public class ImageDtt {
for
(
int
ithread
=
0
;
ithread
<
threads
.
length
;
ithread
++)
{
threads
[
ithread
]
=
new
Thread
()
{
@Override
public
void
run
()
{
int
tileY
,
tileX
;
for
(
int
nTile
=
ai
.
getAndIncrement
();
nTile
<
nTiles
;
nTile
=
ai
.
getAndIncrement
())
{
...
...
@@ -3372,6 +3749,7 @@ public class ImageDtt {
for
(
int
ithread
=
0
;
ithread
<
threads
.
length
;
ithread
++)
{
threads
[
ithread
]
=
new
Thread
()
{
@Override
public
void
run
()
{
int
tileY
,
tileX
;
for
(
int
nTile
=
ai
.
getAndIncrement
();
nTile
<
nTiles
;
nTile
=
ai
.
getAndIncrement
())
{
...
...
@@ -3472,6 +3850,7 @@ public class ImageDtt {
for
(
int
ithread
=
0
;
ithread
<
threads
.
length
;
ithread
++)
{
threads
[
ithread
]
=
new
Thread
()
{
@Override
public
void
run
()
{
int
tileY
,
tileX
;
for
(
int
nTile
=
ai
.
getAndIncrement
();
nTile
<
nTiles
;
nTile
=
ai
.
getAndIncrement
())
{
...
...
@@ -3661,6 +4040,7 @@ public class ImageDtt {
final
AtomicInteger
ai
=
new
AtomicInteger
(
0
);
for
(
int
ithread
=
0
;
ithread
<
threads
.
length
;
ithread
++)
{
threads
[
ithread
]
=
new
Thread
()
{
@Override
public
void
run
()
{
int
tileY
,
tileX
,
chn
;
for
(
int
nTile
=
ai
.
getAndIncrement
();
nTile
<
nTiles
;
nTile
=
ai
.
getAndIncrement
())
{
...
...
@@ -4091,11 +4471,7 @@ public class ImageDtt {
}
}
System
.
out
.
println
(
String
.
format
(
"// DTT input range: %f ... %f"
,
fpga_dtt_lim
[
1
],
fpga_dtt_lim
[
0
]));
// double scale = (1 << (FPGA_DTT_IN - 10)) -1;
/// double scale = (1 << (FPGA_DTT_IN - 8)) -1;
double
scale
=
(
1
<<
(
FPGA_DTT_IN
-
9
));
// -1;
/// scale /= 1.0 *((1 << FPGA_WND_BITS) -1) / (1 << FPGA_WND_BITS);
/// scale /= 1.0 *((1 << FPGA_WND_BITS) -1) / (1 << FPGA_WND_BITS);
scale
*=
1.0
*((
1
<<
FPGA_WND_BITS
)
-
1
)
/
(
1
<<
FPGA_WND_BITS
);
scale
*=
1.0
*((
1
<<
FPGA_WND_BITS
)
-
1
)
/
(
1
<<
FPGA_WND_BITS
);
for
(
int
dct_mode
=
0
;
dct_mode
<
4
;
dct_mode
++)
{
...
...
@@ -4109,6 +4485,7 @@ public class ImageDtt {
System
.
out
.
println
();
for
(
int
dct_mode
=
0
;
dct_mode
<
4
;
dct_mode
++)
{
System
.
out
.
println
(
"Color= 2? clt_tile[dct_mode] = dtt.dttt_iv(..., scale="
+
scale
);
clt_tile
[
dct_mode
]
=
dtt
.
dttt_iv
(
clt_tile
[
dct_mode
],
dct_mode
,
transform_size
,
scale
,
((
1
<<
25
)
-
1
));
// debug level
}
fpga_dtt_lim
[
0
]
=
0.0
;
...
...
@@ -4390,6 +4767,7 @@ public class ImageDtt {
for
(
int
ithread
=
0
;
ithread
<
threads
.
length
;
ithread
++)
{
threads
[
ithread
]
=
new
Thread
()
{
@Override
public
void
run
()
{
DttRad2
dtt
=
new
DttRad2
(
dct_size
);
dtt
.
set_window
(
window_type
);
...
...
@@ -4457,6 +4835,7 @@ public class ImageDtt {
for
(
int
ithread
=
0
;
ithread
<
threads
.
length
;
ithread
++)
{
threads
[
ithread
]
=
new
Thread
()
{
@Override
public
void
run
()
{
int
tileY
,
tileX
;
double
[]
dct1
=
new
double
[
dct_size
*
dct_size
];
...
...
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