pixelshift op• Data kinds: video × matrix → image2d
• Call: import fullseye as fs; fs.ledger.pixel_shift_motion_mask(frames, shifts, pattern='RGGB', scale=1, threshold=4.0, noise_sigma=0.0) (implementation को सीधे call करना हो तो import pixelshift; pixelshift.pixel_shift_motion_mask(frames, shifts, pattern='RGGB', scale=1, threshold=4.0, noise_sigma=0.0), registry से लेना हो तो opsoptics.get("pixel_shift_motion_mask"))
हिले हुए pixels का नक्शा (H·scale, W·scale) (1.0 = हिला, 0.0 = स्थिर / तय नहीं हो सकता)।
> नीचे का विस्तृत विवरण मूल text में है — सारांश और headings का अनुवाद हो चुका है।
同じ出力の格子点に、別の枚から同じ色(Bayer なら G、白黒ならそのまま)の標本が 2 つ以上入る。被写体が止まっていれば、その差は時間の雑音だけ(差の標準偏差 √2·σ)。差の幅(最大 − 最小)が threshold · √2 · σ を超えた格子点を「動いた」とする。σ は *noise_sigma* で与えるか、0 なら全格子点の差の中央値から推定する(半正規の中央値 0.6745·√2·σ。動いた画素が半数を超えると推定が壊れる —— MAD と同じ破綻点)。
★雑音の少ない静止画でも、シフトの誤差があると細かい模様の上で差が出る(誤差 δ・空間周波数 f・振幅 a で差 ≈ 2π f a δ)。閾値はその偽陽性と、遅い動き(1 枚あたり小さなずれ)の見逃しの綱引き。1 画素シフト 4 枚の Bayer では、各格子点の G はちょうど 2 つ(別の 2 枚から)。
Raises ValueError: frames・shifts の形 / 公称のシフトが格子に乗らない / threshold が正でない / どの格子点にも同じ色の標本が 2 つ入らない(このシフト列では動きを検出できない)。
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
image2d को input के रूप में लेते हैं)fraunhofer_pattern · pupil_psf · pupil_blur · psf_to_mtf · edge_spread · veiling_glare_index · emva_pair_statistics · emva_defect_pixels
pixelshift)pixel_shift_pattern · pixel_shift_capture · pixel_shift_merge · 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.