Browse Source

Add z-spacing option

Matthias Vogelgesang 9 years ago
parent
commit
efec57416e
3 changed files with 20 additions and 2 deletions
  1. 1 0
      src/lamino-filter-def.h
  2. 2 2
      src/lamino_bp_generic.cl
  3. 17 0
      src/ufo-lamino-bp-task.c

+ 1 - 0
src/lamino-filter-def.h

@@ -45,6 +45,7 @@ typedef struct
     int proj_sy;
 
     // variational
+    float z_spacing;
     float proj_ox_variation;
 
 } CLParameters;

+ 2 - 2
src/lamino_bp_generic.cl

@@ -44,7 +44,7 @@ lamino_bp_generic (global float *proj,
     const long int idx = (vZ * get_global_size(1) * get_global_size(0)) +
                          (vY * get_global_size(0)) + vX;
 
-    const float newz = (float) vZ - param->vol_oz;
+    const float newz = (float) vZ * param->z_spacing - param->vol_oz;
     const float newy = (float) vY - param->vol_oy;
     const float newx = (float) vX - param->vol_ox;
 
@@ -66,7 +66,7 @@ lamino_bp_varied (global float *proj,
     const long int idx = (vZ * get_global_size(1) * get_global_size(0)) +
                          (vY * get_global_size(0)) + vX;
 
-    const float newz = (float) vZ - param->vol_oz;
+    const float newz = (float) vZ * param->z_spacing - param->vol_oz;
     const float newy = (float) vY - param->vol_oy;
     const float newx = (float) vX - param->vol_ox;
 

+ 17 - 0
src/ufo-lamino-bp-task.c

@@ -52,6 +52,7 @@ enum {
     PROP_PROJ_OX,
     PROP_PROJ_OY,
     PROP_PROJ_OX_VARIATION,
+    PROP_Z_SPACING,
     N_PROPERTIES
 };
 
@@ -304,6 +305,7 @@ ufo_lamino_bp_task_copy (UfoNode *node,
     copy->priv->params.vol_oz = orig->priv->params.vol_oz;
     copy->priv->params.proj_ox = orig->priv->params.proj_ox;
     copy->priv->params.proj_oy = orig->priv->params.proj_oy;
+    copy->priv->params.z_spacing = orig->priv->params.z_spacing;
 
     return UFO_NODE (copy);
 }
@@ -353,6 +355,9 @@ ufo_lamino_bp_task_set_property (GObject *object,
         case PROP_PROJ_OX_VARIATION:
             priv->params.proj_ox_variation = (float) g_value_get_double (value);
             break;
+        case PROP_Z_SPACING:
+            priv->params.z_spacing = (float) g_value_get_double (value);
+            break;
         default:
             G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
             break;
@@ -403,6 +408,10 @@ ufo_lamino_bp_task_get_property (GObject *object,
             break;
         case PROP_PROJ_OX_VARIATION:
             g_value_set_double (value, (double) priv->params.proj_ox_variation);
+            break;
+        case PROP_Z_SPACING:
+            g_value_set_double (value, (double) priv->params.z_spacing);
+            break;
         default:
             G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec);
             break;
@@ -536,6 +545,13 @@ ufo_lamino_bp_task_class_init (UfoLaminoBpTaskClass *klass)
                 -1024*8, 1024*8, 0,
                 G_PARAM_READWRITE);
 
+    properties[PROP_Z_SPACING] =
+        g_param_spec_double("vol-z-spacing",
+                "Spacing factor in z-direction",
+                "Spacing factor in z-direction",
+                -G_MAXDOUBLE, G_MAXDOUBLE, 0.0,
+                G_PARAM_READWRITE);
+
     properties[PROP_PROJ_OX] =
         g_param_spec_double("proj-ox",
                 "Projection of the rotation center on the radiograph origin on the OX-axis",
@@ -591,4 +607,5 @@ ufo_lamino_bp_task_init(UfoLaminoBpTask *self)
     priv->params.proj_ox = 0;
     priv->params.proj_oy = 0;
     priv->params.proj_ox_variation = 0.0f;
+    priv->params.z_spacing = 1.0f;
 }