Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
D
dlib
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
钟尚武
dlib
Commits
e8b97bb5
Commit
e8b97bb5
authored
Jan 31, 2016
by
Davis King
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added random_color_transform and disturb_colors().
parent
43f6cd77
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
178 additions
and
0 deletions
+178
-0
image_transforms.h
dlib/image_transforms.h
+1
-0
random_color_transform.h
dlib/image_transforms/random_color_transform.h
+100
-0
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 @@
#include "image_transforms/interpolation.h"
#include "image_transforms/fhog.h"
#include "image_transforms/lbp.h"
#include "image_transforms/random_color_transform.h"
#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