diff options
author | Tomas Farago <sensej007@email.cz> | 2019-08-08 12:28:00 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-08-08 12:28:00 +0200 |
commit | bba3b7a9f10df6f53ad3467637b22658a7948aa0 (patch) | |
tree | 3346472b81c7ed0fe0f0b28d2a865f699ee19e26 | |
parent | 3888f4b62342f6a216acbb0164ed26283cc0f6dc (diff) | |
parent | f45d388ca9253dd68b43f5635a1db6f3b4ffacc7 (diff) | |
download | ufo-filters-bba3b7a9f10df6f53ad3467637b22658a7948aa0.tar.gz ufo-filters-bba3b7a9f10df6f53ad3467637b22658a7948aa0.tar.bz2 ufo-filters-bba3b7a9f10df6f53ad3467637b22658a7948aa0.tar.xz ufo-filters-bba3b7a9f10df6f53ad3467637b22658a7948aa0.zip |
Merge pull request #183 from ldorofeeva/master
Enhancement: add flat-field multiplier to ffc filter
-rw-r--r-- | docs/filters.rst | 3 | ||||
-rw-r--r-- | src/kernels/ffc.cl | 8 | ||||
-rw-r--r-- | src/ufo-flat-field-correct-task.c | 18 |
3 files changed, 26 insertions, 3 deletions
diff --git a/docs/filters.rst b/docs/filters.rst index bd7044d..c04b536 100644 --- a/docs/filters.rst +++ b/docs/filters.rst @@ -902,6 +902,9 @@ Flat-field correction Scale the dark field prior to the flat field correct. + .. gobj:prop:: flat-scale:float + + Scale the flat field prior to the flat field correct. Sinogram transposition ---------------------- diff --git a/src/kernels/ffc.cl b/src/kernels/ffc.cl index c936d1e..783b045 100644 --- a/src/kernels/ffc.cl +++ b/src/kernels/ffc.cl @@ -25,18 +25,20 @@ flat_correct (global float *corrected, const int sinogram_input, const int absorptivity, const int fix_abnormal, - const float dark_scale) + const float dark_scale, + const float flat_scale) { const int gid = get_global_id(1) * get_global_size(0) + get_global_id(0); const int corr_idx = sinogram_input ? get_global_id(0) : gid; const float cdark = dark[corr_idx] * dark_scale; + const float cflat = flat[corr_idx] * flat_scale; float result; if (absorptivity) { - result = log ((flat[corr_idx] - cdark) / (data[gid] - cdark)); + result = log ((cflat - cdark) / (data[gid] - cdark)); } else { - result = (data[gid] - cdark) / (flat[corr_idx] - cdark); + result = (data[gid] - cdark) / (cflat - cdark); } if (fix_abnormal && (isnan (result) || isinf (result))) { diff --git a/src/ufo-flat-field-correct-task.c b/src/ufo-flat-field-correct-task.c index 38ff731..4378bfc 100644 --- a/src/ufo-flat-field-correct-task.c +++ b/src/ufo-flat-field-correct-task.c @@ -31,6 +31,7 @@ struct _UfoFlatFieldCorrectTaskPrivate { gboolean absorptivity; gboolean sinogram_input; gfloat dark_scale; + gfloat flat_scale; cl_kernel kernel; }; @@ -48,6 +49,7 @@ enum { PROP_ABSORPTIVITY, PROP_SINOGRAM_INPUT, PROP_DARK_SCALE, + PROP_FLAT_SCALE, N_PROPERTIES }; @@ -153,6 +155,7 @@ ufo_flat_field_correct_task_process (UfoTask *task, UFO_RESOURCES_CHECK_CLERR (clSetKernelArg (priv->kernel, 5, sizeof (cl_int), &absorptivity)); UFO_RESOURCES_CHECK_CLERR (clSetKernelArg (priv->kernel, 6, sizeof (cl_int), &fix_nan_and_inf)); UFO_RESOURCES_CHECK_CLERR (clSetKernelArg (priv->kernel, 7, sizeof (cl_float), &priv->dark_scale)); + UFO_RESOURCES_CHECK_CLERR (clSetKernelArg (priv->kernel, 8, sizeof (cl_float), &priv->flat_scale)); profiler = ufo_task_node_get_profiler (UFO_TASK_NODE (task)); ufo_profiler_call (profiler, cmd_queue, priv->kernel, 2, requisition->dims, NULL); @@ -181,6 +184,10 @@ ufo_flat_field_correct_task_set_property (GObject *object, case PROP_DARK_SCALE: priv->dark_scale = g_value_get_float (value); break; + case PROP_FLAT_SCALE: + priv->flat_scale = g_value_get_float (value); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; @@ -208,6 +215,9 @@ ufo_flat_field_correct_task_get_property (GObject *object, case PROP_DARK_SCALE: g_value_set_float (value, priv->dark_scale); break; + case PROP_FLAT_SCALE: + g_value_set_float (value, priv->flat_scale); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; @@ -277,6 +287,13 @@ ufo_flat_field_correct_task_class_init (UfoFlatFieldCorrectTaskClass *klass) -G_MAXFLOAT, G_MAXFLOAT, 1.0f, G_PARAM_READWRITE); + properties[PROP_FLAT_SCALE] = + g_param_spec_float ("flat-scale", + "Scale the flat field prior to the flat field correct", + "Scale the flat field prior to the flat field correct", + -G_MAXFLOAT, G_MAXFLOAT, 1.0f, + G_PARAM_READWRITE); + for (guint i = PROP_0 + 1; i < N_PROPERTIES; i++) g_object_class_install_property (gobject_class, i, properties[i]); @@ -292,4 +309,5 @@ ufo_flat_field_correct_task_init(UfoFlatFieldCorrectTask *self) self->priv->sinogram_input = FALSE; self->priv->kernel = NULL; self->priv->dark_scale = 1.0f; + self->priv->flat_scale = 1.0f; } |