Răsfoiți Sursa

Move offset to the transformation matrix

Tomas Farago 9 ani în urmă
părinte
comite
6a3b875525
2 a modificat fișierele cu 6 adăugiri și 12 ștergeri
  1. 2 3
      src/kernels/ankabackproject.cl
  2. 4 9
      src/ufo-anka-backproject-task.c

+ 2 - 3
src/kernels/ankabackproject.cl

@@ -24,7 +24,6 @@
                             const float2 y_region,
                             const float2 z_region,
                             const float8 tmatrix,
-                            const float2 offset,
                             const uint cumulate)
 {
      int3 id = (int3) (get_global_id (0), get_global_id (1), get_global_id (2));
@@ -35,8 +34,8 @@
      voxel.y = mad((float) id.y, y_region.y, y_region.x);
      voxel.z = mad((float) id.z, z_region.y, z_region.x);
  
-     pixel.x = mad(voxel.x, tmatrix.s0, mad(voxel.y, tmatrix.s1, tmatrix.s3 - offset.x));
-     pixel.y = mad(voxel.x, tmatrix.s4, mad(voxel.y, tmatrix.s5, mad(voxel.z, tmatrix.s6, tmatrix.s7 - offset.y)));
+     pixel.x = mad(voxel.x, tmatrix.s0, mad(voxel.y, tmatrix.s1, tmatrix.s3));
+     pixel.y = mad(voxel.x, tmatrix.s4, mad(voxel.y, tmatrix.s5, mad(voxel.z, tmatrix.s6, tmatrix.s7)));
  
     if (cumulate) {
          volume[id.z * get_global_size (0) * get_global_size (1) +

+ 4 - 9
src/ufo-anka-backproject-task.c

@@ -91,11 +91,11 @@ create_transformation_matrix (UfoAnkaBackprojectTaskPrivate *priv, float tomo_an
     priv->tmatrix[0] = cos (tomo_angle);
     priv->tmatrix[1] = sin (tomo_angle);
     priv->tmatrix[2] = 0.0f;
-    priv->tmatrix[3] = EXTRACT_FLOAT (priv->center, 0);
+    priv->tmatrix[3] = EXTRACT_FLOAT (priv->center, 0) - EXTRACT_INT (priv->projection_offset, 0);
     priv->tmatrix[4] = cos (priv->lamino_angle) * sin (tomo_angle);
     priv->tmatrix[5] = -cos (priv->lamino_angle) * cos(tomo_angle);
     priv->tmatrix[6] = sin(priv->lamino_angle);
-    priv->tmatrix[7] = EXTRACT_FLOAT (priv->center, 1);
+    priv->tmatrix[7] = EXTRACT_FLOAT (priv->center, 1) - EXTRACT_INT (priv->projection_offset, 1);
 }
 
 UfoNode *
@@ -184,7 +184,7 @@ ufo_anka_backproject_task_process (UfoTask *task,
     UfoProfiler *profiler;
     gfloat tomo_angle;
     /* regions stripped off the "to" value */
-    gfloat x_region[2], y_region[2], z_region[2], proj_offset[2];
+    gfloat x_region[2], y_region[2], z_region[2];
     cl_command_queue cmd_queue;
     cl_mem image;
     cl_mem out_mem;
@@ -204,10 +204,6 @@ ufo_anka_backproject_task_process (UfoTask *task,
     z_region[0] = (gfloat) EXTRACT_INT (priv->z_region, 0);
     z_region[1] = (gfloat) EXTRACT_INT (priv->z_region, 2);
 
-    proj_offset[0] = (gfloat) EXTRACT_INT (priv->projection_offset, 0);
-    proj_offset[1] = (gfloat) EXTRACT_INT (priv->projection_offset, 1);
-
-
     tomo_angle = priv->tomo_angle_is_absolute ? priv->tomo_angle : priv->tomo_angle * priv->count;
     create_transformation_matrix (priv, tomo_angle);
 
@@ -218,8 +214,7 @@ ufo_anka_backproject_task_process (UfoTask *task,
     UFO_RESOURCES_CHECK_CLERR (clSetKernelArg (priv->bp_kernel, 4, sizeof (cl_float2), y_region));
     UFO_RESOURCES_CHECK_CLERR (clSetKernelArg (priv->bp_kernel, 5, sizeof (cl_float2), z_region));
     UFO_RESOURCES_CHECK_CLERR (clSetKernelArg (priv->bp_kernel, 6, sizeof (cl_float8), priv->tmatrix));
-    UFO_RESOURCES_CHECK_CLERR (clSetKernelArg (priv->bp_kernel, 7, sizeof (cl_float2), proj_offset));
-    UFO_RESOURCES_CHECK_CLERR (clSetKernelArg (priv->bp_kernel, 8, sizeof (cl_uint), (cl_uint *) &priv->count));
+    UFO_RESOURCES_CHECK_CLERR (clSetKernelArg (priv->bp_kernel, 7, sizeof (cl_uint), (cl_uint *) &priv->count));
 
     profiler = ufo_task_node_get_profiler (UFO_TASK_NODE (task));
     ufo_profiler_call (profiler, cmd_queue, priv->bp_kernel, 3, requisition->dims, NULL);