sinogram_design — TOMOGRAPHY layout op

• Data kinds: कोई नहीं → table (केवल arguments से तय होने वाला op — यह कोई image या data input नहीं लेता)

• Call: import fullseye as fs; fs.ledger.sinogram_design(n_angles=180, n_detectors=None, size=256, detector_pitch_mm=1.0, span_deg=180.0) (implementation को सीधे call करना हो तो import tomography; tomography.sinogram_design(n_angles=180, n_detectors=None, size=256, detector_pitch_mm=1.0, span_deg=180.0), registry से लेना हो तो opstomography.get("sinogram_design"))

उपयोग

scan geometry क्या resolve कर सकती है और क्या नहीं — कुछ भी बनाने से पहले।

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

The axial counterpart of visiondesign.imaging_budget and of interferometry.csi_design: no data goes in, only the geometry, and what comes out are the limits that the geometry has already decided.

Returns a dict with, among others:

• resolvable_feature_mm — 2 * pitch: two detector samples per cycle is the Nyquist floor, and no reconstruction algorithm recovers a detail finer than the detector saw.

• views_for_full_sampling — ceil(pi/2 * n_detectors), the classical matching of angular to radial sampling (VIEWS_PER_DETECTOR).

• undersampling_factor — that number over n_angles. 1.0 or below is a fully sampled scan. Above it you are doing sparse-view CT on purpose and the reconstruction algorithm has to make up the difference; the measured cost is in this module's docstring and in the test suite's break table.

• streak_free_radius_px — 1 / d(theta) with d(theta) in radians: the radius, in pixels, at which the *azimuthal* sample spacing between neighbouring views (r * d(theta)) grows past one sample. Outside it, filtered back-projection lays down visible streaks. For 180 views over 180 degrees this is 57.3 px, i.e. a 256-px phantom is already streaking at its corners. It does not depend on the detector pitch: the radius is quoted in the same unit the sample spacing is, so the pitch cancels (pitch / d(theta) is the same radius in millimetres, which is what an earlier version returned under the pixel label — 28.6 "px" at 0.5 mm, 114.6 at 2 mm, for a geometry whose streak radius had not changed).

• sinogram_bytes / elements — what you are about to allocate.

• verdict — "fully sampled" / "sparse view".

:param n_angles: planned number of views. :param n_detectors: planned detector bins; None -> enough to cover the

diagonal of a *size* x *size* image.

:param size: reconstruction grid side in pixels. :param detector_pitch_mm: physical detector bin spacing. :param span_deg: angular range of the scan. :returns: dict of floats / ints / str. :raises ValueError: on non-int counts, non-positive pitch or span.

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

• tomography_reconstruct — py -3.11 examples/tomography_reconstruct.py

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

—

इसी category के (layout)

projection_angles


*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.