ring_artifact_remove — TOMOGRAPHY artifact op

데이터 종류: sinogramsinogram

호출: import tomography; tomography.ring_artifact_remove(sinogram, window=5, mode='median')(또는 opstomography.get("ring_artifact_remove"))

사용법

각도 평균 프로파일을 평탄화해 검출기 빈별 오프셋을 제거합니다.

> 아래 상세 설명은 원문입니다 —— 요약과 제목은 번역되어 있습니다.

The mean of a sinogram column over all angles is a smooth function of the

detector position for any object that stays inside the field of view — it is

essentially the object's mass seen from every side. A gain error adds a

*constant* to one column, so it appears in that mean as a spike on a smooth

curve. Smoothing the mean profile and subtracting the difference removes the

spike and leaves the object.

Measured on the Shepp-Logan phantom scaled to a peak line integral of 1.18

(i.e. CT-realistic, see the note below) with `gain_sigma=0.02`: the

reconstruction's normalised RMS error against the truth goes 0.0250 (clean)

-> 0.0643 (with rings) -> 0.0358 (removed at the default window), so

72 % of the damage is undone.

The window is the whole argument, and it was chosen by measurement rather

than by taste. Removed fraction, against the damage the same call does to an

already-clean sinogram:

window median: undone / damage mean: undone / damage

3 61.0 % / +0.0000 70.4 % / +0.0004

5 72.3 % / +0.0002 82.6 % / +0.0019

7 74.3 % / +0.0017 82.4 % / +0.0042

11 73.6 % / +0.0025 74.0 % / +0.0091

31 73.3 % / +0.0043 37.4 % / +0.0244

61 58.2 % / +0.0109 9.0 % / +0.0356

The default is `window=5, mode="median"` because it is the setting that

removes most of the rings while doing almost nothing to a sinogram that did

not need it — and *that* is the property that matters, because this operator

will be run on scans whose rings nobody has measured. `mean` at the same

window removes 10 points more and costs 10x the collateral damage; wide

windows are worse at both.

Two failure modes are stated rather than hidden. This cannot separate a

real object feature that is thin in the detector direction and present at

every angle — the axis of rotation itself is the extreme case — from a gain

error. And *gain_sigma is in line-integral units*, so how much a given gain

error matters depends entirely on how large the line integrals are: on the

same phantom left in raw pixel units (peak line integral 70.9 rather than

1.18) the identical 2 % gain error changes the reconstruction's error by less

than 0.0001 and this operator has nothing to do. That is not a bug in either

place — it is what "2 % of the signal" means when the signal is 60x larger.

:param sinogram: `(n_angles, n_detectors)`.

:param window: smoothing width in detector bins, an odd int `3 .. n_det`.

:param mode: `"median" (robust, the default) or "mean"`.

:returns: `(n_angles, n_detectors)` float64 sinogram.

:raises ValueError: on an even or out-of-range window, or an unknown mode.

참고(샘플 데이터·문헌)

• 샘플 데이터 카탈로그(DL URL / 라이선스) —— 2-D 는 skimage.data(BSD/public)+ 합성, 3-D 는 실데이터 소스(Stanford/PDS 등)의 DL URL.

• 연산자의 내력·참고문헌 —— 이 연산자 족의 바탕이 된 연구/기법의 출처.

• 알고리즘의 정전(저자·연도)과 용도는 위의 패밀리 사용 가이드에 적혀 있습니다.

실행 가능한 예제(이 연산자를 실제로 호출하는 검증된 샘플)

ct_reconstructionpy -3.11 examples/ct_reconstruction.py

타입이 이어지는 다음 연산자(sinogram 를 입력으로 받는 것)

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

같은 카테고리(artifact)

beam_hardening_apply · beam_hardening_correct · ring_artifact_apply · metal_trace_interpolate


*Provenance: tomography.py — TOMOGRAPHY 연산자 레지스트리. 이 op 노트는 tools/opdocs.py md 가 자동 생성합니다(직접 편집하지 마세요).*

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