Skip to main content

Estimate the tomographic system-matrix for rays in voxels.

Project description

TestStatus PyPiStatus BlackStyle PackStyleBlack

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

img_ray_and_voxel

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.

Install

pip install ray_voxel_overlap

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.7.tar.gz (86.6 kB view details)

Uploaded Source

File details

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

File metadata

  • Download URL: ray_voxel_overlap-0.0.7.tar.gz
  • Upload date:
  • Size: 86.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.6

File hashes

Hashes for ray_voxel_overlap-0.0.7.tar.gz
Algorithm Hash digest
SHA256 1050d08d8824c2bab8be305583bd4d64563319da343a1408d3c1d157a659d720
MD5 91de5878fea869e8072dc656e117ed5c
BLAKE2b-256 4e3fa763bb050d9f11c41d0d9916e212b52c66869f21838b64c74c3fdcc5949e

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