59inline constexpr static double a0 = 1.6797292232361107;
60inline constexpr static double a1 = 3.7348298269103580;
61inline constexpr static double b0 = 1.7831906544515104;
62inline constexpr static double b1 = 1.7228297663338028;
63inline constexpr static double c0 = -0.6802783501806897;
64inline constexpr static double c1 = -0.2598300478959625;
65inline constexpr static double w0 = 0.6318113174569493;
66inline constexpr static double w1 = 1.9969276832487770;
83 return multiplier1 * term1 + multiplier2 * term2;
89 const double multiplier1 = 2.0 *
math::exp(-(
b0 / sigma) - (
b1 / sigma));
93 const double term1 = term11 - term12 - term13;
98 return multiplier1 * term1 + term2 + term3;
104 const double multiplier1 =
math::exp(-(
b1 / sigma) - 2.0 * (
b0 / sigma));
107 const double multiplier2 =
math::exp(-(
b0 / sigma) - 2.0 * (
b1 / sigma));
110 return multiplier1 * term1 + multiplier2 * term2;
121 return double4(n0, n1, n2, n3);
130 return term1 - term2;
137 const double multiplier1 =
math::exp(-(
b0 / sigma) - (
b1 / sigma));
139 const double term2 =
math::exp(-2.0 * (
b1 / sigma));
140 const double term3 =
math::exp(-2.0 * (
b0 / sigma));
142 return term1 * multiplier1 + term2 + term3;
149 const double multiplier1 =
math::exp(-(
b0 / sigma) - 2.0 * (
b1 / sigma));
152 const double multiplier2 =
math::exp(-(
b1 / sigma) - 2.0 * (
b0 / sigma));
154 return term1 * multiplier1 - term2 * multiplier2;
171 return double4(d1, d2, d3, d4);
179 const double4 &feedback_coefficients)
181 const double causal_feedforwad_sum =
math::reduce_add(causal_feedforward_coefficients);
183 return 2.0 * (causal_feedforwad_sum / feedback_sum) - causal_feedforward_coefficients[0];
191 const double4 &causal_feedforward_coefficients,
const double4 &feedback_coefficients)
193 const double n1 = causal_feedforward_coefficients[1] -
194 feedback_coefficients[0] * causal_feedforward_coefficients[0];
195 const double n2 = causal_feedforward_coefficients[2] -
196 feedback_coefficients[1] * causal_feedforward_coefficients[0];
197 const double n3 = causal_feedforward_coefficients[3] -
198 feedback_coefficients[2] * causal_feedforward_coefficients[0];
199 const double n4 = -feedback_coefficients[3] * causal_feedforward_coefficients[0];
201 return double4(n1, n2, n3, n4);
241 const double4 &feedback_coefficients)
259 feedback_coefficients_);
265 causal_feedforward_coefficients_, feedback_coefficients_);
269 feedback_coefficients_);
271 non_causal_feedforward_coefficients_, feedback_coefficients_);
276 return feedback_coefficients_;
281 return causal_feedforward_coefficients_;
286 return non_causal_feedforward_coefficients_;
291 return causal_boundary_coefficient_;
296 return non_causal_boundary_coefficient_;
306 map_.remove_if([](
auto item) {
return !item.value->needed; });
310 for (
auto &value : map_.values()) {
311 value->needed =
false;
320 auto &deriche_gaussian_coefficients = *map_.lookup_or_add_cb(
321 key, [&]() {
return std::make_unique<DericheGaussianCoefficients>(context, sigma); });
323 deriche_gaussian_coefficients.needed =
true;
324 return deriche_gaussian_coefficients;
unsigned long long int uint64_t
DericheGaussianCoefficients & get(Context &context, float sigma)
DericheGaussianCoefficientsKey(float sigma)
double non_causal_boundary_coefficient() const
const double4 & causal_feedforward_coefficients() const
double causal_boundary_coefficient() const
const double4 & feedback_coefficients() const
const double4 & non_causal_feedforward_coefficients() const
DericheGaussianCoefficients(Context &context, float sigma)
static constexpr double a0
static double compute_denominator_1(float sigma)
static double compute_denominator_2(float sigma)
static double compute_numerator_2(float sigma)
bool operator==(const BokehKernelKey &a, const BokehKernelKey &b)
static constexpr double w0
static double compute_denominator_4(float sigma)
static double compute_denominator_3(float sigma)
static constexpr double w1
static double compute_numerator_3(float sigma)
static float compute_normalization_scale(const double4 &causal_feedforward_coefficients, const double4 &feedback_coefficients)
static constexpr double a1
static constexpr double b1
static double4 compute_denominator(float sigma)
static double4 compute_non_causal_feedforward_coefficients(const double4 &causal_feedforward_coefficients, const double4 &feedback_coefficients)
static constexpr double c1
static double compute_numerator_1(float sigma)
static double compute_boundary_coefficient(const double4 &feedforward_coefficients, const double4 &feedback_coefficients)
static constexpr double b0
static double compute_numerator_0()
static constexpr double c0
static double4 compute_numerator(float sigma)
T cos(const AngleRadianBase< T > &a)
T sin(const AngleRadianBase< T > &a)
T reduce_add(const VecBase< T, Size > &a)
uint64_t get_default_hash(const T &v, const Args &...args)
VecBase< double, 4 > double4