in dedupe_estimator.cpp [442:471]
std::vector<RGB> generate_color_sequence(const std::vector<size_t>& s) {
std::vector<RGB> ret;
for (size_t i = 0; i < SEQUENCE_LENGTH; ++i) {
// linear interpolate i in s
float fpos = (float(i) * s.size()) / SEQUENCE_LENGTH;
float fnextpos = (float(i+1) * s.size()) / SEQUENCE_LENGTH;
if (fpos > s.size() - 1) {
fpos = s.size() - 1;
}
FRGB color = {0,0,0};
float weight = 0;
for (float j = fpos; j < fnextpos; ++j) {
FRGB sample = interpolate_sample(s, j);
float w = std::max<float>(fnextpos - fpos, 1.0);
color.r += sample.r * w;
color.g += sample.g * w;
color.b += sample.b * w;
weight += w;
}
color.r /= weight;
color.g /= weight;
color.b /= weight;
RGB final_color;
final_color.r = std::min<uint8_t>(255, std::max<uint8_t>(0, color.r));
final_color.g = std::min<uint8_t>(255, std::max<uint8_t>(0, color.g));
final_color.b = std::min<uint8_t>(255, std::max<uint8_t>(0, color.b));
ret.push_back(final_color);
}
return ret;
}