light_transport op• Data kinds: कोई नहीं → images (केवल arguments से तय होने वाला op — यह कोई image या data input नहीं लेता)
• Call: import fullseye as fs; fs.ledger.high_frequency_patterns(shape=(1, 256), period=8, kind='stripes', fill=0.5, n_shifts=None, complement=False) (implementation को सीधे call करना हो तो import lighttransport; lighttransport.high_frequency_patterns(shape=(1, 256), period=8, kind='stripes', fill=0.5, n_shifts=None, complement=False), registry से लेना हो तो opsoptics.get("high_frequency_patterns"))
खिसकाए गए उच्च-आवृत्ति projector पैटर्न: fill ratio α वाली binary धारियाँ, checkerboard, या phase-shifted sinusoids (एक या कई periods) (images)।
> नीचे का विस्तृत विवरण मूल text में है — सारांश और headings का अनुवाद हो चुका है।
*shape* (H, W) is the projector frame; x is the column index.
• "stripes" — 1 where (x − s_k) mod period < α·period, for shifts s_k = floor(k·period/n_shifts); *period* an integer >= 2 and α·period must be a whole number of pixels (the realised fill is then exactly α — a rounded fill would bias the separation). Default n_shifts = period (every pixel is lit and unlit at least once). *complement* appends 1 − p for each pattern (Nayar et al. eq. 7).
• "checker" — squares of side period/2 (α = 0.5), shifted by floor(k·period/n_shifts) in both axes (n_shifts² images, default n_shifts = min(period, 5)). Not a 2-D problem, so render_transport refuses it; it is for real captures.
• "sinusoid" — 0.5 + 0.5 cos(2π x / period − 2π n / N), n = 0..N−1, N = n_shifts (default 4, >= 3) — the sign convention of fringe.wrapped_phase, which returns 2π x / period. *period* may be a sequence (a micro phase-shifting set): the stacks are concatenated in that order. *fill* must stay 0.5 here.
Returns a list of (H, W) float arrays in [0, 1] (images).
Raises ValueError: bad *shape*; unknown *kind*; *period* out of range (stripes/checker integer >= 2, checker even; sinusoid > 2); *fill* outside (0, 1) or not a whole number of pixels per period (checker and sinusoid: not 0.5); *n_shifts* out of range; *complement* with a kind other than stripes.
optics के सभी ops गणना से पहले input की जाँच करते हैं (कुछ भी चुपचाप पास नहीं होता):
• Unit argument के नाम में ही लिखी होती है — _mm / _um / _deg / _mrad। mm और µm की गड़बड़ी crash नहीं करती, बल्कि "सही दिखने वाला पर गलत उत्तर" देती है, इसलिए नाम से इसे रोका जाता है। मान के आकार से unit का अनुमान बिल्कुल नहीं लगाया जाता।
• String से ValueError — float('50') सफल हो जाता है, इसलिए बिना parse किया config value length के रूप में निकल जाता (मापा गया: thin_lens('50', '200') सही दिखने वाला 66.667 mm लौटा रहा था)। bool को भी True == 1 वाले implicit promotion के रूप में अस्वीकार किया जाता है।
• complex / masked array से ValueError (केवल real-valued slots; imaginary part को चुपचाप छोड़ना या mask हटाना अस्वीकार)। हर input पर NaN/Inf से ValueError।
• शून्य से भाग और उससे जुड़े मामलों को नाम लेकर अस्वीकार किया जाता है: focal length 0, radius of curvature 0, refractive index <= 0, पूरी तरह opaque aperture (सब 0, इसलिए normalisation 0/0), ऐसा PSF जिसका योग <= 0 हो, S0 = 0 वाला Stokes vector, और front focal point पर रखा object (image अनंत पर)।
• केवल 2 ops non-finite value लौटाते हैं, और वह भी contract के रूप में लिखा हुआ: depth_of_field hyperfocal distance से आगे far_mm = inf (hyperfocal distance की परिभाषा यही है) और gaussian_beam waist पर wavefront_radius_mm = inf (plane wavefront की radius of curvature)। दोनों साथ में एक finite साथी (far_is_infinite / curvature_per_mm) भी लौटाते हैं। इसके अलावा कोई भी चुपचाप आया NaN/Inf अंदर ही पकड़ा जाता है और ValueError देता है — "float64 overflow हुआ" और "उत्तर अनंत है" अलग-अलग दावे हैं, इसलिए पहले को दूसरे का चेहरा पहनाकर नहीं लौटाया जाता।
• Size की सीमा: generate होने वाले grid के लिए optics.MAX_GRID (4096), दिए गए field/PSF/aperture के लिए optics.MAX_FIELD_ELEMENTS (2^24), ABCD element chain के लिए optics.MAX_SYSTEM_ELEMENTS (1024), Zernike के लिए MAX_ZERNIKE_TERMS (512) / MAX_ZERNIKE_ORDER (40) / MAX_ZERNIKE_BASIS (2^25)। छोटे argument से बहुत बड़ा internal allocation होने वाले रास्तों (मापा गया: n_max=40 × 4096² पर 108 GB) को fail-closed ढंग से बंद किया गया है।
• भौतिक रूप से असंभव states भी अस्वीकार: degree of polarisation > 1 वाला Stokes vector, ऋणात्मक transmittance, ऋणात्मक intensity, और n-|m| odd जैसे अमान्य Zernike indices।
• 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 में दिए गए हैं।
• poc_interreflection_fringe_error — py -3.11 examples/poc_interreflection_fringe_error.py
images को input के रूप में लेते हैं)film_thickness_map · render_transport · separate_direct_global · micro_phase_decode
light_transport)groove_profile · form_factors_2d · transport_matrix_radiosity · render_transport · separate_direct_global · fringe_multipath_phase_error · predict_fringe_phase_error · micro_phase_decode
*Provenance: lighttransport.py — OPTICS operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.