Skip to main content

Estimate the tomographic system-matrix for rays in voxels.

Project description

Overlap of a ray and a volume cell (voxel) Build Status

Estimate the euclidean overlap passed by a ray within a rectangular volume cell (voxel).

img

For a given, rectangular space partitioning in 3D, and a given ray the overlap of all voxels with the ray is estimated. The figure shows a ray and its overlap with voxels. A brown overlap with voxel 3, a red overlap with voxel 0, a purple overlap with voxel 4, and a green overlap with voxel 5. The ray is defined by its support and direction vectors. The space-partitioning is defined by its bin-edges.

Interface

There is one core function:

import ray_voxel_overlap
ray_voxel_overlap.estimate_overlap_of_ray_with_voxels?
"""
Returns the voxel indices and overlap distances for one single ray
(defined by support and direction) with voxels defined by the bin_edges
in x,y and z.

support         3D support vector of ray.

direction       3D direction vector of ray.

x_bin_edges     voxel bin edge positions in x.

y_bin_edges     voxel bin edge positions in y.

z_bin_edges     voxel bin edge positions in z.
"""

There are two more functions:

  • 2nd ray_voxel_overlap.estimate_system_matrix()

Create a system-matrix using scipy.sparse matrix which can be used for iterative tomographic reconstructions.

  • 3rd ray_voxel_overlap.estimate_overlap_of_ray_bundle_with_voxels()

Average the overlap of multiple rays representing a single read-out-channel. This is useful when a single ray is not representative enough for the geometry sensed by a read-out-channel in your tomographic setup, e.g. when there is a narrow depth-of-field.

Tomographic system-matrix

import numpy as np
import ray_voxel_overlap as rvo

np.random.seed(0)

N_RAYS = 100
supports = np.array([
    np.random.uniform(-2.5, 2.5, N_RAYS),
    np.random.uniform(-2.5, 2.5, N_RAYS),
    np.zeros(N_RAYS)
]).T

directions = np.array([
    np.random.uniform(-0.3, 0.3, N_RAYS),
    np.random.uniform(-0.3, 0.3, N_RAYS),
    np.ones(N_RAYS)
]).T

norm_directions = np.linalg.norm(directions, axis=1)
directions[:, 0] /= norm_directions
directions[:, 1] /= norm_directions
directions[:, 2] /= norm_directions

N_X_BINS = 8
N_Y_BINS = 13
N_Z_BINS = 7
system_matrix = rvo.estimate_system_matrix(
    supports=supports,
    directions=directions,
    x_bin_edges=np.linspace(-100., 100., N_X_BINS+1),
    y_bin_edges=np.linspace(-100., 100., N_Y_BINS+1),
    z_bin_edges=np.linspace(0., 200., N_Z_BINS+1),
)

How it is done

To be fast, the production-code is written in C and wrapped in cython. But for development, there is a python implementation.

Authors

Sebastian A. Mueller,

ETH-Zurich, Switzerland (2014-2019),

MPI-Heidelberg, Germany (2019-)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ray_voxel_overlap-0.0.3.tar.gz (8.5 kB view details)

Uploaded Source

File details

Details for the file ray_voxel_overlap-0.0.3.tar.gz.

File metadata

  • Download URL: ray_voxel_overlap-0.0.3.tar.gz
  • Upload date:
  • Size: 8.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.4.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.6.7

File hashes

Hashes for ray_voxel_overlap-0.0.3.tar.gz
Algorithm Hash digest
SHA256 54853ecf6d8c8f0ccdb2acceedb2ad5b088fff6ad57587dacad5ac8d76c6b356
MD5 b0c117351615564451abace2fe834d0a
BLAKE2b-256 ff97037a1f02ab1b0c5e184bd15bf16a63c1a5b2dedd00e04ec0f56144c8b25d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page