beam_hardening_apply — TOMOGRAPHY artifact op

• Data kinds: sinogram → sinogram

• Call: import fullseye as fs; fs.ledger.beam_hardening_apply(sinogram, high_energy_fraction=0.5, attenuation_ratio=0.4) (implementation को सीधे call करना हो तो import tomography; tomography.beam_hardening_apply(sinogram, high_energy_fraction=0.5, attenuation_ratio=0.4), registry से लेना हो तो opstomography.get("beam_hardening_apply"))

उपयोग

monochromatic sinogram को polychromatic में बदलता है — cupping।

> नीचे का विस्तृत विवरण मूल text में है — सारांश और headings का अनुवाद हो चुका है।

A real X-ray tube emits a spectrum, and low-energy photons are absorbed more, so the beam that survives a thick path is *harder* (higher mean energy) and therefore attenuated less per unit length than the beam that survives a thin one. The line integral stops being linear in path length, and the reconstruction of a uniform object comes back with a depressed centre: the cupping artefact.

The two-spectrum model used here is the smallest one that is physics and not a

curve::

I/I0 = (1-w) exp(-p) + w exp(-k p)

p_meas = -ln(I/I0)

with *w* the fraction of the beam at the high energy and *k < 1* its relative attenuation. It is exact at p = 0, concave everywhere, and monotone — so it is invertible, which is what beam_hardening_correct inverts.

Measured on a uniform disc (radius 60 px in 256 px, density 1/60 so the peak line integral is 2.0) at w = 0.5, k = 0.4: the FBP reconstruction's centre-to-rim ratio drops to 0.9312, against 0.9981 before hardening,

and beam_hardening_correct returns it to 0.9981 — the clean value in all four digits. (The clean ratio is 0.9981 rather than exactly 1 because of the detector sampling discussed in filtered_backprojection. The cupping is the 6.7-point drop, not the 0.2-point one.)

:param sinogram: (n_angles, n_detectors) monochromatic line integrals,

which must be >= 0.

:param high_energy_fraction: *w*, in [0, 1). 0 is a monochromatic beam and

the operator is then the identity.

:param attenuation_ratio: *k*, in (0, 1). 1 is again monochromatic. :returns: (n_angles, n_detectors) float64 hardened sinogram. :raises ValueError: on a negative sinogram (a negative line integral is not a

measurement this model can harden — the logarithm of the transmitted

intensity has already gone wrong upstream), or parameters outside range.

संदर्भ (sample data, साहित्य)

• Sample data catalog (DL URL / license) — 2-D के लिए skimage.data (BSD/public) + synthetic, 3-D के लिए real data sources (Stanford/PDS आदि) के DL URL।

• Operators का स्रोत और संदर्भ — इस op family के मूल research/methods के स्रोत।

• Algorithm का मानक स्रोत (लेखक, वर्ष) और उपयोग ऊपर की family usage guide में दिए गए हैं।

चलाए जा सकने वाले उदाहरण (verified samples जो सच में यह op call करते हैं)

• ct_reconstruction — py -3.11 examples/ct_reconstruction.py

• poc_battery_ct_degradation — py -3.11 examples/poc_battery_ct_degradation.py

वे अगले ops जिनसे type जुड़ता है (sinogram को input के रूप में लेते हैं)

backproject_sinogram · filtered_backprojection · sart_reconstruct · beam_hardening_correct · ring_artifact_apply · ring_artifact_remove · metal_trace_interpolate · sinogram_center_of_rotation

इसी category के (artifact)

beam_hardening_correct · ring_artifact_apply · ring_artifact_remove · metal_trace_interpolate


*Provenance: tomography.py — TOMOGRAPHY operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*

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