74 const float *
const restrict mask,
75 float *
const restrict
out,
90 float ming = 10000000.0f;
92 float minm = 10000000.0f;
94 float ming2 = 10000000.0f;
96 float minmg = 10000000.0f;
99 for(
size_t k = 0;
k < Ndim;
k++)
101 const float pixelg = guide[
k];
102 const float pixelm = mask[
k];
103 const float pixelg2 = pixelg * pixelg;
104 const float pixelmg = pixelm * pixelg;
106 in[
k * 4 + 1] = pixelg2;
107 in[
k * 4 + 2] = pixelm;
108 in[
k * 4 + 3] = pixelmg;
109 ming =
MIN(ming,pixelg);
110 maxg =
MAX(maxg,pixelg);
111 minm =
MIN(minm,pixelm);
112 maxm =
MAX(maxm,pixelm);
113 ming2 =
MIN(ming2,pixelg2);
114 maxg2 =
MAX(maxg2,pixelg2);
115 minmg =
MIN(minmg,pixelmg);
116 maxmg =
MAX(maxmg,pixelmg);
129 for(
size_t k = 0;
k < Ndim;
k++)
145 float *
const restrict
out,
160 float ming = 10000000.0f;
162 float ming2 = 10000000.0f;
165 for(
size_t k = 0;
k < Ndim;
k++)
167 const float pixelg = guide[
k];
168 const float pixelg2 = pixelg * pixelg;
170 in[2 *
k + 1] = pixelg2;
171 ming =
MIN(ming,pixelg);
172 maxg =
MAX(maxg,pixelg);
173 ming2 =
MIN(ming2,pixelg2);
174 maxg2 =
MAX(maxg2,pixelg2);
177 float max[2] = {maxg, maxg2};
178 float min[2] = {ming, ming2};
187 for(
size_t k = 0;
k < Ndim;
k++)
189 const float avg =
out[2 *
k];
190 out[2 *
k + 1] -= avg * avg;
200static inline void eigf_blending(
float *
const restrict image,
const float *
const restrict mask,
201 const float *
const restrict av,
const size_t Ndim,
205 for(
size_t k = 0;
k < Ndim;
k++)
207 const float avg_g = av[
k * 4];
208 const float avg_m = av[
k * 4 + 2];
209 const float var_g = av[
k * 4 + 1];
210 const float covar_mg = av[
k * 4 + 3];
211 const float norm_g = fmaxf(avg_g * image[
k], 1
E-6);
212 const float norm_m = fmaxf(avg_m * mask[
k], 1
E-6);
213 const float normalized_var_guide = var_g / norm_g;
214 const float normalized_covar = covar_mg / sqrtf(norm_g * norm_m);
215 const float a = normalized_covar / (normalized_var_guide + feathering);
216 const float b = avg_m - a * avg_g;
225 image[
k] = sqrtf(image[
k]);
235 const float feathering)
238 for(
size_t k = 0;
k < Ndim;
k++)
240 const float avg_g = av[
k * 2];
241 const float var_g = av[
k * 2 + 1];
242 const float norm_g = fmaxf(avg_g * image[
k], 1
E-6);
243 const float normalized_var_guide = var_g / norm_g;
244 const float a = normalized_var_guide / (normalized_var_guide + feathering);
245 const float b = avg_g - a * avg_g;
254 image[
k] = sqrtf(image[
k]);
262 const float sigma,
float feathering,
const int iterations,
264 const float quantization,
const float quantize_min,
const float quantize_max)
279 const size_t num_elem_ds = ds_width * ds_height;
296 for(
int i = 0;
i < iterations;
i++)
301 if(
i == iterations - 1)
305 if(quantization != 0.0f)
static void error(char *msg)
Definition ashift_lsd.c:202
int width
Definition bilateral.h:1
int height
Definition bilateral.h:1
static const float scaling
Definition chromatic_adaptation.h:293
const float i
Definition colorspaces_inline_conversions.h:440
const float g
Definition colorspaces_inline_conversions.h:674
static const float const float const float min
Definition colorspaces_inline_conversions.h:438
const float max
Definition colorspaces_inline_conversions.h:490
const dt_colormatrix_t dt_aligned_pixel_t out
Definition colorspaces_inline_conversions.h:42
#define dt_pixelpipe_cache_alloc_align_float_cache(pixels, id)
Definition darktable.h:447
static size_t dt_round_size_sse(const size_t size)
Definition darktable.h:403
#define dt_pixelpipe_cache_free_align(mem)
Definition darktable.h:453
#define __DT_CLONE_TARGETS__
Definition darktable.h:367
#define __OMP_PARALLEL_FOR__(...)
Definition darktable.h:258
#define __OMP_PARALLEL_FOR_SIMD__(...)
Definition darktable.h:259
#define IS_NULL_PTR(p)
C is way too permissive with !=, == and if(var) checks, which can mean too many things depending on w...
Definition darktable.h:281
static __DT_CLONE_TARGETS__ int eigf_variance_analysis(const float *const restrict guide, const float *const restrict mask, float *const restrict out, const size_t width, const size_t height, const float sigma)
Definition eigf.h:73
static __DT_CLONE_TARGETS__ int fast_eigf_surface_blur(float *const restrict image, const size_t width, const size_t height, const float sigma, float feathering, const int iterations, const dt_iop_guided_filter_blending_t filter, const float scale, const float quantization, const float quantize_min, const float quantize_max)
Definition eigf.h:260
static __DT_CLONE_TARGETS__ int eigf_variance_analysis_no_mask(const float *const restrict guide, float *const restrict out, const size_t width, const size_t height, const float sigma)
Definition eigf.h:144
static __DT_CLONE_TARGETS__ void eigf_blending_no_mask(float *const restrict image, const float *const restrict av, const size_t Ndim, const dt_iop_guided_filter_blending_t filter, const float feathering)
Definition eigf.h:233
static __DT_CLONE_TARGETS__ void eigf_blending(float *const restrict image, const float *const restrict mask, const float *const restrict av, const size_t Ndim, const dt_iop_guided_filter_blending_t filter, const float feathering)
Definition eigf.h:200
dt_iop_guided_filter_blending_t
Definition fast_guided_filter.h:44
@ DT_GF_BLENDING_LINEAR
Definition fast_guided_filter.h:45
static __DT_CLONE_TARGETS__ void quantize(const float *const restrict image, float *const restrict out, const size_t num_elem, const float sampling, const float clip_min, const float clip_max)
Definition fast_guided_filter.h:236
#define MIN_FLOAT
Definition fast_guided_filter.h:40
static __DT_CLONE_TARGETS__ void interpolate_bilinear(const float *const restrict in, const size_t width_in, const size_t height_in, float *const restrict out, const size_t width_out, const size_t height_out, const size_t ch)
Definition fast_guided_filter.h:94
void dt_gaussian_free(dt_gaussian_t *g)
Definition gaussian.c:330
__DT_CLONE_TARGETS__ void dt_gaussian_blur(dt_gaussian_t *g, const float *const in, float *const out)
Definition gaussian.c:171
void dt_gaussian_blur_4c(dt_gaussian_t *g, const float *const in, float *const out)
Definition gaussian.c:325
dt_gaussian_t * dt_gaussian_init(const int width, const int height, const int channels, const float *max, const float *min, const float sigma, const int order)
Definition gaussian.c:122
float *const restrict const size_t k
Definition luminance_mask.h:78
float dt_aligned_pixel_t[4]
Definition noiseprofile.c:28
const float sigma
Definition src/develop/noise_generator.h:71
#define E
Definition test_filmicrgb.c:61
#define MIN(a, b)
Definition thinplate.c:32
#define MAX(a, b)
Definition thinplate.c:29