66#define DT_DISTANCE_TRANSFORM_MAX (1e20)
74 for(
int q = 1; q <=
n-1; q++)
76 float s = (
f[q] + sqf((
float)q)) - (
f[
v[
k]] + sqf((
float)
v[
k]));
77 while(s <= z[
k] * (
float)(2*q - 2*
v[
k]))
80 s = (
f[q] + sqf((
float)q)) - (
f[
v[
k]] + sqf((
float)
v[
k]));
82 s /= (float)(2*q - 2*
v[
k]);
90 for(
int q = 0; q <=
n-1; q++)
92 while(z[
k+1] < (
float)q)
94 d[q] = sqf((
float)(q-
v[
k])) +
f[
v[
k]];
111 fprintf(stderr,
"[dt_image_distance_transform] called with unsupported mode %i\n", mode);
116 float max_distance = 0.0f;
118 #pragma omp parallel \
119 reduction(max : max_distance)
133 for(
size_t y = 0; y <
height; y++)
136 for(
size_t y = 0; y <
height; y++)
142 #pragma omp for nowait
144 for(
size_t y = 0; y <
height; y++)
149 const float val = sqrtf(
d[
x]);
151 max_distance = fmaxf(max_distance, val);
int width
Definition bilateral.h:1
int height
Definition bilateral.h:1
const float i
Definition colorspaces_inline_conversions.h:440
const dt_aligned_pixel_t f
Definition colorspaces_inline_conversions.h:102
const float d
Definition colorspaces_inline_conversions.h:680
const dt_colormatrix_t dt_aligned_pixel_t out
Definition colorspaces_inline_conversions.h:42
const float n
Definition colorspaces_inline_conversions.h:678
#define dt_pixelpipe_cache_alloc_align_float_cache(pixels, id)
Definition darktable.h:447
#define dt_pixelpipe_cache_alloc_align_cache(size, id)
Definition darktable.h:433
#define dt_pixelpipe_cache_free_align(mem)
Definition darktable.h:453
#define __OMP_FOR_SIMD__(...)
Definition darktable.h:260
__DT_CLONE_TARGETS__ void dt_iop_image_fill(float *const buf, const float fill_value, const size_t width, const size_t height, const size_t ch)
Definition imagebuf.c:214
static const float x
Definition iop_profile.h:235
const float v
Definition iop_profile.h:221
float *const restrict const size_t k
Definition luminance_mask.h:78
#define MAX(a, b)
Definition thinplate.c:29