Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
OpenDAS
dlib
Commits
e8b97bb5
Commit
e8b97bb5
authored
Jan 31, 2016
by
Davis King
Browse files
Added random_color_transform and disturb_colors().
parent
43f6cd77
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
178 additions
and
0 deletions
+178
-0
dlib/image_transforms.h
dlib/image_transforms.h
+1
-0
dlib/image_transforms/random_color_transform.h
dlib/image_transforms/random_color_transform.h
+100
-0
dlib/image_transforms/random_color_transform_abstract.h
dlib/image_transforms/random_color_transform_abstract.h
+77
-0
No files found.
dlib/image_transforms.h
View file @
e8b97bb5
...
@@ -24,6 +24,7 @@
...
@@ -24,6 +24,7 @@
#include "image_transforms/interpolation.h"
#include "image_transforms/interpolation.h"
#include "image_transforms/fhog.h"
#include "image_transforms/fhog.h"
#include "image_transforms/lbp.h"
#include "image_transforms/lbp.h"
#include "image_transforms/random_color_transform.h"
#endif // DLIB_IMAGE_TRANSFORMs_
#endif // DLIB_IMAGE_TRANSFORMs_
dlib/image_transforms/random_color_transform.h
0 → 100644
View file @
e8b97bb5
// Copyright (C) 2016 Davis E. King (davis@dlib.net)
// License: Boost Software License See LICENSE.txt for the full license.
#ifndef DLIB_RANDOM_cOLOR_TRANSFORM_Hh_
#define DLIB_RANDOM_cOLOR_TRANSFORM_Hh_
#include "random_color_transform_abstract.h"
#include "../image_processing/generic_image.h"
#include "../pixel.h"
#include "../rand.h"
namespace
dlib
{
// ----------------------------------------------------------------------------------------
class
random_color_transform
{
public:
random_color_transform
(
dlib
::
rand
&
rnd
,
const
double
gamma_magnitude
=
0.5
,
const
double
color_magnitude
=
0.2
)
{
// pick a random gamma correction factor.
double
gamma
=
std
::
max
(
0.0
,
1
+
gamma_magnitude
*
(
rnd
.
get_random_double
()
-
0.5
));
// pick a random color balancing scheme.
double
red_scale
=
1
-
rnd
.
get_random_double
()
*
color_magnitude
;
double
green_scale
=
1
-
rnd
.
get_random_double
()
*
color_magnitude
;
double
blue_scale
=
1
-
rnd
.
get_random_double
()
*
color_magnitude
;
const
double
m
=
255
*
std
::
max
(
std
::
max
(
red_scale
,
green_scale
),
blue_scale
);
red_scale
/=
m
;
green_scale
/=
m
;
blue_scale
/=
m
;
// Now compute a lookup table for all the color channels. The table tells us
// what the transform does.
table
.
resize
(
256
*
3
);
unsigned
long
i
=
0
;
for
(
int
k
=
0
;
k
<
256
;
++
k
)
{
double
v
=
255
*
std
::
pow
(
k
*
red_scale
,
gamma
);
table
[
i
++
]
=
(
unsigned
char
)(
v
+
0.5
);
}
for
(
int
k
=
0
;
k
<
256
;
++
k
)
{
double
v
=
255
*
std
::
pow
(
k
*
green_scale
,
gamma
);
table
[
i
++
]
=
(
unsigned
char
)(
v
+
0.5
);
}
for
(
int
k
=
0
;
k
<
256
;
++
k
)
{
double
v
=
255
*
std
::
pow
(
k
*
blue_scale
,
gamma
);
table
[
i
++
]
=
(
unsigned
char
)(
v
+
0.5
);
}
}
rgb_pixel
operator
()(
rgb_pixel
p
)
const
{
p
.
red
=
table
[(
unsigned
int
)
p
.
red
];
p
.
green
=
table
[(
unsigned
int
)
p
.
green
+
256
];
p
.
blue
=
table
[(
unsigned
int
)
p
.
blue
+
512
];
return
p
;
}
private:
std
::
vector
<
unsigned
char
>
table
;
};
// ----------------------------------------------------------------------------------------
template
<
typename
image_type
>
void
disturb_colors
(
image_type
&
img_
,
dlib
::
rand
&
rnd
,
const
double
gamma_magnitude
=
0.5
,
const
double
color_magnitude
=
0.2
)
{
image_view
<
image_type
>
img
(
img_
);
random_color_transform
tform
(
rnd
,
gamma_magnitude
,
color_magnitude
);
for
(
long
r
=
0
;
r
<
img
.
nr
();
++
r
)
{
for
(
long
c
=
0
;
c
<
img
.
nc
();
++
c
)
{
rgb_pixel
temp
;
assign_pixel
(
temp
,
img
[
r
][
c
]);
temp
=
tform
(
temp
);
assign_pixel
(
img
[
r
][
c
],
temp
);
}
}
}
// ----------------------------------------------------------------------------------------
}
#endif // DLIB_RANDOM_cOLOR_TRANSFORM_Hh_
dlib/image_transforms/random_color_transform_abstract.h
0 → 100644
View file @
e8b97bb5
// Copyright (C) 2016 Davis E. King (davis@dlib.net)
// License: Boost Software License See LICENSE.txt for the full license.
#undef DLIB_RANDOM_cOLOR_TRANSFORM_ABSTRACT_Hh_
#ifdef DLIB_RANDOM_cOLOR_TRANSFORM_ABSTRACT_Hh_
#include "../image_processing/generic_image.h"
#include "../pixel.h"
#include "../rand.h"
namespace
dlib
{
// ----------------------------------------------------------------------------------------
class
random_color_transform
{
/*!
WHAT THIS OBJECT REPRESENTS
This object generates a random color balancing and gamma correction
transform. It then allows you to apply that specific transform to as many
rgb_pixel objects as you like.
!*/
public:
random_color_transform
(
dlib
::
rand
&
rnd
,
const
double
gamma_magnitude
=
0.5
,
const
double
color_magnitude
=
0.2
);
/*!
requires
- 0 <= gamma_magnitude
- 0 <= color_magnitude <= 1
ensures
- This constructor generates a random color transform which can be applied
by calling this object's operator() method.
- The color transform is a gamma correction and color rebalancing. If
gamma_magnitude == 0 and color_magnitude == 0 then the transform doesn't
change any colors at all. However, the larger these parameters the more
noticeable the resulting transform.
!*/
rgb_pixel
operator
()(
rgb_pixel
p
)
const
;
/*!
ensures
- returns the color transformed version of p.
!*/
};
// ----------------------------------------------------------------------------------------
template
<
typename
image_type
>
void
disturb_colors
(
image_type
&
img
,
dlib
::
rand
&
rnd
,
const
double
gamma_magnitude
=
0.5
,
const
double
color_magnitude
=
0.2
);
/*!
requires
- image_type == an image object that implements the interface defined in
dlib/image_processing/generic_image.h
ensures
- Applies a random color transform to the given image. This is done by
creating a random_color_transform with the given parameters and then
transforming each pixel in the image with the resulting transform.
!*/
// ----------------------------------------------------------------------------------------
}
#endif // DLIB_RANDOM_cOLOR_TRANSFORM_ABSTRACT_Hh_
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