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);
const dt_aligned_pixel_t f
const dt_colormatrix_t dt_aligned_pixel_t out
#define dt_pixelpipe_cache_alloc_align_float_cache(pixels, id)
#define dt_pixelpipe_cache_alloc_align_cache(size, id)
#define dt_pixelpipe_cache_free_align(mem)
#define __OMP_FOR_SIMD__(...)
__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)
float *const restrict const size_t k