artifact op• 数据种类:sinogram → sinogram
• 调用:import tomography; tomography.metal_trace_interpolate(sinogram, angles_deg=None, image_threshold=None, mask=None, size=None)(或 opstomography.get("metal_trace_interpolate"))
线性插值的金属伪影抑制(LI-MAR)。
> 以下的详细说明为原文 —— 摘要与标题已翻译。
A metal implant attenuates so strongly that its detector bins carry almost no
photons; the measured line integrals there are dominated by scatter and by the
noise floor of the logarithm, and back-projecting them lays down the dark
bands and bright streaks between dense objects that make a slice unreadable.
The oldest working answer, and still the baseline every newer method is
compared against: declare the affected bins *missing* and fill them by linear
interpolation along the detector axis, per angle. The result is not the truth
— it is a smooth guess with the streaks removed — and it blurs whatever was
genuinely behind the metal.
**How the affected bins are found matters more than the interpolation, and
the obvious way is measurably worse than doing nothing.** The metal trace is
located the way LI-MAR actually does it: reconstruct once with
:func:filtered_backprojection, threshold the *image* at
`mean + 3*std`, forward-project that binary mask, and treat the bins it
touches as missing. Thresholding the sinogram directly is the shortcut
that suggests itself, and on the Shepp-Logan phantom with a 6-px implant it
goes wrong in the direction that is hardest to notice — it flags the densest
*legitimate* structure (the skull, seen edge-on) and interpolates it away:
implant density uncorrected sinogram threshold image threshold
x8 0.0487 0.0626 0.0255
x30 0.1583 0.2249 0.0255
x100 0.5214 0.7127 0.0257
(normalised RMS error against the metal-free truth, outside the implant
footprint; the metal-free reconstruction itself scores 0.0250.) The image
route recovers essentially all of the damage at every density. The sinogram
route makes it 1.3-1.4x *worse* than not correcting at all, at every density,
while still producing a picture with fewer visible streaks — which is why the
shortcut is not offered as an option here rather than merely discouraged.
Inside the implant footprint the reconstruction is now wrong on purpose: the
metal is gone. Clinical practice puts it back from the thresholded
reconstruction afterwards; that step is not implemented.
:param sinogram: `(n_angles, n_detectors)`.
:param angles_deg: view angles; `None -> uniform [0, 180)`. Used for the
internal reconstruction and re-projection, so a wrong angle set here
misplaces the trace.
:param image_threshold: image-domain metal threshold; `None` ->
`mean + 3*std` of the internal reconstruction.
:param mask: explicit boolean `(n_angles, n_detectors)` metal trace. When
given, no reconstruction is done and *image_threshold* is ignored — this
is the route to use when the trace comes from a segmentation you trust.
:param size: side of the internal reconstruction; `None` -> the inscribed
square.
:returns: `(n_angles, n_detectors)` float64 sinogram.
:raises ValueError: if the mask shape disagrees with the sinogram, if the mask
is not boolean, if nothing is left to interpolate from, or if any *row* is
entirely masked.
• 示例数据目录(下载 URL / 许可证) —— 2-D 用 skimage.data(BSD/公有领域)加合成图,3-D 给出真实数据源(Stanford/PDS 等)的下载 URL。
• 算子来历与参考文献 —— 该算子族所依据的研究/方法出处。
• 算法的正典(作者・年份)与用途见上面的族使用指南。
• ct_reconstruction — py -3.11 examples/ct_reconstruction.py
sinogram 作为输入)backproject_sinogram · filtered_backprojection · sart_reconstruct · beam_hardening_apply · beam_hardening_correct · ring_artifact_apply · ring_artifact_remove · sinogram_center_of_rotation
artifact)beam_hardening_apply · beam_hardening_correct · ring_artifact_apply · ring_artifact_remove
*Provenance: tomography.py — TOMOGRAPHY 算子登记表。本条目由 tools/opdocs.py md 自动生成(请勿手工编辑)。*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.