pixelshift op• Data kinds: कोई नहीं → matrix (केवल arguments से तय होने वाला op — यह कोई image या data input नहीं लेता)
• Call: import fullseye as fs; fs.ledger.pixel_shift_pattern(mode='4shot', error_px=0.0, cycles=1, seed=0) (implementation को सीधे call करना हो तो import pixelshift; pixelshift.pixel_shift_pattern(mode='4shot', error_px=0.0, cycles=1, seed=0), registry से लेना हो तो opsoptics.get("pixel_shift_pattern"))
pixel-shift का nominal shift क्रम (N, 2) (dr, dc) [sensor pixel], actuator की त्रुटि जोड़कर लौटाता है।
> नीचे का विस्तृत विवरण मूल text में है — सारांश और headings का अनुवाद हो चुका है।
*mode*:
• "single" —— (0, 0) の 1 枚(比較の基準)。
• "4shot" —— (0,0)・(0,1)・(1,1)・(1,0)。Bayer の 2×2 を一巡し、各画素で R・G・G・B が揃う(解像度はそのまま)。
• "half4" —— (0,0)・(0,½)・(½,½)・(½,0)。白黒センサで標本の間隔を 1/2 画素に(ナイキスト 2 倍)。
• "16shot" —— 半画素 4 位相 × 1 画素 4 枚。Bayer で 2 倍の格子の各点に R・G・G・B が揃う。
*error_px*: 各枚・各軸に独立に足す正規乱数の標準偏差 [画素] (圧電の位置決め誤差・振動)。0 なら公称のまま。★合わせる側(pixel_shift_merge)には公称を渡すこと —— 実機は誤差を知らない。*cycles*: 同じ巡りを何周するか(N 倍の枚数で雑音を √N で下げる。動く被写体では誤差の元)。*seed*: 誤差の乱数の種。
Raises ValueError: mode が一覧に無い / error_px が負・0.5 以上・非有限 / cycles が 1〜64 の整数でない。
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_pixel_shift — py -3.11 examples/poc_pixel_shift.py
matrix को input के रूप में लेते हैं)abcd_trace · emva_filter_distortion · mueller_apply · mueller_checks · pixel_shift_capture · pixel_shift_merge · pixel_shift_motion_mask · oct_from_spectra
pixelshift)pixel_shift_capture · pixel_shift_merge · pixel_shift_motion_mask · false_color_metric · pixel_shift_resolution_budget
*Provenance: pixelshift.py — OPTICS operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.