DiffractionVizzard · Open-source browser-based simulation suite
Source CodeDocumentation
Launch Simulation → ← Texture Tomography
Module 04 · Simulation

Tomography

Simulate X-ray computed tomography: generate sinograms from configurable phantoms, then reconstruct cross-sections using filtered back-projection — all in the browser via WebAssembly.

Launch Simulation → ← Texture Tomography
Tomographic reconstruction illustration

The Radon Transform

Parallel-beam X-ray tomography measures the line integrals of the attenuation coefficient μ(x,y) along rays at angle θ offset by distance t from the rotation axis. Collecting these measurements for all angles defines the Radon transform:

p(t, θ) = ∫∫ μ(x,y) δ(x cosθ + y sinθ − t) dx dy

Displaying p(t, θ) as a 2D image with t on the horizontal axis and θ on the vertical axis produces the sinogram — so named because a point source traces a sinusoidal arc across the image. Reconstruction is the inverse problem: recover μ(x,y) from its projections.

Filtered Back-Projection

The exact analytic inverse of the Radon transform is computed via the Fourier slice theorem: the 1D Fourier transform of each projection p(t, θ) equals a radial slice of the 2D Fourier transform of μ(x, y) at angle θ. Direct inversion in frequency space gives filtered back-projection (FBP):

μ(x,y) = ∫₀^π [p(·,θ) * h](x cosθ + y sinθ) dθ

where h is a ramp filter |ω| in frequency space, optionally windowed by a Shepp–Logan, Hamming, or cosine envelope to suppress high-frequency noise amplification.

In the Simulation

Choose a phantom from the built-in library (Shepp–Logan, disc, rectangle, or concentric rings) or sketch a custom object on the canvas. The simulator computes the exact sinogram analytically, then applies filtered back-projection using the WebAssembly kernel for fast reconstruction. Adjustable parameters include:

Number of projection angles (1 to 360) · Number of detector pixels · Reconstruction filter: ramp, Shepp–Logan, Hamming, cosine · Display: phantom, sinogram, or reconstructed cross-section side-by-side.
Observe how undersampling in angle causes streak artefacts, and how the choice of filter trades spatial resolution against noise.