50 return a.sigma ==
b.sigma;
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);
233 const double4 &feedback_coefficients)
251 feedback_coefficients_);
257 causal_feedforward_coefficients_, feedback_coefficients_);
261 feedback_coefficients_);
263 non_causal_feedforward_coefficients_, feedback_coefficients_);
268 return feedback_coefficients_;
273 return causal_feedforward_coefficients_;
278 return non_causal_feedforward_coefficients_;
283 return causal_boundary_coefficient_;
288 return non_causal_boundary_coefficient_;
298 map_.remove_if([](
auto item) {
return !item.value->needed; });
302 for (
auto &value : map_.values()) {
303 value->needed =
false;
312 auto &deriche_gaussian_coefficients = *map_.lookup_or_add_cb(
313 key, [&]() {
return std::make_unique<DericheGaussianCoefficients>(context, sigma); });
315 deriche_gaussian_coefficients.needed =
true;
316 return deriche_gaussian_coefficients;
DericheGaussianCoefficients & get(Context &context, float sigma)
DericheGaussianCoefficientsKey(float sigma)
DericheGaussianCoefficients(Context &context, float sigma)
double causal_boundary_coefficient() const
const double4 & non_causal_feedforward_coefficients() const
const double4 & causal_feedforward_coefficients() const
const double4 & feedback_coefficients() const
double non_causal_boundary_coefficient() const
local_group_size(16, 16) .push_constant(Type b
T cos(const AngleRadianBase< T > &a)
T sin(const AngleRadianBase< T > &a)
T reduce_add(const VecBase< T, Size > &a)
static double compute_numerator_0()
static float compute_normalization_scale(const double4 &causal_feedforward_coefficients, const double4 &feedback_coefficients)
static double compute_denominator_2(float sigma)
static double compute_numerator_2(float sigma)
static double4 compute_denominator(float sigma)
static constexpr double b0
bool operator==(const BokehKernelKey &a, const BokehKernelKey &b)
static double compute_denominator_1(float sigma)
static double4 compute_numerator(float sigma)
static double compute_numerator_3(float sigma)
static constexpr double w0
static double compute_boundary_coefficient(const double4 &feedforward_coefficients, const double4 &feedback_coefficients)
static double compute_numerator_1(float sigma)
static double4 compute_non_causal_feedforward_coefficients(const double4 &causal_feedforward_coefficients, const double4 &feedback_coefficients)
static double compute_denominator_3(float sigma)
static constexpr double w1
static constexpr double c1
static double compute_denominator_4(float sigma)
static constexpr double a0
static constexpr double b1
static constexpr double c0
static constexpr double a1
uint64_t get_default_hash(const T &v)
VecBase< double, 4 > double4
unsigned __int64 uint64_t