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
4ec177ed
Commit
4ec177ed
authored
Jan 14, 2017
by
Andrey Filippov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
added denoise, debugging window influence
parent
271830ae
Changes
3
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
372 additions
and
188 deletions
+372
-188
EyesisCorrectionParameters.java
src/main/java/EyesisCorrectionParameters.java
+42
-4
EyesisDCT.java
src/main/java/EyesisDCT.java
+310
-181
ImageDtt.java
src/main/java/ImageDtt.java
+20
-3
No files found.
src/main/java/EyesisCorrectionParameters.java
View file @
4ec177ed
...
@@ -1809,11 +1809,17 @@ public class EyesisCorrectionParameters {
...
@@ -1809,11 +1809,17 @@ public class EyesisCorrectionParameters {
public
double
sigma_y
=
0.7
;
// blur for G contribution to Y
public
double
sigma_y
=
0.7
;
// blur for G contribution to Y
public
double
sigma_color
=
0.7
;
// blur for Pb and Pr in addition to that of Y
public
double
sigma_color
=
0.7
;
// blur for Pb and Pr in addition to that of Y
public
double
line_thershold
=
1.0
;
// line detection amplitude to apply line enhancement - not used?
public
double
line_thershold
=
1.0
;
// line detection amplitude to apply line enhancement - not used?
public
boolean
nonlin
=
true
;
// enable nonlinear processing (including denoise
public
double
nonlin_max_y
=
1.0
;
// maximal amount of nonlinear line/edge emphasis for Y component
public
double
nonlin_max_y
=
1.0
;
// maximal amount of nonlinear line/edge emphasis for Y component
public
double
nonlin_max_c
=
1.0
;
// maximal amount of nonlinear line/edge emphasis for C component
public
double
nonlin_max_c
=
1.0
;
// maximal amount of nonlinear line/edge emphasis for C component
public
double
nonlin_y
=
0.1
;
// amount of nonlinear line/edge emphasis for Y component
public
double
nonlin_y
=
0.1
;
// amount of nonlinear line/edge emphasis for Y component
public
double
nonlin_c
=
0.01
;
// amount of nonlinear line/edge emphasis for C component
public
double
nonlin_c
=
0.01
;
// amount of nonlinear line/edge emphasis for C component
public
double
nonlin_corn
=
0.5
;
// relative weight for nonlinear corner elements
public
double
nonlin_corn
=
0.5
;
// relative weight for nonlinear corner elements
public
boolean
denoise
=
true
;
// suppress noise during nonlinear processing
public
double
denoise_y
=
1.0
;
// maximal total smoothing of the Y post-kernel (will compete with edge emphasis)
public
double
denoise_c
=
1.0
;
// maximal total smoothing of the color differences post-kernel (will compete with edge emphasis)
public
double
denoise_y_corn
=
0.3
;
// weight of the 4 corner pixels during denoise y (straight - 1-denoise_y_corn)
public
double
denoise_c_corn
=
0.3
;
// weight of the 4 corner pixels during denoise y (straight - 1-denoise_c_corn)
public
DCTParameters
(){}
public
DCTParameters
(){}
...
@@ -1877,11 +1883,21 @@ public class EyesisCorrectionParameters {
...
@@ -1877,11 +1883,21 @@ public class EyesisCorrectionParameters {
properties
.
setProperty
(
prefix
+
"sigma_color"
,
this
.
sigma_color
+
""
);
properties
.
setProperty
(
prefix
+
"sigma_color"
,
this
.
sigma_color
+
""
);
properties
.
setProperty
(
prefix
+
"line_thershold"
,
this
.
line_thershold
+
""
);
properties
.
setProperty
(
prefix
+
"line_thershold"
,
this
.
line_thershold
+
""
);
properties
.
setProperty
(
prefix
+
"nonlin_max_y"
,
this
.
nonlin_max_y
+
""
);
properties
.
setProperty
(
prefix
+
"nonlin"
,
this
.
nonlin
+
""
);
properties
.
setProperty
(
prefix
+
"nonlin_max_c"
,
this
.
nonlin_max_c
+
""
);
properties
.
setProperty
(
prefix
+
"nonlin_max_y"
,
this
.
nonlin_max_y
+
""
);
properties
.
setProperty
(
prefix
+
"nonlin_max_c"
,
this
.
nonlin_max_c
+
""
);
properties
.
setProperty
(
prefix
+
"nonlin_y"
,
this
.
nonlin_y
+
""
);
properties
.
setProperty
(
prefix
+
"nonlin_y"
,
this
.
nonlin_y
+
""
);
properties
.
setProperty
(
prefix
+
"nonlin_c"
,
this
.
nonlin_c
+
""
);
properties
.
setProperty
(
prefix
+
"nonlin_c"
,
this
.
nonlin_c
+
""
);
properties
.
setProperty
(
prefix
+
"nonlin_corn"
,
this
.
nonlin_corn
+
""
);
properties
.
setProperty
(
prefix
+
"nonlin_corn"
,
this
.
nonlin_corn
+
""
);
properties
.
setProperty
(
prefix
+
"denoise"
,
this
.
denoise
+
""
);
properties
.
setProperty
(
prefix
+
"denoise_y"
,
this
.
denoise_y
+
""
);
properties
.
setProperty
(
prefix
+
"denoise_c"
,
this
.
denoise_c
+
""
);
properties
.
setProperty
(
prefix
+
"denoise_y_corn"
,
this
.
denoise_y_corn
+
""
);
properties
.
setProperty
(
prefix
+
"denoise_c_corn"
,
this
.
denoise_c_corn
+
""
);
}
}
public
void
getProperties
(
String
prefix
,
Properties
properties
){
public
void
getProperties
(
String
prefix
,
Properties
properties
){
if
(
properties
.
getProperty
(
prefix
+
"dct_size"
)!=
null
)
this
.
dct_size
=
Integer
.
parseInt
(
properties
.
getProperty
(
prefix
+
"dct_size"
));
if
(
properties
.
getProperty
(
prefix
+
"dct_size"
)!=
null
)
this
.
dct_size
=
Integer
.
parseInt
(
properties
.
getProperty
(
prefix
+
"dct_size"
));
...
@@ -1924,11 +1940,19 @@ public class EyesisCorrectionParameters {
...
@@ -1924,11 +1940,19 @@ public class EyesisCorrectionParameters {
if
(
properties
.
getProperty
(
prefix
+
"sigma_color"
)!=
null
)
this
.
sigma_color
=
Double
.
parseDouble
(
properties
.
getProperty
(
prefix
+
"sigma_color"
));
if
(
properties
.
getProperty
(
prefix
+
"sigma_color"
)!=
null
)
this
.
sigma_color
=
Double
.
parseDouble
(
properties
.
getProperty
(
prefix
+
"sigma_color"
));
if
(
properties
.
getProperty
(
prefix
+
"line_thershold"
)!=
null
)
this
.
line_thershold
=
Double
.
parseDouble
(
properties
.
getProperty
(
prefix
+
"line_thershold"
));
if
(
properties
.
getProperty
(
prefix
+
"line_thershold"
)!=
null
)
this
.
line_thershold
=
Double
.
parseDouble
(
properties
.
getProperty
(
prefix
+
"line_thershold"
));
if
(
properties
.
getProperty
(
prefix
+
"nonlin_max_y"
)!=
null
)
this
.
nonlin_max_y
=
Double
.
parseDouble
(
properties
.
getProperty
(
prefix
+
"nonlin_max_y"
));
if
(
properties
.
getProperty
(
prefix
+
"nonlin"
)!=
null
)
this
.
nonlin
=
Boolean
.
parseBoolean
(
properties
.
getProperty
(
prefix
+
"nonlin"
));
if
(
properties
.
getProperty
(
prefix
+
"nonlin_max_c"
)!=
null
)
this
.
nonlin_max_c
=
Double
.
parseDouble
(
properties
.
getProperty
(
prefix
+
"nonlin_max_c"
));
if
(
properties
.
getProperty
(
prefix
+
"nonlin_max_y"
)!=
null
)
this
.
nonlin_max_y
=
Double
.
parseDouble
(
properties
.
getProperty
(
prefix
+
"nonlin_max_y"
));
if
(
properties
.
getProperty
(
prefix
+
"nonlin_max_c"
)!=
null
)
this
.
nonlin_max_c
=
Double
.
parseDouble
(
properties
.
getProperty
(
prefix
+
"nonlin_max_c"
));
if
(
properties
.
getProperty
(
prefix
+
"nonlin_y"
)!=
null
)
this
.
nonlin_y
=
Double
.
parseDouble
(
properties
.
getProperty
(
prefix
+
"nonlin_y"
));
if
(
properties
.
getProperty
(
prefix
+
"nonlin_y"
)!=
null
)
this
.
nonlin_y
=
Double
.
parseDouble
(
properties
.
getProperty
(
prefix
+
"nonlin_y"
));
if
(
properties
.
getProperty
(
prefix
+
"nonlin_c"
)!=
null
)
this
.
nonlin_c
=
Double
.
parseDouble
(
properties
.
getProperty
(
prefix
+
"nonlin_c"
));
if
(
properties
.
getProperty
(
prefix
+
"nonlin_c"
)!=
null
)
this
.
nonlin_c
=
Double
.
parseDouble
(
properties
.
getProperty
(
prefix
+
"nonlin_c"
));
if
(
properties
.
getProperty
(
prefix
+
"nonlin_corn"
)!=
null
)
this
.
nonlin_corn
=
Double
.
parseDouble
(
properties
.
getProperty
(
prefix
+
"nonlin_corn"
));
if
(
properties
.
getProperty
(
prefix
+
"nonlin_corn"
)!=
null
)
this
.
nonlin_corn
=
Double
.
parseDouble
(
properties
.
getProperty
(
prefix
+
"nonlin_corn"
));
if
(
properties
.
getProperty
(
prefix
+
"denoise"
)!=
null
)
this
.
denoise
=
Boolean
.
parseBoolean
(
properties
.
getProperty
(
prefix
+
"denoise"
));
if
(
properties
.
getProperty
(
prefix
+
"denoise_y"
)!=
null
)
this
.
denoise_y
=
Double
.
parseDouble
(
properties
.
getProperty
(
prefix
+
"denoise_y"
));
if
(
properties
.
getProperty
(
prefix
+
"denoise_c"
)!=
null
)
this
.
denoise_c
=
Double
.
parseDouble
(
properties
.
getProperty
(
prefix
+
"denoise_c"
));
if
(
properties
.
getProperty
(
prefix
+
"denoise_y_corn"
)!=
null
)
this
.
denoise_y_corn
=
Double
.
parseDouble
(
properties
.
getProperty
(
prefix
+
"denoise_y_corn"
));
if
(
properties
.
getProperty
(
prefix
+
"denoise_c_corn"
)!=
null
)
this
.
denoise_c_corn
=
Double
.
parseDouble
(
properties
.
getProperty
(
prefix
+
"denoise_c_corn"
));
}
}
public
boolean
showDialog
()
{
public
boolean
showDialog
()
{
GenericDialog
gd
=
new
GenericDialog
(
"Set DCT parameters"
);
GenericDialog
gd
=
new
GenericDialog
(
"Set DCT parameters"
);
...
@@ -1972,11 +1996,17 @@ public class EyesisCorrectionParameters {
...
@@ -1972,11 +1996,17 @@ public class EyesisCorrectionParameters {
gd
.
addNumericField
(
"Gaussian sigma to apply to Pr and Pb in the MDCT domain, pix"
,
this
.
sigma_color
,
3
);
gd
.
addNumericField
(
"Gaussian sigma to apply to Pr and Pb in the MDCT domain, pix"
,
this
.
sigma_color
,
3
);
gd
.
addNumericField
(
"Threshold for line detection (not yet used)"
,
this
.
line_thershold
,
3
);
gd
.
addNumericField
(
"Threshold for line detection (not yet used)"
,
this
.
line_thershold
,
3
);
gd
.
addCheckbox
(
"Use non-linear line emphasis and denoise"
,
this
.
nonlin
);
gd
.
addNumericField
(
"Maximal amount of non-linear emphasis for linear edges for Y component"
,
this
.
nonlin_max_y
,
3
);
gd
.
addNumericField
(
"Maximal amount of non-linear emphasis for linear edges for Y component"
,
this
.
nonlin_max_y
,
3
);
gd
.
addNumericField
(
"Maximal amount of non-linear emphasis for linear edges for color diffs."
,
this
.
nonlin_max_c
,
3
);
gd
.
addNumericField
(
"Maximal amount of non-linear emphasis for linear edges for color diffs."
,
this
.
nonlin_max_c
,
3
);
gd
.
addNumericField
(
"Sensitivity of non-linear emphasis for linear edges for Y component"
,
this
.
nonlin_y
,
3
);
gd
.
addNumericField
(
"Sensitivity of non-linear emphasis for linear edges for Y component"
,
this
.
nonlin_y
,
3
);
gd
.
addNumericField
(
"Sensitivity of non-linear emphasis for linear edges for color diffs."
,
this
.
nonlin_c
,
3
);
gd
.
addNumericField
(
"Sensitivity of non-linear emphasis for linear edges for color diffs."
,
this
.
nonlin_c
,
3
);
gd
.
addNumericField
(
"Corretion for diagonal/corner emphasis elements"
,
this
.
nonlin_corn
,
3
);
gd
.
addNumericField
(
"Corretion for diagonal/corner emphasis elements"
,
this
.
nonlin_corn
,
3
);
gd
.
addCheckbox
(
"Suppress noise during nonlinear processing"
,
this
.
denoise
);
gd
.
addNumericField
(
"Maximal total smoothing of the Y post-kernel (will compete with edge emphasis)"
,
this
.
denoise_y
,
3
);
gd
.
addNumericField
(
"Maximal total smoothing of the color differences post-kernel (will compete with edge emphasis)"
,
this
.
denoise_c
,
3
);
gd
.
addNumericField
(
"Weight of the 4 corner pixels during denoising y (straight - 1.0-denoise_y_corn)"
,
this
.
denoise_y_corn
,
3
);
gd
.
addNumericField
(
"Weight of the 4 corner pixels during denoising color ((straight - 1.0-denoise_c_corn))"
,
this
.
denoise_c_corn
,
3
);
WindowTools
.
addScrollBars
(
gd
);
WindowTools
.
addScrollBars
(
gd
);
gd
.
showDialog
();
gd
.
showDialog
();
...
@@ -2022,11 +2052,19 @@ public class EyesisCorrectionParameters {
...
@@ -2022,11 +2052,19 @@ public class EyesisCorrectionParameters {
this
.
sigma_color
=
gd
.
getNextNumber
();
this
.
sigma_color
=
gd
.
getNextNumber
();
this
.
line_thershold
=
gd
.
getNextNumber
();
this
.
line_thershold
=
gd
.
getNextNumber
();
this
.
nonlin
=
gd
.
getNextBoolean
();
this
.
nonlin_max_y
=
gd
.
getNextNumber
();
this
.
nonlin_max_y
=
gd
.
getNextNumber
();
this
.
nonlin_max_c
=
gd
.
getNextNumber
();
this
.
nonlin_max_c
=
gd
.
getNextNumber
();
this
.
nonlin_y
=
gd
.
getNextNumber
();
this
.
nonlin_y
=
gd
.
getNextNumber
();
this
.
nonlin_c
=
gd
.
getNextNumber
();
this
.
nonlin_c
=
gd
.
getNextNumber
();
this
.
nonlin_corn
=
gd
.
getNextNumber
();
this
.
nonlin_corn
=
gd
.
getNextNumber
();
this
.
denoise
=
gd
.
getNextBoolean
();
this
.
denoise_y
=
gd
.
getNextNumber
();
this
.
denoise_c
=
gd
.
getNextNumber
();
this
.
denoise_y_corn
=
gd
.
getNextNumber
();
this
.
denoise_c_corn
=
gd
.
getNextNumber
();
// MASTER_DEBUG_LEVEL= (int) gd.getNextNumber();
// MASTER_DEBUG_LEVEL= (int) gd.getNextNumber();
return
true
;
return
true
;
}
}
...
...
src/main/java/EyesisDCT.java
View file @
4ec177ed
This diff is collapsed.
Click to expand it.
src/main/java/ImageDtt.java
View file @
4ec177ed
...
@@ -583,6 +583,21 @@ public class ImageDtt {
...
@@ -583,6 +583,21 @@ public class ImageDtt {
}
}
}
}
}
}
// normalize
double
sum
=
0
;
for
(
int
i
=
0
;
i
<
dct_size
;
i
++){
for
(
int
j
=
0
;
j
<
dct_size
;
j
++){
double
d
=
filter_direct
[
i
*
dct_size
+
j
];
d
*=
Math
.
cos
(
Math
.
PI
*
i
/(
2
*
dct_size
))*
Math
.
cos
(
Math
.
PI
*
j
/(
2
*
dct_size
));
if
(
i
>
0
)
d
*=
2.0
;
if
(
j
>
0
)
d
*=
2.0
;
sum
+=
d
;
}
}
for
(
int
i
=
0
;
i
<
filter_direct
.
length
;
i
++){
filter_direct
[
i
]
/=
sum
;
}
if
(
globalDebugLevel
>
-
1
)
{
if
(
globalDebugLevel
>
-
1
)
{
for
(
int
i
=
0
;
i
<
filter_direct
.
length
;
i
++){
for
(
int
i
=
0
;
i
<
filter_direct
.
length
;
i
++){
System
.
out
.
println
(
"dct_lpf_psf() "
+
i
+
": "
+
filter_direct
[
i
]);
System
.
out
.
println
(
"dct_lpf_psf() "
+
i
+
": "
+
filter_direct
[
i
]);
...
@@ -591,6 +606,8 @@ public class ImageDtt {
...
@@ -591,6 +606,8 @@ public class ImageDtt {
DttRad2
dtt
=
new
DttRad2
(
dct_size
);
DttRad2
dtt
=
new
DttRad2
(
dct_size
);
// final double [] filter= dtt.dttt_iii(filter_direct);
// final double [] filter= dtt.dttt_iii(filter_direct);
final
double
[]
filter
=
dtt
.
dttt_iiie
(
filter_direct
);
final
double
[]
filter
=
dtt
.
dttt_iiie
(
filter_direct
);
final
double
[]
dbg_filter
=
dtt
.
dttt_ii
(
filter
);
for
(
int
i
=
0
;
i
<
filter
.
length
;
i
++)
filter
[
i
]
*=
dct_size
;
for
(
int
i
=
0
;
i
<
filter
.
length
;
i
++)
filter
[
i
]
*=
dct_size
;
if
(
globalDebugLevel
>
-
1
)
{
if
(
globalDebugLevel
>
-
1
)
{
...
@@ -598,7 +615,7 @@ public class ImageDtt {
...
@@ -598,7 +615,7 @@ public class ImageDtt {
System
.
out
.
println
(
"dct_lpf_psf() "
+
i
+
": "
+
filter
[
i
]);
System
.
out
.
println
(
"dct_lpf_psf() "
+
i
+
": "
+
filter
[
i
]);
}
}
showDoubleFloatArrays
sdfa_instance
=
new
showDoubleFloatArrays
();
// just for debugging?
showDoubleFloatArrays
sdfa_instance
=
new
showDoubleFloatArrays
();
// just for debugging?
double
[][]
ff
=
{
filter_direct
,
filter
};
double
[][]
ff
=
{
filter_direct
,
filter
,
dbg_filter
};
sdfa_instance
.
showArrays
(
ff
,
dct_size
,
dct_size
,
true
,
"filter_lpf"
);
sdfa_instance
.
showArrays
(
ff
,
dct_size
,
dct_size
,
true
,
"filter_lpf"
);
}
}
...
@@ -671,7 +688,7 @@ public class ImageDtt {
...
@@ -671,7 +688,7 @@ public class ImageDtt {
for
(
int
j
=
0
;
j
<
dct_len
;
j
++)
filters_proto
[
i
][
j
]
*=
2
*
dct_size
;
for
(
int
j
=
0
;
j
<
dct_len
;
j
++)
filters_proto
[
i
][
j
]
*=
2
*
dct_size
;
}
}
if
(
globalDebugLevel
>
-
1
)
{
if
(
globalDebugLevel
>
0
)
{
showDoubleFloatArrays
sdfa_instance
=
new
showDoubleFloatArrays
();
// just for debugging?
showDoubleFloatArrays
sdfa_instance
=
new
showDoubleFloatArrays
();
// just for debugging?
double
[][]
ff
=
{
filters_proto_direct
[
0
],
filters_proto_direct
[
1
],
filters_proto_direct
[
2
],
filters_proto
[
0
],
filters_proto
[
1
],
filters_proto
[
2
]};
double
[][]
ff
=
{
filters_proto_direct
[
0
],
filters_proto_direct
[
1
],
filters_proto_direct
[
2
],
filters_proto
[
0
],
filters_proto
[
1
],
filters_proto
[
2
]};
sdfa_instance
.
showArrays
(
ff
,
dct_size
,
dct_size
,
true
,
"filters_proto"
);
sdfa_instance
.
showArrays
(
ff
,
dct_size
,
dct_size
,
true
,
"filters_proto"
);
...
@@ -695,7 +712,7 @@ public class ImageDtt {
...
@@ -695,7 +712,7 @@ public class ImageDtt {
}
}
}
}
}
}
if
(
globalDebugLevel
>
-
1
)
{
if
(
globalDebugLevel
>
0
)
{
showDoubleFloatArrays
sdfa_instance
=
new
showDoubleFloatArrays
();
// just for debugging?
showDoubleFloatArrays
sdfa_instance
=
new
showDoubleFloatArrays
();
// just for debugging?
double
[][]
ff
=
{
double
[][]
ff
=
{
filters
[
0
][
0
],
filters
[
0
][
1
],
filters
[
0
][
2
],
filters
[
0
][
0
],
filters
[
0
][
1
],
filters
[
0
][
2
],
...
...
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