ct_dual_energy_reconstruct — TOMOGRAPHY ct_scan op

• Data kinds: projstack × projstack × ctgeometry → table

• Call: import fullseye as fs; fs.ledger.ct_dual_energy_reconstruct(proj_low, proj_high, geometry, mu_low=(1.0, 0.4), mu_high=(0.6, 0.3), method='fdk', device='auto', **options) (to call the implementation directly, import ctscan; ctscan.ct_dual_energy_reconstruct(proj_low, proj_high, geometry, mu_low=(1.0, 0.4), mu_high=(0.6, 0.3), method='fdk', device='auto', **options); from the registry, opstomography.get("ct_dual_energy_reconstruct"))

• GPU: none (CPU reference implementation only)

Usage

Two scans of one geometry to two basis-material volumes.

At each detector sample the two line integrals are two linear equations in the two material path lengths, L = M t (Alvarez & Macovski 1976). The system is solved in the projection domain, where beam hardening has not yet been smeared across the volume, and each material is reconstructed on its own. *mu_low* and *mu_high* are effective attenuation coefficients; for a polychromatic beam, call dualxray.basis_material_decompose per view first and reconstruct its output.

The noise of the two path lengths grows with the condition number of M, which is returned.

:param proj_low: (view, V, U) line integrals of the low-energy scan. :param proj_high: the high-energy scan, same shape. :param geometry: dict from ct_scan_geometry. :param mu_low: attenuation of the two basis materials at the low energy. :param mu_high: attenuation of the two basis materials at the high energy. :param method: "fdk", "sirt", "os_sart" or "tv". :param device: "auto", "cpu" or "cuda". :param options: passed to the reconstruction. :returns: dict with basis_0 and basis_1 (path-length densities, volumes),

and condition.

:raises ValueError: on mismatched shapes or a singular matrix. Empty input

(proj_low with 0 elements) raises ValueError.

References (sample data, literature)

• Sample-data catalog (download URLs / licences) — 2-D uses skimage.data (BSD/public domain) plus synthetic images; 3-D lists download URLs for real data sources (Stanford, PDS, …).

• Operator provenance and references — the sources of the research/methods this op family came from.

• The canonical algorithm (author, year) and its uses are named in the family usage guide above.

Runnable examples (verified samples that actually call this op)

• poc_ct_casting_sparse_views — py -3.11 examples/poc_ct_casting_sparse_views.py

• poc_real_walnut_cbct — py -3.11 examples/poc_real_walnut_cbct.py

Ops the type connects to (they accept table as input)

—

Same category (ct_scan)

ct_scan_geometry · shepp_logan_3d · ellipsoid_phantom · ellipsoid_projections · ct_forward_project · ct_adjoint_project · fdk_reconstruct · sirt_reconstruct


*Provenance: ctscan.py — TOMOGRAPHY operator registry. This per-op note is generated by tools/opdocs.py md (do not hand-edit).*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.