std::vector generate_color_sequence()

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;
}