mirror of
https://github.com/davisking/dlib.git
synced 2024-11-01 10:14:53 +08:00
Modernize random_color_transform (#2665)
* Modernize random_color_transform * Remove temporary variables * formatting
This commit is contained in:
parent
e50987df4d
commit
19507d4a00
@ -23,44 +23,41 @@ namespace dlib
|
|||||||
const double color_magnitude = 0.2
|
const double color_magnitude = 0.2
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
// pick a random gamma correction factor.
|
// pick a random gamma correction factor.
|
||||||
double gamma = std::max(0.0, 1 + gamma_magnitude*(rnd.get_random_double()-0.5));
|
const double gamma = std::max(0.0, 1 + gamma_magnitude*(rnd.get_random_double() - 0.5));
|
||||||
|
|
||||||
// pick a random color balancing scheme.
|
// pick a random color balancing scheme.
|
||||||
double red_scale = 1-rnd.get_random_double()*color_magnitude;
|
double red_scale = 1 - rnd.get_random_double() * color_magnitude;
|
||||||
double green_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;
|
double blue_scale = 1 - rnd.get_random_double() * color_magnitude;
|
||||||
const double m = 255*std::max(std::max(red_scale,green_scale),blue_scale);
|
const double m = 255 * std::max({red_scale, green_scale, blue_scale});
|
||||||
red_scale /= m;
|
red_scale /= m;
|
||||||
green_scale /= m;
|
green_scale /= m;
|
||||||
blue_scale /= m;
|
blue_scale /= m;
|
||||||
|
|
||||||
// Now compute a lookup table for all the color channels. The table tells us
|
// Now compute a lookup table for all the color channels. The table tells us
|
||||||
// what the transform does.
|
// what the transform does.
|
||||||
table.resize(256*3);
|
table.resize(256 * 3);
|
||||||
unsigned long i = 0;
|
unsigned long i = 0;
|
||||||
for (int k = 0; k < 256; ++k)
|
for (int k = 0; k < 256; ++k)
|
||||||
{
|
{
|
||||||
double v = 255*std::pow(k*red_scale, gamma);
|
table[i++] = static_cast<unsigned char>(255 * std::pow(k * red_scale, gamma) + 0.5);
|
||||||
table[i++] = (unsigned char)(v + 0.5);
|
|
||||||
}
|
}
|
||||||
for (int k = 0; k < 256; ++k)
|
for (int k = 0; k < 256; ++k)
|
||||||
{
|
{
|
||||||
double v = 255*std::pow(k*green_scale, gamma);
|
table[i++] = static_cast<unsigned char>(255 * std::pow(k * green_scale, gamma) + 0.5);
|
||||||
table[i++] = (unsigned char)(v + 0.5);
|
|
||||||
}
|
}
|
||||||
for (int k = 0; k < 256; ++k)
|
for (int k = 0; k < 256; ++k)
|
||||||
{
|
{
|
||||||
double v = 255*std::pow(k*blue_scale, gamma);
|
table[i++] = static_cast<unsigned char>(255 * std::pow(k * blue_scale, gamma) + 0.5);
|
||||||
table[i++] = (unsigned char)(v + 0.5);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
rgb_pixel operator()(rgb_pixel p) const
|
rgb_pixel operator()(rgb_pixel p) const
|
||||||
{
|
{
|
||||||
p.red = table[(unsigned int)p.red];
|
p.red = table[static_cast<unsigned int>(p.red)];
|
||||||
p.green = table[(unsigned int)p.green+256];
|
p.green = table[static_cast<unsigned int>(p.green + 256)];
|
||||||
p.blue = table[(unsigned int)p.blue+512];
|
p.blue = table[static_cast<unsigned int>(p.blue + 512)];
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user