beam_hardening_correct — TOMOGRAPHY artifact op

• Data kinds: sinogram → sinogram

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

उपयोग

cupping हटाता है — या तो exact model का inverse, या calibrated polynomial।

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

Two routes, and the difference between them is what you are allowed to claim:

• Model inverse (default). beam_hardening_apply is a monotone scalar function of the line integral, so it has an exact inverse; this builds it by interpolating the forward curve on *n_table* nodes. Round-trip error on the disc phantom: 1.6e-08 absolute and 8.0e-09 relative to the peak line integral — the table resolution and nothing else. This is a *simulation* tool — it needs the same w and k the hardening used, which on real data nobody has.

• Polynomial (*poly_coeffs*). p_corr = c1 p + c2 p^2 + ..., the water-correction of every clinical scanner, whose coefficients come from scanning a uniform water phantom and fitting for a flat reconstruction. This is what applies to real data, and it is only as good as the assumption that everything in the field of view attenuates like water.

The honest limitation is the same one every scanner has: the correction is material-specific. A water calibration applied to a slice containing bone or metal over-corrects the dense material and leaves dark bands between dense objects, and nothing in the sinogram says which case you are in.

:param sinogram: (n_angles, n_detectors) hardened line integrals. :param high_energy_fraction: *w* used by the forward model. :param attenuation_ratio: *k* used by the forward model. :param poly_coeffs: (c1, c2, ...); when given, the polynomial route is

used and *w* / *k* are ignored.

:param n_table: nodes of the inverse table, 64 .. 1048576. :returns: (n_angles, n_detectors) float64 corrected sinogram. :raises ValueError: as beam_hardening_apply, plus an empty or

non-finite *poly_coeffs*.

संदर्भ (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

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

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

इसी category के (artifact)

beam_hardening_apply · 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.