bool operator()(
      double const* const paramsX,
      double const* const paramsY,
      double* residuals) const {

    BezierCurve<float, double> bezierX;
    BezierCurve<float, double> bezierY;

    for (int i = 0; i <= TBezierX; ++i) {
      bezierX.addPoint(paramsX[i]);
    }
    for (int i = 0; i <= TBezierY; ++i) {
      bezierY.addPoint(paramsY[i]);
    }

    const double vx = bezierX(x);
    const double vy = bezierY(y);

    *residuals = vx * vy - intensity;
    CHECK(std::isfinite(*residuals));
    return true;
  }