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 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 में दिए गए हैं।
• ct_reconstruction — py -3.11 examples/ct_reconstruction.py
• poc_battery_ct_degradation — py -3.11 examples/poc_battery_ct_degradation.py
sinogram को input के रूप में लेते हैं)backproject_sinogram · filtered_backprojection · sart_reconstruct · beam_hardening_correct · ring_artifact_apply · ring_artifact_remove · metal_trace_interpolate · sinogram_center_of_rotation
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.