Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
bob.ip.qualitymeasure
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
bob
bob.ip.qualitymeasure
Commits
bf366952
Commit
bf366952
authored
Jul 13, 2017
by
David GEISSBUHLER
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added bool flags and clean redudant code
parent
c75fa7fd
Changes
3
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
54 additions
and
480 deletions
+54
-480
bob/ip/qualitymeasure/__tan_specular_highlights.cpp
bob/ip/qualitymeasure/__tan_specular_highlights.cpp
+0
-458
bob/ip/qualitymeasure/main.cpp
bob/ip/qualitymeasure/main.cpp
+5
-2
bob/ip/qualitymeasure/tan_specular_highlights.cpp
bob/ip/qualitymeasure/tan_specular_highlights.cpp
+49
-20
No files found.
bob/ip/qualitymeasure/__tan_specular_highlights.cpp
deleted
100644 → 0
View file @
c75fa7fd
This diff is collapsed.
Click to expand it.
bob/ip/qualitymeasure/main.cpp
View file @
bf366952
...
@@ -14,7 +14,9 @@ void remove_highlights( blitz::Array<float ,3> &img,
...
@@ -14,7 +14,9 @@ void remove_highlights( blitz::Array<float ,3> &img,
blitz
::
Array
<
float
,
3
>
&
diff
,
blitz
::
Array
<
float
,
3
>
&
diff
,
blitz
::
Array
<
float
,
3
>
&
sfi
,
blitz
::
Array
<
float
,
3
>
&
sfi
,
blitz
::
Array
<
float
,
3
>
&
residue
,
blitz
::
Array
<
float
,
3
>
&
residue
,
float
epsilon
);
float
epsilon
,
bool
skip_diffuse
,
bool
check_nan_inf
);
// declare the function
// declare the function
static
PyObject
*
PyRemoveHighlights
(
PyObject
*
,
PyObject
*
args
,
PyObject
*
kwargs
)
{
static
PyObject
*
PyRemoveHighlights
(
PyObject
*
,
PyObject
*
args
,
PyObject
*
kwargs
)
{
...
@@ -54,7 +56,8 @@ static PyObject* PyRemoveHighlights(PyObject*, PyObject* args, PyObject* kwargs)
...
@@ -54,7 +56,8 @@ static PyObject* PyRemoveHighlights(PyObject*, PyObject* args, PyObject* kwargs)
speckle_img
=
0
;
speckle_img
=
0
;
// call the C++ function
// call the C++ function
remove_highlights
(
img
,
diffuse_img
,
speckle_free_img
,
speckle_img
,
(
float
)
epsilon
);
remove_highlights
(
img
,
diffuse_img
,
speckle_free_img
,
speckle_img
,
(
float
)
epsilon
,
false
,
false
);
// convert the blitz array back to numpy and return it
// convert the blitz array back to numpy and return it
PyObject
*
ret_tuple
=
PyTuple_New
(
3
);
PyObject
*
ret_tuple
=
PyTuple_New
(
3
);
...
...
bob/ip/qualitymeasure/tan_specular_highlights.cpp
View file @
bf366952
/**
/**
* @author David Geissbuhler <
andre.anjos
@idiap.ch>
* @author David Geissbuhler <
david.geissbuhler
@idiap.ch>
* @date Tue 27 Jun 15:54:00 2016
* @date Tue 27 Jun 15:54:00 2016
*
*
* Original version of the specular highlights removal code by Robby T. Tan
* Original version of the specular highlights removal code by Robby T. Tan
...
@@ -14,6 +14,10 @@
...
@@ -14,6 +14,10 @@
* http://tanrobby.github.io/code.html#
* http://tanrobby.github.io/code.html#
* http://tanrobby.github.io/code/highlight.zip
* http://tanrobby.github.io/code/highlight.zip
*
*
* It also implements a modification used in the previous python version that
* ignores pixels marked G_DIFFUSE, leading to a smaller number of
* iterations per epsilon value, and a flag that ensure no nan and inf values
* are produced.
*/
*/
#include <blitz/array.h>
#include <blitz/array.h>
...
@@ -22,22 +26,27 @@
...
@@ -22,22 +26,27 @@
#define SPECULARY 11
#define SPECULARY 11
#define DIFFUSE 12
#define DIFFUSE 12
#define BOUNDARY 13
#define BOUNDARY 13
#define NOISE
14
#define NOISE
14
#define CAMERA_DARK
15
#define CAMERA_DARK
15
void
specular_free_image
(
blitz
::
Array
<
float
,
3
>
&
src
,
void
specular_free_image
(
blitz
::
Array
<
float
,
3
>
&
src
,
blitz
::
Array
<
int
,
2
>
&
src_i
,
blitz
::
Array
<
int
,
2
>
&
src_i
,
blitz
::
Array
<
float
,
3
>
&
sfi
);
blitz
::
Array
<
float
,
3
>
&
sfi
,
bool
check_nan_inf
);
void
iteration
(
blitz
::
Array
<
float
,
3
>
&
src
,
void
iteration
(
blitz
::
Array
<
float
,
3
>
&
src
,
blitz
::
Array
<
int
,
2
>
&
src_i
,
blitz
::
Array
<
int
,
2
>
&
src_i
,
blitz
::
Array
<
float
,
3
>
&
sfi
,
blitz
::
Array
<
float
,
3
>
&
sfi
,
float
epsilon
);
float
epsilon
,
bool
skip_diffuse
,
bool
check_nan_inf
);
int
init
(
blitz
::
Array
<
float
,
3
>
&
src
,
int
init
(
blitz
::
Array
<
float
,
3
>
&
src
,
blitz
::
Array
<
int
,
2
>
&
src_i
,
blitz
::
Array
<
int
,
2
>
&
src_i
,
blitz
::
Array
<
float
,
3
>
&
sfi
,
blitz
::
Array
<
float
,
3
>
&
sfi
,
float
epsilon
);
float
epsilon
,
bool
skip_diffuse
,
bool
check_nan_inf
);
int
reset_labels
(
blitz
::
Array
<
int
,
2
>
&
src_i
);
int
reset_labels
(
blitz
::
Array
<
int
,
2
>
&
src_i
);
...
@@ -46,7 +55,9 @@ void remove_highlights( blitz::Array<float ,3> &img,
...
@@ -46,7 +55,9 @@ void remove_highlights( blitz::Array<float ,3> &img,
blitz
::
Array
<
float
,
3
>
&
diff
,
blitz
::
Array
<
float
,
3
>
&
diff
,
blitz
::
Array
<
float
,
3
>
&
sfi
,
blitz
::
Array
<
float
,
3
>
&
sfi
,
blitz
::
Array
<
float
,
3
>
&
residue
,
blitz
::
Array
<
float
,
3
>
&
residue
,
float
epsilon
)
float
epsilon
,
bool
skip_diffuse
,
bool
check_nan_inf
)
{
{
// flags
// flags
int
dim_x
=
img
.
shape
()[
2
];
int
dim_x
=
img
.
shape
()[
2
];
...
@@ -56,7 +67,7 @@ void remove_highlights( blitz::Array<float ,3> &img,
...
@@ -56,7 +67,7 @@ void remove_highlights( blitz::Array<float ,3> &img,
//SPECULAR-FREE IMAGE
//SPECULAR-FREE IMAGE
specular_free_image
(
img
,
img_i
,
sfi
);
specular_free_image
(
img
,
img_i
,
sfi
,
check_nan_inf
);
//ITERATIVE PART
//ITERATIVE PART
float
step
=
0.01
f
;
float
step
=
0.01
f
;
...
@@ -68,7 +79,7 @@ void remove_highlights( blitz::Array<float ,3> &img,
...
@@ -68,7 +79,7 @@ void remove_highlights( blitz::Array<float ,3> &img,
{
{
// run the main iteration
// run the main iteration
//printf("*");
//printf("*");
iteration
(
diff
,
img_i
,
sfi
,
epsilon
);
iteration
(
diff
,
img_i
,
sfi
,
epsilon
,
check_nan_inf
,
skip_diffuse
);
epsilon
-=
step
;
epsilon
-=
step
;
//printf(": %f\n",epsilon);
//printf(": %f\n",epsilon);
}
}
...
@@ -124,7 +135,8 @@ inline float max_chroma(float r, float g, float b)
...
@@ -124,7 +135,8 @@ inline float max_chroma(float r, float g, float b)
void
specular_free_image
(
blitz
::
Array
<
float
,
3
>
&
src
,
void
specular_free_image
(
blitz
::
Array
<
float
,
3
>
&
src
,
blitz
::
Array
<
int
,
2
>
&
src_i
,
blitz
::
Array
<
int
,
2
>
&
src_i
,
blitz
::
Array
<
float
,
3
>
&
sfi
)
blitz
::
Array
<
float
,
3
>
&
sfi
,
bool
check_nan_inf
)
{
{
float
Lambda
=
0.6
f
;
float
Lambda
=
0.6
f
;
float
camDark
=
10.0
f
;
// for pixels that are too dark
float
camDark
=
10.0
f
;
// for pixels that are too dark
...
@@ -160,11 +172,12 @@ void specular_free_image( blitz::Array<float ,3> &src,
...
@@ -160,11 +172,12 @@ void specular_free_image( blitz::Array<float ,3> &src,
}
}
//perform the specular-to-diffuse mechanism
//perform the specular-to-diffuse mechanism
float
c
=
max_chroma
(
r
,
g
,
b
);
float
c
=
max_chroma
(
r
,
g
,
b
);
float
numr
=
max
(
r
,
g
,
b
)
*
(
3.0
f
*
c
-
1.0
f
);
float
numr
=
max
(
r
,
g
,
b
)
*
(
3.0
f
*
c
-
1.0
f
);
float
denm
=
c
*
lambdaConst
;
float
denm
=
c
*
lambdaConst
;
float
dI
=
numr
/
denm
;
float
dI
=
numr
/
denm
;
if
(
denm
==
0
&&
check_nan_inf
)
dI
=
0
;
float
sI
=
(
tot
(
r
,
g
,
b
)
-
dI
)
/
3.0
f
;
float
sI
=
(
tot
(
r
,
g
,
b
)
-
dI
)
/
3.0
f
;
...
@@ -193,7 +206,9 @@ void specular_free_image( blitz::Array<float ,3> &src,
...
@@ -193,7 +206,9 @@ void specular_free_image( blitz::Array<float ,3> &src,
// to apply specular to diffuse equation or mechanism
// to apply specular to diffuse equation or mechanism
inline
int
specular_2_diffuse
(
int
y
,
int
x
,
blitz
::
Array
<
float
,
3
>
&
iro
,
inline
int
specular_2_diffuse
(
int
y
,
int
x
,
blitz
::
Array
<
float
,
3
>
&
iro
,
blitz
::
Array
<
int
,
2
>
&
iro_i
,
float
maxChroma
)
blitz
::
Array
<
int
,
2
>
&
iro_i
,
float
maxChroma
,
bool
check_nan_inf
)
{
{
float
c
=
max_chroma
(
iro
(
0
,
y
,
x
),
iro
(
1
,
y
,
x
),
iro
(
2
,
y
,
x
));
float
c
=
max_chroma
(
iro
(
0
,
y
,
x
),
iro
(
1
,
y
,
x
),
iro
(
2
,
y
,
x
));
float
m
=
max
(
iro
(
0
,
y
,
x
),
iro
(
1
,
y
,
x
),
iro
(
2
,
y
,
x
));
float
m
=
max
(
iro
(
0
,
y
,
x
),
iro
(
1
,
y
,
x
),
iro
(
2
,
y
,
x
));
...
@@ -201,6 +216,12 @@ inline int specular_2_diffuse(int y, int x, blitz::Array<float ,3> &iro,
...
@@ -201,6 +216,12 @@ inline int specular_2_diffuse(int y, int x, blitz::Array<float ,3> &iro,
float
numr
=
(
m
*
(
3.0
f
*
c
-
1.0
f
));
float
numr
=
(
m
*
(
3.0
f
*
c
-
1.0
f
));
float
denm
=
(
c
*
(
3.0
f
*
maxChroma
-
1.0
f
));
float
denm
=
(
c
*
(
3.0
f
*
maxChroma
-
1.0
f
));
if
(
check_nan_inf
&&
abs
(
denm
)
<
0.000000001
)
{
iro_i
(
y
,
x
)
=
NOISE
;
return
1
;
}
float
dI
=
numr
/
denm
;
float
dI
=
numr
/
denm
;
float
sI
=
(
t
-
dI
)
/
3.0
f
;
float
sI
=
(
t
-
dI
)
/
3.0
f
;
...
@@ -229,7 +250,9 @@ inline int specular_2_diffuse(int y, int x, blitz::Array<float ,3> &iro,
...
@@ -229,7 +250,9 @@ inline int specular_2_diffuse(int y, int x, blitz::Array<float ,3> &iro,
void
iteration
(
blitz
::
Array
<
float
,
3
>
&
src
,
void
iteration
(
blitz
::
Array
<
float
,
3
>
&
src
,
blitz
::
Array
<
int
,
2
>
&
src_i
,
blitz
::
Array
<
int
,
2
>
&
src_i
,
blitz
::
Array
<
float
,
3
>
&
sfi
,
blitz
::
Array
<
float
,
3
>
&
sfi
,
float
epsilon
)
float
epsilon
,
bool
skip_diffuse
,
bool
check_nan_inf
)
{
{
int
x
,
y
;
int
x
,
y
;
int
dim_x
=
src
.
shape
()[
2
];
int
dim_x
=
src
.
shape
()[
2
];
...
@@ -238,7 +261,7 @@ void iteration( blitz::Array<float ,3> &src,
...
@@ -238,7 +261,7 @@ void iteration( blitz::Array<float ,3> &src,
float
thR
=
0.1
f
,
thG
=
0.1
f
;
float
thR
=
0.1
f
,
thG
=
0.1
f
;
// to have the initial labels
// to have the initial labels
int
count
=
init
(
src
,
src_i
,
sfi
,
epsilon
);
int
count
=
init
(
src
,
src_i
,
sfi
,
epsilon
,
skip_diffuse
,
check_nan_inf
);
int
pcount
;
int
pcount
;
while
(
1
)
while
(
1
)
...
@@ -300,13 +323,13 @@ void iteration( blitz::Array<float ,3> &src,
...
@@ -300,13 +323,13 @@ void iteration( blitz::Array<float ,3> &src,
//reduce the specularity at x direction
//reduce the specularity at x direction
if
(
max_chroma
(
r
,
g
,
b
)
<
max_chroma
(
rx
,
gx
,
bx
))
if
(
max_chroma
(
r
,
g
,
b
)
<
max_chroma
(
rx
,
gx
,
bx
))
{
{
specular_2_diffuse
(
y
,
x
,
src
,
src_i
,
max_chroma
(
rx
,
gx
,
bx
));
specular_2_diffuse
(
y
,
x
,
src
,
src_i
,
max_chroma
(
rx
,
gx
,
bx
)
,
check_nan_inf
);
src_i
(
y
,
x
)
=
DIFFUSE
;
src_i
(
y
,
x
)
=
DIFFUSE
;
src_i
(
y
,
x
+
1
)
=
DIFFUSE
;
src_i
(
y
,
x
+
1
)
=
DIFFUSE
;
}
}
else
else
{
{
specular_2_diffuse
(
y
,
x
+
1
,
src
,
src_i
,
max_chroma
(
r
,
g
,
b
));
specular_2_diffuse
(
y
,
x
+
1
,
src
,
src_i
,
max_chroma
(
r
,
g
,
b
)
,
check_nan_inf
);
src_i
(
y
,
x
)
=
DIFFUSE
;
src_i
(
y
,
x
)
=
DIFFUSE
;
src_i
(
y
,
x
+
1
)
=
DIFFUSE
;
src_i
(
y
,
x
+
1
)
=
DIFFUSE
;
}
}
...
@@ -332,13 +355,13 @@ void iteration( blitz::Array<float ,3> &src,
...
@@ -332,13 +355,13 @@ void iteration( blitz::Array<float ,3> &src,
//reduce the specularity in y direction
//reduce the specularity in y direction
if
(
max_chroma
(
r
,
g
,
b
)
<
max_chroma
(
ry
,
gy
,
by
))
if
(
max_chroma
(
r
,
g
,
b
)
<
max_chroma
(
ry
,
gy
,
by
))
{
{
specular_2_diffuse
(
y
,
x
,
src
,
src_i
,
max_chroma
(
ry
,
gy
,
by
));
specular_2_diffuse
(
y
,
x
,
src
,
src_i
,
max_chroma
(
ry
,
gy
,
by
)
,
check_nan_inf
);
src_i
(
y
,
x
)
=
DIFFUSE
;
src_i
(
y
,
x
)
=
DIFFUSE
;
src_i
(
y
+
1
,
x
)
=
DIFFUSE
;
src_i
(
y
+
1
,
x
)
=
DIFFUSE
;
}
}
else
else
{
{
specular_2_diffuse
(
y
+
1
,
x
,
src
,
src_i
,
max_chroma
(
r
,
g
,
b
));
specular_2_diffuse
(
y
+
1
,
x
,
src
,
src_i
,
max_chroma
(
r
,
g
,
b
)
,
check_nan_inf
);
src_i
(
y
,
x
)
=
DIFFUSE
;
src_i
(
y
,
x
)
=
DIFFUSE
;
src_i
(
y
+
1
,
x
)
=
DIFFUSE
;
src_i
(
y
+
1
,
x
)
=
DIFFUSE
;
}
}
...
@@ -347,7 +370,7 @@ void iteration( blitz::Array<float ,3> &src,
...
@@ -347,7 +370,7 @@ void iteration( blitz::Array<float ,3> &src,
}
}
pcount
=
count
;
pcount
=
count
;
count
=
init
(
src
,
src_i
,
sfi
,
epsilon
);
count
=
init
(
src
,
src_i
,
sfi
,
epsilon
,
skip_diffuse
,
check_nan_inf
);
if
(
count
==
0
)
if
(
count
==
0
)
break
;
break
;
...
@@ -363,7 +386,9 @@ void iteration( blitz::Array<float ,3> &src,
...
@@ -363,7 +386,9 @@ void iteration( blitz::Array<float ,3> &src,
int
init
(
blitz
::
Array
<
float
,
3
>
&
src
,
int
init
(
blitz
::
Array
<
float
,
3
>
&
src
,
blitz
::
Array
<
int
,
2
>
&
src_i
,
blitz
::
Array
<
int
,
2
>
&
src_i
,
blitz
::
Array
<
float
,
3
>
&
sfi
,
blitz
::
Array
<
float
,
3
>
&
sfi
,
float
epsilon
)
float
epsilon
,
bool
skip_diffuse
,
bool
check_nan_inf
)
{
{
int
dim_x
=
src
.
shape
()[
2
];
int
dim_x
=
src
.
shape
()[
2
];
int
dim_y
=
src
.
shape
()[
1
];
int
dim_y
=
src
.
shape
()[
1
];
...
@@ -379,6 +404,8 @@ int init( blitz::Array<float ,3> &src,
...
@@ -379,6 +404,8 @@ int init( blitz::Array<float ,3> &src,
case
NOISE
:
case
NOISE
:
case
CAMERA_DARK
:
case
CAMERA_DARK
:
continue
;
continue
;
case
DIFFUSE
:
if
(
skip_diffuse
)
continue
;
break
;
break
;
}
}
...
@@ -403,6 +430,7 @@ int init( blitz::Array<float ,3> &src,
...
@@ -403,6 +430,7 @@ int init( blitz::Array<float ,3> &src,
dlogy
=
fabs
(
dlogy
);
dlogy
=
fabs
(
dlogy
);
// specular in the x direction
// specular in the x direction
// if(dlogx > epsilon || std::isinf(dlog_src_x) || std::isinf(dlog_sfi_x))
if
(
dlogx
>
epsilon
)
if
(
dlogx
>
epsilon
)
{
{
src_i
(
y
,
x
)
=
SPECULARX
;
src_i
(
y
,
x
)
=
SPECULARX
;
...
@@ -411,6 +439,7 @@ int init( blitz::Array<float ,3> &src,
...
@@ -411,6 +439,7 @@ int init( blitz::Array<float ,3> &src,
}
}
//specular in the y direction
//specular in the y direction
// if(dlogy > epsilon || std::isinf(dlog_src_y) || std::isinf(dlog_sfi_y))
if
(
dlogy
>
epsilon
)
if
(
dlogy
>
epsilon
)
{
{
src_i
(
y
,
x
)
=
SPECULARY
;
src_i
(
y
,
x
)
=
SPECULARY
;
...
...
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